diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..144f64e300 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,22 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node +{ + "name": "Node.js & TypeScript", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye", + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "npm install", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + "remoteUser": "root" +} diff --git a/.github/workflows/package-ui-deploy-preview.yaml b/.github/workflows/package-ui-deploy-preview.yaml index 6428501217..83f2a683c7 100644 --- a/.github/workflows/package-ui-deploy-preview.yaml +++ b/.github/workflows/package-ui-deploy-preview.yaml @@ -27,7 +27,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: '16' + node-version: '20' cache: 'yarn' - name: Install `foundry` diff --git a/.github/workflows/package-ui-deploy.yaml b/.github/workflows/package-ui-deploy.yaml index f7ea25a4e8..afb68323c1 100644 --- a/.github/workflows/package-ui-deploy.yaml +++ b/.github/workflows/package-ui-deploy.yaml @@ -25,7 +25,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: '16' + node-version: '20' cache: 'yarn' - name: Install `foundry` diff --git a/.github/workflows/package-ui-test.yaml b/.github/workflows/package-ui-test.yaml index 591106304c..b676d9680b 100644 --- a/.github/workflows/package-ui-test.yaml +++ b/.github/workflows/package-ui-test.yaml @@ -19,7 +19,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: '16' + node-version: '20' cache: 'yarn' - name: Install `foundry` @@ -36,5 +36,5 @@ jobs: - name: Build `ui` run: yarn build:deploy:ui - - name: Lint `ui` - run: yarn workspace @ionicprotocol/ui lint + # - name: Lint `ui` + # run: yarn workspace @ionicprotocol/ui lint diff --git a/.gitignore b/.gitignore index 7d77ffc633..205b106d6a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ !.yarn/sdks !.yarn/versions -# !.yarn/cache +#!.yarn/cache .pnp.* node_modules* !/packages/bots/liquidator/.env diff --git a/netlify.toml b/netlify.toml index b02b2168e6..41de7ceb2f 100644 --- a/netlify.toml +++ b/netlify.toml @@ -34,6 +34,7 @@ ETHEREUM = "false" ZKEVM = "true" LINEA = "true" NEON = "true" +# MODE_NETWORK = "true" # TODO IS_SENTRY_ENABLED = "false" IS_PRODUCTION = "false" @@ -45,9 +46,11 @@ ARBITRUM = "true" ETHEREUM = "false" ZKEVM = "true" LINEA = "true" +# MODE_NETWORK = "true" # TODO NEON = "true" IS_SENTRY_ENABLED = "false" IS_PRODUCTION = "false" +NODE_ENV = "production" [context.production.environment] NEXT_PUBLIC_SHOW_TESTNETS = "false" @@ -57,9 +60,11 @@ ARBITRUM = "true" ETHEREUM = "false" ZKEVM = "true" LINEA = "true" +# MODE_NETWORK = "true" # TODO NEON = "true" IS_SENTRY_ENABLED = "true" IS_PRODUCTION = "true" +NODE_ENV = "production" [functions] directory = "./packages/functions/dist/functions/src/functions" diff --git a/package.json b/package.json index 9a55dbe9d7..56ba3ceef3 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,9 @@ }, "dependencies": { "@resolver-engine/core": "^0.3.3", - "ts-node": "^10.9.1" + "@wagmi/core": "^2.2.1", + "ts-node": "^10.9.1", + "viem": "^2.1.1" }, "resolutions": { "@types/react": "^17.0.15" diff --git a/packages/bots/pyth-updater/package.json b/packages/bots/pyth-updater/package.json index 7c7b29df40..518e3ea0b1 100644 --- a/packages/bots/pyth-updater/package.json +++ b/packages/bots/pyth-updater/package.json @@ -8,7 +8,7 @@ "lint": "eslint . -c .eslintrc.json --ext ts,json", "lint-fix": "eslint . -c .eslintrc.json --fix --ext ts,json", "staging": "NODE_ENV=staging node build/server.js", - "dev": "HTTPS=true NODE_ENV=development ts-node-dev --inspect --respawn src/server.ts", + "dev": "HTTPS=true NODE_ENV=development ts-node-dev --inspect --respawn src/run.ts", "test": "NODE_ENV=test nyc ./node_modules/.bin/mocha --require ts-node/register ./src/test/**/**/**/**/*.test.ts", "build": "rimraf build && tsc -p tsconfig.json" }, @@ -36,7 +36,8 @@ "ethers": "^5.6.5", "pino": "^8.0.0", "pino-pretty": "^9.1.1", - "prettier": "2.6.2" + "prettier": "2.6.2", + "ts-node-dev": "^2.0.0" }, "devDependencies": { "@types/eslint": "^8.4.3", @@ -52,6 +53,7 @@ "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1", + "ts-node-dev": "^2.0.0", "typescript": "^5.1.6" } } diff --git a/packages/bots/pyth-updater/src/config/index.ts b/packages/bots/pyth-updater/src/config/index.ts index 4c0a20ed40..921537b500 100644 --- a/packages/bots/pyth-updater/src/config/index.ts +++ b/packages/bots/pyth-updater/src/config/index.ts @@ -1,6 +1,7 @@ -import { linea, neon, zkevm } from '@ionicprotocol/chains'; +import { linea, mode, neon, zkevm } from '@ionicprotocol/chains'; import { pythConfig as lineaPythConfig } from './linea'; +import { pythConfig as modePythConfig } from './mode'; import { pythConfig as neonPythConfig } from './neon'; import { pythConfig as zkevmPythConfig } from './zkevm'; @@ -8,4 +9,5 @@ export const chainIdToConfig = { [neon.chainId]: neonPythConfig, [linea.chainId]: lineaPythConfig, [zkevm.chainId]: zkevmPythConfig, + [mode.chainId]: modePythConfig, }; diff --git a/packages/bots/pyth-updater/src/config/mode.ts b/packages/bots/pyth-updater/src/config/mode.ts new file mode 100644 index 0000000000..754e13b7e0 --- /dev/null +++ b/packages/bots/pyth-updater/src/config/mode.ts @@ -0,0 +1,70 @@ +import { PythAssetConfig } from '../types'; + +import { pythConfig as commonPythConfig } from './common'; + +export const pythConfig: PythAssetConfig[] = [ + ...commonPythConfig, + { + // price feed for WETH + priceId: '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace', + configRefreshRateInSeconds: 3600, + validTimePeriodSeconds: 86400, // 24 hrs + deviationThresholdBps: 100, // 1% + }, + { + // price feed for USDC + priceId: '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a', + configRefreshRateInSeconds: 3600, + validTimePeriodSeconds: 86400, // 24 hrs + deviationThresholdBps: 100, // 1% + }, + { + // price feed for USDT + priceId: '0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b', + configRefreshRateInSeconds: 3600, + validTimePeriodSeconds: 86400, // 24 hrs + deviationThresholdBps: 100, // 1% + }, + // { + // // price feed for WBTC + // priceId: '0xc9d8b075a5c69303365ae23633d4e085199bf5c520a3b90fed1322a0342ffc33', + // configRefreshRateInSeconds: 3600, + // validTimePeriodSeconds: 86400, // 24 hrs + // deviationThresholdBps: 100, // 1% + // }, + // { + // // price feed for UNI + // priceId: '0x78d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba171501', + // configRefreshRateInSeconds: 3600, + // validTimePeriodSeconds: 86400, // 24 hrs + // deviationThresholdBps: 100, // 1% + // }, + // { + // // price feed for SNX + // priceId: '0x39d020f60982ed892abbcd4a06a276a9f9b7bfbce003204c110b6e488f502da3', + // configRefreshRateInSeconds: 3600, + // validTimePeriodSeconds: 86400, // 24 hrs + // deviationThresholdBps: 100, // 1% + // }, + // { + // // price feed for LINK + // priceId: '0x8ac0c70fff57e9aefdf5edf44b51d62c2d433653cbb2cf5cc06bb115af04d221', + // configRefreshRateInSeconds: 3600, + // validTimePeriodSeconds: 86400, // 24 hrs + // deviationThresholdBps: 100, // 1% + // }, + // { + // // price feed for DAI + // priceId: '0xb0948a5e5313200c632b51bb5ca32f6de0d36e9950a942d19751e833f70dabfd', + // configRefreshRateInSeconds: 3600, + // validTimePeriodSeconds: 86400, // 24 hrs + // deviationThresholdBps: 100, // 1% + // }, + // { + // // price feed for BAL + // priceId: '0x07ad7b4a7662d19a6bc675f6b467172d2f3947fa653ca97555a9b20236406628', + // configRefreshRateInSeconds: 3600, + // validTimePeriodSeconds: 86400, // 24 hrs + // deviationThresholdBps: 100, // 1% + // }, +]; diff --git a/packages/bots/pyth-updater/src/config/service.ts b/packages/bots/pyth-updater/src/config/service.ts index 30f329bdb3..f3aff26ccb 100644 --- a/packages/bots/pyth-updater/src/config/service.ts +++ b/packages/bots/pyth-updater/src/config/service.ts @@ -4,8 +4,8 @@ doetenv.config(); const config = { environment: process.env.NODE_ENV ?? 'development', logLevel: process.env.LOG_LEVEL ?? 'info', - chainId: parseInt(process.env.TARGET_CHAIN_ID ?? '59144', 10), - rpcUrl: process.env.WEB3_HTTP_PROVIDER_URL ?? 'https://linea-mainnet.infura.io/v3/', + chainId: parseInt(process.env.TARGET_CHAIN_ID ?? '34443', 10), + rpcUrl: process.env.WEB3_HTTP_PROVIDER_URL ?? 'https://mainnet.mode.network', adminPrivateKey: process.env.ETHEREUM_ADMIN_PRIVATE_KEY ?? '', adminAccount: process.env.ETHEREUM_ADMIN_ACCOUNT ?? '', discordWebhookUrl: process.env.DISCORD_WEBHOOK_URL ?? '', diff --git a/packages/bots/pyth-updater/src/index.ts b/packages/bots/pyth-updater/src/index.ts index 71a9ecf904..0a12ce2675 100644 --- a/packages/bots/pyth-updater/src/index.ts +++ b/packages/bots/pyth-updater/src/index.ts @@ -14,6 +14,7 @@ export const handler = async ( ): Promise => { logger.info(`Event: ${JSON.stringify(event)}`); logger.info(`Context: ${JSON.stringify(context)}`); + logger.info(`Started`); const provider = new JsonRpcProvider(config.rpcUrl); const signer = new Wallet(config.adminPrivateKey, provider); diff --git a/packages/bots/pyth-updater/src/run.ts b/packages/bots/pyth-updater/src/run.ts new file mode 100644 index 0000000000..f20de02d76 --- /dev/null +++ b/packages/bots/pyth-updater/src/run.ts @@ -0,0 +1,22 @@ +import { JsonRpcProvider } from '@ethersproject/providers'; +import { Wallet } from 'ethers'; + +import { chainIdToConfig } from './config'; +import config from './config/service'; +import { Updater } from './services'; +import { setUpSdk } from './utils'; + +export const run = async (): Promise => { + const provider = new JsonRpcProvider(config.rpcUrl); + const signer = new Wallet(config.adminPrivateKey, provider); + + const sdk = setUpSdk(config.chainId, signer); + const assetConfig = chainIdToConfig[config.chainId]; + const updater = await new Updater(sdk).init(assetConfig); + + sdk.logger.info(`Starting update loop bot on chain: ${config.chainId}`); + sdk.logger.info(`Config for bot: ${JSON.stringify({ ...config, adminPrivateKey: '*****' })}`); + await updater.updateFeeds(); +}; + +run(); diff --git a/packages/chains/deployments/mode.json b/packages/chains/deployments/mode.json new file mode 100644 index 0000000000..f5aa8513b1 --- /dev/null +++ b/packages/chains/deployments/mode.json @@ -0,0 +1,159 @@ +{ + "name": "mode", + "chainId": "34443", + "contracts": { + "AddressesProvider": { + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115" + }, + "AddressesProvider_Implementation": { + "address": "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73" + }, + "AddressesProvider_Proxy": { + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115" + }, + "AuthoritiesRegistry": { + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC" + }, + "AuthoritiesRegistry_Implementation": { + "address": "0x5d74800e977bFc8E14Eca28C9405BacbD091738E" + }, + "AuthoritiesRegistry_Proxy": { + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC" + }, + "CErc20Delegate": { + "address": "0xb3788b3C421348E43beEa88551acC16d2f6a6332" + }, + "CErc20PluginDelegate": { + "address": "0x726C7BC0c532aE239fb0ea8522E1F982C0AFF1D5" + }, + "CErc20PluginRewardsDelegate": { + "address": "0x798Ee06Eb08151fadf5fFD07B7931B79985884D1" + }, + "CErc20RewardsDelegate": { + "address": "0x6352b5231de62be60c7ADB8250b08CA9CCF7a9A5" + }, + "CTokenFirstExtension": { + "address": "0x8C58ECb9C0050824177f4e1Cd71C335421d4aeA2" + }, + "Comptroller": { + "address": "0x8b2B6a9dC8Cd73309Cef8d64920831d4C73F43a7" + }, + "ComptrollerFirstExtension": { + "address": "0xE1A3006be645a80F206311d9f18C866c204bA02f" + }, + "DefaultProxyAdmin": { + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0" + }, + "FeeDistributor": { + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57" + }, + "FeeDistributor_Implementation": { + "address": "0x9a0aF901CAE82f309F1047e1026F66A08C6FCEEC" + }, + "FeeDistributor_Proxy": { + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57" + }, + "FixedNativePriceOracle": { + "address": "0x1D7669b6BDfdb83066dd7C0aDa4B630b25cBc28a" + }, + "IonicFlywheelLensRouter": { + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108" + }, + "IonicLiquidator_Implementation": { + "address": "0x48bf6bd4B3d8b4E75863B5340b977E888BacE19a" + }, + "IonicUniV3Liquidator": { + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A" + }, + "IonicUniV3Liquidator_Implementation": { + "address": "0xB48221b8a1137895e384aBcaFF8120d053Be43F5" + }, + "IonicUniV3Liquidator_Proxy": { + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A" + }, + "JumpRateModel": { + "address": "0x21a455cEd9C79BC523D4E340c2B97521F4217817" + }, + "LeveredPositionFactory": { + "address": "0x9B506A03bBFf2a842866b10BC6732da72640cd45" + }, + "LeveredPositionFactoryFirstExtension": { + "address": "0x4e20eB2AF6bE30660323cB25204e071116737FEA" + }, + "LeveredPositionFactorySecondExtension": { + "address": "0x2Afb71C0fe11A2315eba9A501a48700B83C19E33" + }, + "LeveredPositionsLens": { + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1" + }, + "LeveredPositionsLens_Implementation": { + "address": "0xD9a5677594694819F69D0907C3094EAb480F3a28" + }, + "LeveredPositionsLens_Proxy": { + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1" + }, + "LiquidatorsRegistry": { + "address": "0xc71B968C6C23e2723Bae32957D815C9bE3ca1b34" + }, + "LiquidatorsRegistryExtension": { + "address": "0xdd7F712Af76074993F05C0d544331792997Bd39b" + }, + "LiquidatorsRegistrySecondExtension": { + "address": "0x45A4a3eBb986083597Ac3B34ee2d7dcC3Be8c5C1" + }, + "LooplessFlywheelBooster": { + "address": "0x1D89E5ba287E67AC0046D2218Be5fE1382cE47b4" + }, + "MasterPriceOracle": { + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117" + }, + "MasterPriceOracle_Implementation": { + "address": "0x4e7676B20B86Beea9c197bE756361680FaE3C9AE" + }, + "MasterPriceOracle_Proxy": { + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117" + }, + "OptimizedVaultsRegistry": { + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4" + }, + "OptimizedVaultsRegistry_Implementation": { + "address": "0x2DDF3DdFE856D1A4E5DBcb324194E2a622AeD83C" + }, + "OptimizedVaultsRegistry_Proxy": { + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4" + }, + "PoolDirectory": { + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a" + }, + "PoolDirectory_Implementation": { + "address": "0x20808c1A73737016bBBF8Acc6959A30446eA1D2d" + }, + "PoolDirectory_Proxy": { + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a" + }, + "PoolLens": { + "address": "0x431C87E08e2636733a945D742d25Ba77577ED480" + }, + "PoolLensSecondary": { + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154" + }, + "PythPriceOracle": { + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23" + }, + "PythPriceOracle_Implementation": { + "address": "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794" + }, + "PythPriceOracle_Proxy": { + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23" + }, + "SimplePriceOracle": { + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03" + }, + "SimplePriceOracle_Implementation": { + "address": "0xcD4D7c8e2bA627684a9B18F7fe88239341D3ba5c" + }, + "SimplePriceOracle_Proxy": { + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03" + } + } +} \ No newline at end of file diff --git a/packages/chains/src/common/docs.ts b/packages/chains/src/common/docs.ts index 3257da72f4..5a5289e85f 100644 --- a/packages/chains/src/common/docs.ts +++ b/packages/chains/src/common/docs.ts @@ -39,6 +39,10 @@ export const wrappedAssetDocs = (chainId: SupportedChains) => { [SupportedChains.zkevm]: { swapName: "Quickswap", swapAddress: "https://quickswap.exchange/#/swap?swapIndex=2¤cy1=0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9" + }, + [SupportedChains.mode]: { + swapName: "// TODO", + swapAddress: "// TODO" } }[chainId]; diff --git a/packages/chains/src/index.ts b/packages/chains/src/index.ts index 1854e5e998..da4e1dbebe 100644 --- a/packages/chains/src/index.ts +++ b/packages/chains/src/index.ts @@ -6,11 +6,12 @@ import { default as chapel } from "./chapel"; import { default as ethereum } from "./ethereum"; import { default as ganache } from "./ganache"; import { default as linea } from "./linea"; +import { default as mode } from "./mode"; import { default as neon } from "./neon"; import { default as polygon } from "./polygon"; import { default as zkevm } from "./zkevm"; -export { bsc, polygon, arbitrum, ethereum, chapel, ganache, neon, linea, zkevm }; +export { bsc, polygon, arbitrum, ethereum, chapel, ganache, neon, linea, zkevm, mode }; export const chainIdToConfig: { [chainId: number]: ChainConfig } = { [bsc.chainId]: bsc, @@ -21,5 +22,6 @@ export const chainIdToConfig: { [chainId: number]: ChainConfig } = { [neon.chainId]: neon, [linea.chainId]: linea, [ethereum.chainId]: ethereum, - [zkevm.chainId]: zkevm + [zkevm.chainId]: zkevm, + [mode.chainId]: mode }; diff --git a/packages/chains/src/mode/addresses.ts b/packages/chains/src/mode/addresses.ts new file mode 100644 index 0000000000..11631ae666 --- /dev/null +++ b/packages/chains/src/mode/addresses.ts @@ -0,0 +1,22 @@ +import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; +import { ethers } from "ethers"; + +import { assets } from "./assets"; + +const chainAddresses: ChainAddresses = { + PAIR_INIT_HASH: "", + STABLE_TOKEN: underlying(assets, assetSymbols.USDC), + UNISWAP_V2_ROUTER: ethers.constants.AddressZero, + UNISWAP_V2_FACTORY: ethers.constants.AddressZero, + UNISWAP_V3: { + FACTORY: "0xC33Ce0058004d44E7e1F366E5797A578fDF38584", + PAIR_INIT_HASH: "0x3e03ddab0aa29c12c46cd283f9cf8c6800eb7ea3c6530a382474bac82333f2e0", + QUOTER_V2: "0x7Fd569b2021850fbA53887dd07736010aCBFc787" // + }, + UNISWAP_V3_ROUTER: "0xC9Adff795f46105E53be9bbf14221b1C9919EE25", + W_BTC_TOKEN: underlying(assets, assetSymbols.WBTC), + W_TOKEN: underlying(assets, assetSymbols.WETH), + W_TOKEN_USD_CHAINLINK_PRICE_FEED: ethers.constants.AddressZero +}; + +export default chainAddresses; diff --git a/packages/chains/src/mode/assets.ts b/packages/chains/src/mode/assets.ts new file mode 100644 index 0000000000..3b579581a0 --- /dev/null +++ b/packages/chains/src/mode/assets.ts @@ -0,0 +1,99 @@ +import { assetSymbols, OracleTypes, SupportedAsset, SupportedChains } from "@ionicprotocol/types"; + +import { defaultDocs, wrappedAssetDocs } from "../common"; + +export const WETH = "0x4200000000000000000000000000000000000006"; +export const USDC = "0xd988097fb8612cc24eeC14542bC03424c656005f"; +export const USDT = "0xf0F161fDA2712DB8b566946122a5af183995e2eD"; +export const WBTC = "0xcDd475325D6F564d27247D1DddBb0DAc6fA0a5CF"; +export const UNI = "0x3e7eF8f50246f725885102E8238CBba33F276747"; +export const SNX = "0x9e5AAC1Ba1a2e6aEd6b32689DFcF62A509Ca96f3"; +export const LINK = "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb"; +export const DAI = "0xE7798f023fC62146e8Aa1b36Da45fb70855a77Ea"; +export const BAL = "0xD08a2917653d4E460893203471f0000826fb4034"; +export const AAVE = "0x7c6b91D9Be155A6Db01f749217d76fF02A7227F2"; + +export const assets: SupportedAsset[] = [ + { + symbol: assetSymbols.WETH, + underlying: WETH, + name: "Wrapped Ether", + decimals: 18, + oracle: OracleTypes.FixedNativePriceOracle, + extraDocs: wrappedAssetDocs(SupportedChains.mode) + }, + { + symbol: assetSymbols.USDC, + underlying: USDC, + name: "USD Coin", + decimals: 6, + oracle: OracleTypes.PythPriceOracle, + extraDocs: defaultDocs("https://explorer.mode.network", USDC) + }, + { + symbol: assetSymbols.USDT, + underlying: USDT, + name: "Tether USD", + decimals: 6, + oracle: OracleTypes.PythPriceOracle, + extraDocs: defaultDocs("https://explorer.mode.network", USDT) + }, + { + symbol: assetSymbols.WBTC, + underlying: WBTC, + name: "Wrapped Bitcoin", + decimals: 8, // TODO verify + oracle: OracleTypes.PythPriceOracle, + extraDocs: defaultDocs("https://explorer.mode.network", WBTC) + }, + { + symbol: assetSymbols.UNI, + underlying: UNI, + name: "Uniswap Token", + decimals: 18, // TODO verify + oracle: OracleTypes.PythPriceOracle, + extraDocs: defaultDocs("https://explorer.mode.network", UNI) + }, + { + symbol: assetSymbols.SNX, + underlying: SNX, + name: "Synthetix Network Token", + decimals: 18, // TODO verify + oracle: OracleTypes.PythPriceOracle, + extraDocs: defaultDocs("https://explorer.mode.network", SNX) + }, + { + symbol: assetSymbols.LINK, + underlying: LINK, + name: "Chainlink Token", + decimals: 18, // TODO verify + oracle: OracleTypes.PythPriceOracle, + extraDocs: defaultDocs("https://explorer.mode.network", LINK) + }, + { + symbol: assetSymbols.DAI, + underlying: DAI, + name: "DAI Token", + decimals: 18, // TODO verify + oracle: OracleTypes.PythPriceOracle, + extraDocs: defaultDocs("https://explorer.mode.network", DAI) + }, + { + symbol: assetSymbols.BAL, + underlying: BAL, + name: "Balancer Token", + decimals: 18, // TODO verify + oracle: OracleTypes.PythPriceOracle, + extraDocs: defaultDocs("https://explorer.mode.network", BAL) + }, + { + symbol: assetSymbols.AAVE, + underlying: AAVE, + name: "AAVE Token", + decimals: 18, // TODO verify + oracle: OracleTypes.PythPriceOracle, + extraDocs: defaultDocs("https://explorer.mode.network", AAVE) + } +]; + +export default assets; diff --git a/packages/chains/src/mode/fundingStrategies.ts b/packages/chains/src/mode/fundingStrategies.ts new file mode 100644 index 0000000000..54c4ffeb9b --- /dev/null +++ b/packages/chains/src/mode/fundingStrategies.ts @@ -0,0 +1,5 @@ +import { FundingStrategy } from "@ionicprotocol/types"; + +const fundingStrategies: FundingStrategy[] = []; + +export default fundingStrategies; diff --git a/packages/chains/src/mode/index.ts b/packages/chains/src/mode/index.ts new file mode 100644 index 0000000000..cc278425b0 --- /dev/null +++ b/packages/chains/src/mode/index.ts @@ -0,0 +1,31 @@ +import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; + +import deployments from "../../deployments/mode.json"; + +import chainAddresses from "./addresses"; +import { assets } from "./assets"; +import fundingStrategies from "./fundingStrategies"; +import irms from "./irms"; +import leveragePairs from "./leveragePairs"; +import liquidationDefaults from "./liquidation"; +import oracles from "./oracles"; +import specificParams from "./params"; +import deployedPlugins from "./plugins"; +import redemptionStrategies from "./redemptionStrategies"; + +const chainConfig: ChainConfig = { + chainId: SupportedChains.mode, + chainAddresses, + assets, + irms, + liquidationDefaults, + oracles, + specificParams, + deployedPlugins, + redemptionStrategies, + fundingStrategies, + chainDeployments: deployments.contracts, + leveragePairs +}; + +export default chainConfig; diff --git a/packages/chains/src/mode/irms.ts b/packages/chains/src/mode/irms.ts new file mode 100644 index 0000000000..8e6a3ac707 --- /dev/null +++ b/packages/chains/src/mode/irms.ts @@ -0,0 +1,7 @@ +import { IrmTypes } from "@ionicprotocol/types"; + +const baseIrms = [IrmTypes.JumpRateModel]; + +const irms: IrmTypes[] = [...baseIrms]; + +export default irms; diff --git a/packages/chains/src/mode/leveragePairs.ts b/packages/chains/src/mode/leveragePairs.ts new file mode 100644 index 0000000000..aec608582f --- /dev/null +++ b/packages/chains/src/mode/leveragePairs.ts @@ -0,0 +1,5 @@ +import { LeveragePoolConfig } from "@ionicprotocol/types"; + +const leveragePairs: LeveragePoolConfig[] = []; + +export default leveragePairs; diff --git a/packages/chains/src/mode/liquidation.ts b/packages/chains/src/mode/liquidation.ts new file mode 100644 index 0000000000..6d2289f058 --- /dev/null +++ b/packages/chains/src/mode/liquidation.ts @@ -0,0 +1,19 @@ +import { LiquidationDefaults, LiquidationStrategy } from "@ionicprotocol/types"; +import { BigNumber, constants } from "ethers"; + +import chainAddresses from "./addresses"; +import { USDC, WETH } from "./assets"; + +const liquidationDefaults: LiquidationDefaults = { + DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, + ASSET_SPECIFIC_ROUTER: {}, + SUPPORTED_OUTPUT_CURRENCIES: [constants.AddressZero, WETH, USDC], + SUPPORTED_INPUT_CURRENCIES: [constants.AddressZero, WETH], + LIQUIDATION_STRATEGY: LiquidationStrategy.UNISWAP, + MINIMUM_PROFIT_NATIVE: BigNumber.from(0), + LIQUIDATION_INTERVAL_SECONDS: 20, + jarvisPools: [], + balancerPools: [] +}; + +export default liquidationDefaults; diff --git a/packages/chains/src/mode/oracles.ts b/packages/chains/src/mode/oracles.ts new file mode 100644 index 0000000000..a898ed803a --- /dev/null +++ b/packages/chains/src/mode/oracles.ts @@ -0,0 +1,7 @@ +import { OracleTypes } from "@ionicprotocol/types"; + +const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; + +const oracles: OracleTypes[] = [...baseOracles, OracleTypes.PythPriceOracle]; + +export default oracles; diff --git a/packages/chains/src/mode/params.ts b/packages/chains/src/mode/params.ts new file mode 100644 index 0000000000..9e11abcf89 --- /dev/null +++ b/packages/chains/src/mode/params.ts @@ -0,0 +1,36 @@ +import { assetSymbols, ChainParams } from "@ionicprotocol/types"; +import { BigNumber } from "ethers"; + +import chainAddresses from "./addresses"; + +const specificParams: ChainParams = { + blocksPerYear: BigNumber.from((30 * 60 * 24 * 365).toString()), // 30 blocks per minute = 2 sec block time + cgId: "ethereum", + metadata: { + chainIdHex: "0x868B", + name: "Mode Mainnet", + shortName: "Mode", + uniswapV3Fees: {}, + img: "https://1430441113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmOUA87dDndFyiETJjxpf%2Ficon%2FzSRXk7tkG8rWFi6tG9wV%2FIYXD4bdy_400x400.jpg?alt=media", + blockExplorerUrls: { default: { name: "modeexplorer", url: "https://explorer.mode.network" } }, + rpcUrls: { + default: { http: ["https://mainnet.mode.network/"] }, + public: { http: ["https://mainnet.mode.network/"] } + }, + nativeCurrency: { + symbol: "ETH", + name: "ETH" + }, + wrappedNativeCurrency: { + symbol: assetSymbols.WETH, + address: chainAddresses.W_TOKEN, + name: "WETH", + decimals: 18, + color: "#7A88A1", + overlayTextColor: "#fff", + logoURL: "https://d1912tcoux65lj.cloudfront.net/network/ethereum.png" + } + } +}; + +export default specificParams; diff --git a/packages/chains/src/mode/plugins.ts b/packages/chains/src/mode/plugins.ts new file mode 100644 index 0000000000..075787ef75 --- /dev/null +++ b/packages/chains/src/mode/plugins.ts @@ -0,0 +1,5 @@ +import { DeployedPlugins } from "@ionicprotocol/types"; + +const deployedPlugins: DeployedPlugins = {}; + +export default deployedPlugins; diff --git a/packages/chains/src/mode/redemptionStrategies.ts b/packages/chains/src/mode/redemptionStrategies.ts new file mode 100644 index 0000000000..fce11c3cf7 --- /dev/null +++ b/packages/chains/src/mode/redemptionStrategies.ts @@ -0,0 +1,5 @@ +import { assetSymbols, RedemptionStrategy, RedemptionStrategyContract, underlying } from "@ionicprotocol/types"; + +const redemptionStrategies: RedemptionStrategy[] = []; + +export default redemptionStrategies; diff --git a/packages/sdk/chainDeploy/helpers/liquidators/ionicLiquidator.ts b/packages/sdk/chainDeploy/helpers/liquidators/ionicLiquidator.ts index 42ad2d8c24..35a7411878 100644 --- a/packages/sdk/chainDeploy/helpers/liquidators/ionicLiquidator.ts +++ b/packages/sdk/chainDeploy/helpers/liquidators/ionicLiquidator.ts @@ -2,7 +2,9 @@ import { chainIdToConfig } from "@ionicprotocol/chains"; import { constants } from "ethers"; import { AddressesProvider } from "../../../typechain/AddressesProvider"; +import { ILiquidator } from "../../../typechain/ILiquidator"; import { IonicLiquidator } from "../../../typechain/IonicLiquidator"; +import { IonicUniV3Liquidator } from "../../../typechain/IonicUniV3Liquidator"; import { AddressesProviderConfigFnParams, BalancerSwapTokenLiquidatorData, @@ -15,7 +17,7 @@ export const deployIonicLiquidator = async ({ getNamedAccounts, deployments, deployConfig -}: LiquidatorDeployFnParams): Promise => { +}: LiquidatorDeployFnParams): Promise => { const { deployer } = await getNamedAccounts(); const fsl = await deployments.deploy("IonicLiquidator", { from: deployer, @@ -24,11 +26,7 @@ export const deployIonicLiquidator = async ({ execute: { init: { methodName: "initialize", - args: [deployConfig.wtoken, deployConfig.uniswap.uniswapV2RouterAddress, deployConfig.uniswap.flashSwapFee] - }, - onUpgrade: { - methodName: "_becomeImplementation", - args: [new ethers.utils.AbiCoder().encode(["uint8"], [deployConfig.uniswap.flashSwapFee])] + args: [deployConfig.wtoken, deployConfig.uniswap, deployConfig.uniswap.flashSwapFee] } }, proxyContract: "OpenZeppelinTransparentProxy", @@ -41,9 +39,43 @@ export const deployIonicLiquidator = async ({ const fuseSafeLiquidator = (await ethers.getContract("IonicLiquidator", deployer)) as IonicLiquidator; const fslOwner = await fuseSafeLiquidator.callStatic.owner(); console.log(`IonicLiquidator owner is ${fslOwner}`); + + return "IonicLiquidator"; +}; + +export const deployIonicUniV3Liquidator = async ({ + ethers, + getNamedAccounts, + deployments, + deployConfig +}: LiquidatorDeployFnParams): Promise => { + const { deployer } = await getNamedAccounts(); + const uniV3Liquidator = await deployments.deploy("IonicUniV3Liquidator", { + from: deployer, + log: true, + proxy: { + execute: { + init: { + methodName: "initialize", + args: [deployConfig.wtoken, deployConfig.uniswap.uniswapV3Quoter] + } + }, + proxyContract: "OpenZeppelinTransparentProxy", + owner: deployer + } + }); + if (uniV3Liquidator.transactionHash) await ethers.provider.waitForTransaction(uniV3Liquidator.transactionHash); + console.log("IonicUniV3Liquidator: ", uniV3Liquidator.address); + + const fuseSafeLiquidator = (await ethers.getContract("IonicUniV3Liquidator", deployer)) as IonicUniV3Liquidator; + const uniV3LiquidatorOwner = await fuseSafeLiquidator.callStatic.owner(); + console.log(`IonicUniV3Liquidator owner is ${uniV3LiquidatorOwner}`); + + return "IonicUniV3Liquidator"; }; export const configureIonicLiquidator = async ({ + contractName, ethers, getNamedAccounts, chainId @@ -52,7 +84,7 @@ export const configureIonicLiquidator = async ({ const strategies: string[] = []; const arrayOfTrue: boolean[] = []; - const fuseSafeLiquidator = (await ethers.getContract("IonicLiquidator", deployer)) as IonicLiquidator; + const fuseSafeLiquidator = (await ethers.getContract(contractName, deployer)) as ILiquidator; for (const redemptionStrategyConfig of chainIdToConfig[chainId].redemptionStrategies) { const { strategy } = redemptionStrategyConfig; @@ -149,6 +181,9 @@ export const configureAddressesProviderAddresses = async ({ const fsl = await ethers.getContractOrNull("IonicLiquidator"); await configureAddress(ap, "IonicLiquidator", fsl?.address); + const uniV3Liquidator = await ethers.getContractOrNull("IonicUniV3Liquidator"); + await configureAddress(ap, "IonicUniV3Liquidator", uniV3Liquidator?.address); + const dpa = await ethers.getContractOrNull("DefaultProxyAdmin"); await configureAddress(ap, "DefaultProxyAdmin", dpa?.address); diff --git a/packages/sdk/chainDeploy/helpers/types.ts b/packages/sdk/chainDeploy/helpers/types.ts index cc3de0a1fa..6cb27268d6 100644 --- a/packages/sdk/chainDeploy/helpers/types.ts +++ b/packages/sdk/chainDeploy/helpers/types.ts @@ -44,6 +44,8 @@ export type ChainDeployConfig = { uniswapData: { lpName: string; lpSymbol: string; lpDisplayName: string }[]; uniswapOracleLpTokens?: Array; flashSwapFee: number; + uniswapV3SwapRouter?: string; + uniswapV3Quoter?: string; }; wtoken: string; nativeTokenUsdChainlinkFeed?: string; @@ -153,6 +155,7 @@ export type LiquidatorDeployFnParams = ChainDeployFnParams & { }; export type LiquidatorConfigFnParams = { + contractName: string; ethers: HardhatRuntimeEnvironment["ethers"]; getNamedAccounts: HardhatRuntimeEnvironment["getNamedAccounts"]; chainId: number; diff --git a/packages/sdk/chainDeploy/index.ts b/packages/sdk/chainDeploy/index.ts index 09d3763f87..407f12649e 100644 --- a/packages/sdk/chainDeploy/index.ts +++ b/packages/sdk/chainDeploy/index.ts @@ -4,6 +4,7 @@ import { deploy as deploy42161, deployConfig as deployConfig42161 } from "./main import { deploy as deploy56, deployConfig as deployConfig56 } from "./mainnets/bsc"; import { deploy as deploy1, deployConfig as deployConfig1 } from "./mainnets/ethereum"; import { deploy as deploy59144, deployConfig as deployConfig59144 } from "./mainnets/linea"; +import { deploy as deploy34443, deployConfig as deployConfig34443 } from "./mainnets/mode"; import { deploy as deploy245022934, deployConfig as deployConfig245022934 } from "./mainnets/neon"; import { deploy as deploy137, deployConfig as deployConfig137 } from "./mainnets/polygon"; import { deploy as deploy1101, deployConfig as deployConfig1101 } from "./mainnets/zkevm"; @@ -15,6 +16,7 @@ export const chainDeployConfig: Record => { + await deployPythPriceOracle({ + run, + deployConfig, + ethers, + getNamedAccounts, + deployments, + usdToken: mode.chainAddresses.STABLE_TOKEN, + pythAddress: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", + pythAssets, + nativeTokenUsdFeed: "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace" + }); +}; diff --git a/packages/sdk/deploy/deploy.ts b/packages/sdk/deploy/deploy.ts index f7f09b5251..6439be0b55 100644 --- a/packages/sdk/deploy/deploy.ts +++ b/packages/sdk/deploy/deploy.ts @@ -7,7 +7,8 @@ import { getCgPrice } from "../chainDeploy/helpers/getCgPrice"; import { configureAddressesProviderAddresses, configureIonicLiquidator, - deployIonicLiquidator + deployIonicLiquidator, + deployIonicUniV3Liquidator } from "../chainDeploy/helpers/liquidators/ionicLiquidator"; import { configureLiquidatorsRegistry } from "../chainDeploy/helpers/liquidators/registry"; import { AddressesProvider } from "../typechain/AddressesProvider"; @@ -20,7 +21,12 @@ const func: DeployFunction = async ({ run, ethers, getNamedAccounts, deployments console.log("RPC URL: ", ethers.provider.connection.url); const chainId = parseInt(await getChainId()); console.log("chainId: ", chainId); - const MIN_BORROW_USD = chainId === 97 || chainId == 245022934 ? 0.1 : 100; + + let MIN_BORROW_USD; + if (chainId === 97 || chainId == 245022934) MIN_BORROW_USD = 0.1; + else if (chainId == 34443) MIN_BORROW_USD = 4; + else MIN_BORROW_USD = 100; + const { deployer } = await getNamedAccounts(); console.log("deployer: ", deployer); const balance = await ethers.provider.getBalance(deployer); @@ -189,7 +195,9 @@ const func: DeployFunction = async ({ run, ethers, getNamedAccounts, deployments await tx.wait(); console.log(`Set the latest Comptroller implementation for ${oldComptroller.address} to ${comptroller.address}`); } else { - console.log(`No change in the latest Comptroller implementation ${comptroller.address}`); + console.log( + `No change in the latest Comptroller implementation ${latestComptrollerImplementation} for ${comptroller.address}` + ); } } else { // on the first deploy to a chain @@ -476,13 +484,26 @@ const func: DeployFunction = async ({ run, ethers, getNamedAccounts, deployments //// //// Liquidator - await deployIonicLiquidator({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig: chainDeployParams - }); + let liquidatorContractName; + + if (chainId !== 34443) { + liquidatorContractName = await deployIonicLiquidator({ + run, + ethers, + getNamedAccounts, + deployments, + deployConfig: chainDeployParams + }); + } else { + liquidatorContractName = await deployIonicUniV3Liquidator({ + run, + ethers, + getNamedAccounts, + deployments, + deployConfig: chainDeployParams + }); + } + /// //// @@ -492,9 +513,9 @@ const func: DeployFunction = async ({ run, ethers, getNamedAccounts, deployments await deployFunc({ run, ethers, getNamedAccounts, deployments }); } //// - //// Configure Liquidator await configureIonicLiquidator({ + contractName: liquidatorContractName, ethers, getNamedAccounts, chainId diff --git a/packages/sdk/deployments/mode/.chainId b/packages/sdk/deployments/mode/.chainId new file mode 100644 index 0000000000..5c0370e441 --- /dev/null +++ b/packages/sdk/deployments/mode/.chainId @@ -0,0 +1 @@ +34443 \ No newline at end of file diff --git a/packages/sdk/deployments/mode/AddressesProvider.json b/packages/sdk/deployments/mode/AddressesProvider.json new file mode 100644 index 0000000000..9dc3a93128 --- /dev/null +++ b/packages/sdk/deployments/mode/AddressesProvider.json @@ -0,0 +1,978 @@ +{ + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balancerPoolForTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "curveSwapPoolsConfig", + "outputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "flywheelRewards", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "fundingStrategiesConfig", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "id", + "type": "string" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "name": "getBalancerPoolForTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurveSwapPools", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "coins", + "type": "address[]" + } + ], + "internalType": "struct AddressesProvider.CurveSwapPool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "getFundingStrategy", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ], + "internalType": "struct AddressesProvider.FundingStrategy", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getJarvisPools", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ], + "internalType": "struct AddressesProvider.JarvisPool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "getRedemptionStrategy", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "internalType": "struct AddressesProvider.RedemptionStrategy", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "jarvisPoolsConfig", + "outputs": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "plugins", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "redemptionStrategiesConfig", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "id", + "type": "string" + }, + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "setAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "setBalancerPoolForTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "coins", + "type": "address[]" + } + ], + "name": "setCurveSwapPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "flywheelRewardsModule", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "name": "setFlywheelRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "strategy", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ], + "name": "setFundingStrategy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ], + "name": "setJarvisPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "plugin", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "name": "setPlugin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "strategy", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "name": "setRedemptionStrategy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "transactionIndex": 1, + "gasUsed": "772424", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000004000020200000000000000000800000000800000000000000000000000400000000000000000000000000200000002000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000080000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000040000000000", + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61", + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000008d5b096c99b26d07c7f8d8a8f25be97427687f73" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + }, + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + }, + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + }, + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + }, + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + } + ], + "blockNumber": 2097505, + "cumulativeGasUsed": "819337", + "status": 1, + "byzantium": true + }, + "args": [ + "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xc4d66de80000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x1155b614971f16758C92c4890eD338C9e3ede6b7" + ] + }, + "implementation": "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/AddressesProvider_Implementation.json b/packages/sdk/deployments/mode/AddressesProvider_Implementation.json new file mode 100644 index 0000000000..3073b4d84f --- /dev/null +++ b/packages/sdk/deployments/mode/AddressesProvider_Implementation.json @@ -0,0 +1,1628 @@ +{ + "address": "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balancerPoolForTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "curveSwapPoolsConfig", + "outputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "flywheelRewards", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "fundingStrategiesConfig", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "id", + "type": "string" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "name": "getBalancerPoolForTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurveSwapPools", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "coins", + "type": "address[]" + } + ], + "internalType": "struct AddressesProvider.CurveSwapPool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "getFundingStrategy", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ], + "internalType": "struct AddressesProvider.FundingStrategy", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getJarvisPools", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ], + "internalType": "struct AddressesProvider.JarvisPool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "getRedemptionStrategy", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "internalType": "struct AddressesProvider.RedemptionStrategy", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "jarvisPoolsConfig", + "outputs": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "plugins", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "redemptionStrategiesConfig", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "id", + "type": "string" + }, + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "setAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "setBalancerPoolForTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "coins", + "type": "address[]" + } + ], + "name": "setCurveSwapPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "flywheelRewardsModule", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "name": "setFlywheelRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "strategy", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ], + "name": "setFundingStrategy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ], + "name": "setJarvisPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "plugin", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "name": "setPlugin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "strategy", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "name": "setRedemptionStrategy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xa67a373c4cea41d8261dee7cddf854ee1e643db4f7029a48934ef1aa355a967e", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "transactionIndex": 1, + "gasUsed": "1523717", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7a79cd3151eb777d11dc2d753932dbf3f9ece89467ef9508a90f9631a2239e84", + "transactionHash": "0xa67a373c4cea41d8261dee7cddf854ee1e643db4f7029a48934ef1aa355a967e", + "logs": [], + "blockNumber": 2097502, + "cumulativeGasUsed": "1587730", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balancerPoolForTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "curveSwapPoolsConfig", + "outputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "flywheelRewards", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "fundingStrategiesConfig", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "id", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBalancerPoolForTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCurveSwapPools", + "outputs": [ + { + "internalType": "struct AddressesProvider.CurveSwapPool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "coins", + "type": "address[]" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getFundingStrategy", + "outputs": [ + { + "internalType": "struct AddressesProvider.FundingStrategy", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getJarvisPools", + "outputs": [ + { + "internalType": "struct AddressesProvider.JarvisPool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRedemptionStrategy", + "outputs": [ + { + "internalType": "struct AddressesProvider.RedemptionStrategy", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "jarvisPoolsConfig", + "outputs": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "plugins", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesConfig", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "id", + "type": "string" + }, + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setAddress" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setBalancerPoolForTokens" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "coins", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setCurveSwapPool" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "flywheelRewardsModule", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setFlywheelRewards" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "strategy", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setFundingStrategy" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setJarvisPool" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "plugin", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setPlugin" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "strategy", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setRedemptionStrategy" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "getAddress(string)": { + "details": "Returns an address by id", + "returns": { + "_0": "The address" + } + }, + "initialize(address)": { + "details": "Initializer to set the admin that can set and change contracts addresses" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setAddress(string,address)": { + "details": "Sets an address for an id replacing the address saved in the addresses map", + "params": { + "id": "The id", + "newAddress": "The address to set" + } + }, + "setFlywheelRewards(address,address,string)": { + "details": "sets the address and contract interface ID of the flywheel for the reward token", + "params": { + "contractInterface": "a string that uniquely identifies the contract's interface", + "flywheelRewardsModule": "the flywheel rewards module address", + "rewardToken": "the reward token address" + } + }, + "setFundingStrategy(address,address,string,address)": { + "details": "sets the address and contract interface ID of the funding strategy for the asset", + "params": { + "asset": "the asset address", + "contractInterface": "a string that uniquely identifies the contract's interface", + "strategy": "funding strategy address" + } + }, + "setJarvisPool(address,address,address,uint256)": { + "details": "configures the Jarvis pool of a Jarvis synthetic token", + "params": { + "collateralToken": "the collateral token address", + "expirationTime": "the operation expiration time", + "liquidityPool": "the liquidity pool address", + "syntheticToken": "the synthetic token address" + } + }, + "setPlugin(address,address,string)": { + "details": "sets the address and contract interface ID of the ERC4626 plugin for the asset", + "params": { + "asset": "the asset address", + "contractInterface": "a string that uniquely identifies the contract's interface", + "plugin": "the ERC4626 plugin address" + } + }, + "setRedemptionStrategy(address,address,string,address)": { + "details": "sets the address and contract interface ID of the redemption strategy for the asset", + "params": { + "asset": "the asset address", + "contractInterface": "a string that uniquely identifies the contract's interface", + "strategy": "redemption strategy address" + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/AddressesProvider.sol": "AddressesProvider" + }, + "libraries": {} + }, + "sources": { + "contracts/ionic/AddressesProvider.sol": { + "keccak256": "0xf48e9e8b2150408c1c6b68dd957226c342ba47396da792fdaa0922f539a7e163", + "urls": [ + "bzz-raw://43c0a6c40861da4c19b67da9faee7df21572020e2d863611080a9181acc3ba3a", + "dweb:/ipfs/QmQpPDVAYTba8R9N1fGggzkG7JhUFVbAhxdfNw9xofVi4m" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50611a98806100206000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063959fc097116100f9578063bf40fac111610097578063cf78b30a11610071578063cf78b30a1461044c578063e30c39781461045f578063f2fde38b14610472578063fc4d33f91461048557600080fd5b8063bf40fac114610413578063c4d66de814610426578063ceb4e9431461043957600080fd5b8063a11b73a6116100d3578063a11b73a6146103ba578063a13449d6146103cd578063b40dc803146103ed578063b91975541461040057600080fd5b8063959fc0971461033b578063984d8655146103735780639b2ea4bd146103a757600080fd5b806362772c731161016657806377d792191161014057806377d79219146102a65780637930b9b0146102bb57806381bc3632146103035780638da5cb5b1461031657600080fd5b806362772c73146102785780636e96dfd71461028b578063715018a61461029e57600080fd5b8063316eb395116101a2578063316eb3951461020f5780634172e7f91461023157806344fca697146102525780634b12e6431461026557600080fd5b8063073d0b6c146101c95780631783a521146101de5780632cf3219c146101f1575b600080fd5b6101dc6101d73660046114ec565b61048d565b005b6101dc6101ec3660046114ec565b610567565b6101f9610610565b6040516102069190611562565b60405180910390f35b61022261021d366004611611565b6106dc565b60405161020693929190611680565b61024461023f366004611611565b61079a565b6040516102069291906116b5565b6101dc6102603660046116e1565b610849565b610244610273366004611611565b61095e565b6101dc61028636600461172c565b61098a565b6101dc610299366004611611565b610a3c565b6101dc610aa6565b6102ae610aee565b60405161020691906117b2565b6102ce6102c9366004611824565b610b76565b60405161020694939291906001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6101dc61031136600461183d565b610bc0565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610206565b61032361034936600461189e565b6001600160a01b039182166000908152606d60209081526040808320938516835292905220541690565b61032361038136600461189e565b606d6020908152600092835260408084209091529082529020546001600160a01b031681565b6101dc6103b53660046118d1565b610c6c565b6101dc6103c836600461183d565b610cbb565b6103e06103db366004611611565b610d5e565b6040516102069190611966565b6102226103fb366004611611565b610e74565b6101dc61040e366004611979565b610ea0565b6103236104213660046119b3565b610ee5565b6101dc610434366004611611565b610f1a565b610323610447366004611824565b611029565b6103e061045a366004611611565b611058565b606554610323906001600160a01b031681565b6101dc610480366004611611565b6110d1565b6101dc611142565b610495611256565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038481166020938401528881168252606a83526040909120835181546001600160a01b0319169216919091178155828201518051919261053692600185019290910190611399565b5060409190910151600290910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b61056f611256565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038481166020938401528881168252606983526040909120835181546001600160a01b0319169216919091178155828201518051919261053692600185019290910190611399565b6060606c805480602002602001604051908101604052809291908181526020016000905b828210156106d35760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156106bb57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161069d575b50505050508152505081526020019060010190610634565b50505050905090565b606a60205260009081526040902080546001820180546001600160a01b039092169291610708906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610734906119f5565b80156107815780601f1061075657610100808354040283529160200191610781565b820191906000526020600020905b81548152906001019060200180831161076457829003601f168201915b505050600290930154919250506001600160a01b031683565b606860205260009081526040902080546001820180546001600160a01b0390921692916107c6906119f5565b80601f01602080910402602001604051908101604052809291908181526020018280546107f2906119f5565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050905082565b610851611256565b604080516080810182526001600160a01b0395861681529385166020850190815292851690840190815260608401918252606b8054600181018255600091909152935160049094027fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4810180549587166001600160a01b031996871617905592517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b584018054918716918616919091179055517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b68301805491909516931692909217909255517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b790910155565b606760205260009081526040902080546001820180546001600160a01b0390921692916107c6906119f5565b610992611256565b606c6040518060400160405280856001600160a01b031681526020018484808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939094525050835460018082018655948252602091829020845160029092020180546001600160a01b0319166001600160a01b0390921691909117815583820151805194959194610a34945091850192019061141d565b505050505050565b610a44611256565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b610aae611256565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b6060606b805480602002602001604051908101604052809291908181526020016000905b828210156106d3576000848152602090819020604080516080810182526004860290920180546001600160a01b0390811684526001808301548216858701526002830154909116928401929092526003015460608301529083529092019101610b12565b606b8181548110610b8657600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039283169450908216929091169084565b610bc8611256565b6040518060400160405280846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038781168252606760209081526040909220845181546001600160a01b0319169216919091178155838201518051919350610c63926001850192910190611399565b50505050505050565b610c74611256565b8060668484604051610c87929190611a30565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b610cc3611256565b6040518060400160405280846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038781168252606860209081526040909220845181546001600160a01b0319169216919091178155838201518051919350610c63926001850192910190611399565b610d94604051806060016040528060006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6001600160a01b038083166000908152606a60209081526040918290208251606081019093528054909316825260018301805492939291840191610dd7906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e03906119f5565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b5050509183525050600291909101546001600160a01b031660209091015292915050565b606960205260009081526040902080546001820180546001600160a01b039092169291610708906119f5565b610ea8611256565b6001600160a01b039283166000908152606d6020908152604080832094861683529390529190912080546001600160a01b03191691909216179055565b600060668383604051610ef9929190611a30565b908152604051908190036020019020546001600160a01b0316905092915050565b600054610100900460ff1615808015610f3a5750600054600160ff909116105b80610f545750303b158015610f54575060005460ff166001145b610fb75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ae5565b6000805460ff191660011790558015610fda576000805461ff0019166101001790555b610fe3826112b2565b8015611025576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610a9a565b5050565b606c818154811061103957600080fd5b60009182526020909120600290910201546001600160a01b0316905081565b61108e604051806060016040528060006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6001600160a01b038083166000908152606960209081526040918290208251606081019093528054909316825260018301805492939291840191610dd7906119f5565b6110d9611256565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146111945760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401610ae5565b60006111a86033546001600160a01b031690565b6065549091506001600160a01b03166111c0816112ed565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610a9a565b6033546001600160a01b031633146112b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ae5565b565b600054610100900460ff166112d95760405162461bcd60e51b8152600401610ae590611a40565b6112e161133f565b6112ea816112ed565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113665760405162461bcd60e51b8152600401610ae590611a40565b6112b0600054610100900460ff166113905760405162461bcd60e51b8152600401610ae590611a40565b6112b0336112ed565b8280546113a5906119f5565b90600052602060002090601f0160209004810192826113c7576000855561140d565b82601f106113e057805160ff191683800117855561140d565b8280016001018555821561140d579182015b8281111561140d5782518255916020019190600101906113f2565b50611419929150611472565b5090565b82805482825590600052602060002090810192821561140d579160200282015b8281111561140d57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061143d565b5b808211156114195760008155600101611473565b80356001600160a01b038116811461149e57600080fd5b919050565b60008083601f8401126114b557600080fd5b50813567ffffffffffffffff8111156114cd57600080fd5b6020830191508360208285010111156114e557600080fd5b9250929050565b60008060008060006080868803121561150457600080fd5b61150d86611487565b945061151b60208701611487565b9350604086013567ffffffffffffffff81111561153757600080fd5b611543888289016114a3565b9094509250611556905060608701611487565b90509295509295909350565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561160257898403603f19018652825180516001600160a01b039081168652908901518986018990528051898701819052908a0191849160608801905b808410156115ec57845183168252938c019360019390930192908c01906115ca565b50988b019896505050928801925060010161158a565b50919998505050505050505050565b60006020828403121561162357600080fd5b61162c82611487565b9392505050565b6000815180845260005b818110156116595760208185018101518683018201520161163d565b8181111561166b576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038086168352606060208401526116a26060840186611633565b9150808416604084015250949350505050565b6001600160a01b03831681526040602082018190526000906116d990830184611633565b949350505050565b600080600080608085870312156116f757600080fd5b61170085611487565b935061170e60208601611487565b925061171c60408601611487565b9396929550929360600135925050565b60008060006040848603121561174157600080fd5b61174a84611487565b9250602084013567ffffffffffffffff8082111561176757600080fd5b818601915086601f83011261177b57600080fd5b81358181111561178a57600080fd5b8760208260051b850101111561179f57600080fd5b6020830194508093505050509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561181757815180516001600160a01b0390811686528782015181168887015286820151168686015260609081015190850152608090930192908501906001016117cf565b5091979650505050505050565b60006020828403121561183657600080fd5b5035919050565b6000806000806060858703121561185357600080fd5b61185c85611487565b935061186a60208601611487565b9250604085013567ffffffffffffffff81111561188657600080fd5b611892878288016114a3565b95989497509550505050565b600080604083850312156118b157600080fd5b6118ba83611487565b91506118c860208401611487565b90509250929050565b6000806000604084860312156118e657600080fd5b833567ffffffffffffffff8111156118fd57600080fd5b611909868287016114a3565b909450925061191c905060208501611487565b90509250925092565b600060018060a01b0380835116845260208301516060602086015261194d6060860182611633565b9050816040850151166040860152809250505092915050565b60208152600061162c6020830184611925565b60008060006060848603121561198e57600080fd5b61199784611487565b92506119a560208501611487565b915061191c60408501611487565b600080602083850312156119c657600080fd5b823567ffffffffffffffff8111156119dd57600080fd5b6119e9858286016114a3565b90969095509350505050565b600181811c90821680611a0957607f821691505b60208210811415611a2a57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "404:5467:127:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063959fc097116100f9578063bf40fac111610097578063cf78b30a11610071578063cf78b30a1461044c578063e30c39781461045f578063f2fde38b14610472578063fc4d33f91461048557600080fd5b8063bf40fac114610413578063c4d66de814610426578063ceb4e9431461043957600080fd5b8063a11b73a6116100d3578063a11b73a6146103ba578063a13449d6146103cd578063b40dc803146103ed578063b91975541461040057600080fd5b8063959fc0971461033b578063984d8655146103735780639b2ea4bd146103a757600080fd5b806362772c731161016657806377d792191161014057806377d79219146102a65780637930b9b0146102bb57806381bc3632146103035780638da5cb5b1461031657600080fd5b806362772c73146102785780636e96dfd71461028b578063715018a61461029e57600080fd5b8063316eb395116101a2578063316eb3951461020f5780634172e7f91461023157806344fca697146102525780634b12e6431461026557600080fd5b8063073d0b6c146101c95780631783a521146101de5780632cf3219c146101f1575b600080fd5b6101dc6101d73660046114ec565b61048d565b005b6101dc6101ec3660046114ec565b610567565b6101f9610610565b6040516102069190611562565b60405180910390f35b61022261021d366004611611565b6106dc565b60405161020693929190611680565b61024461023f366004611611565b61079a565b6040516102069291906116b5565b6101dc6102603660046116e1565b610849565b610244610273366004611611565b61095e565b6101dc61028636600461172c565b61098a565b6101dc610299366004611611565b610a3c565b6101dc610aa6565b6102ae610aee565b60405161020691906117b2565b6102ce6102c9366004611824565b610b76565b60405161020694939291906001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6101dc61031136600461183d565b610bc0565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610206565b61032361034936600461189e565b6001600160a01b039182166000908152606d60209081526040808320938516835292905220541690565b61032361038136600461189e565b606d6020908152600092835260408084209091529082529020546001600160a01b031681565b6101dc6103b53660046118d1565b610c6c565b6101dc6103c836600461183d565b610cbb565b6103e06103db366004611611565b610d5e565b6040516102069190611966565b6102226103fb366004611611565b610e74565b6101dc61040e366004611979565b610ea0565b6103236104213660046119b3565b610ee5565b6101dc610434366004611611565b610f1a565b610323610447366004611824565b611029565b6103e061045a366004611611565b611058565b606554610323906001600160a01b031681565b6101dc610480366004611611565b6110d1565b6101dc611142565b610495611256565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038481166020938401528881168252606a83526040909120835181546001600160a01b0319169216919091178155828201518051919261053692600185019290910190611399565b5060409190910151600290910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b61056f611256565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038481166020938401528881168252606983526040909120835181546001600160a01b0319169216919091178155828201518051919261053692600185019290910190611399565b6060606c805480602002602001604051908101604052809291908181526020016000905b828210156106d35760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156106bb57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161069d575b50505050508152505081526020019060010190610634565b50505050905090565b606a60205260009081526040902080546001820180546001600160a01b039092169291610708906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610734906119f5565b80156107815780601f1061075657610100808354040283529160200191610781565b820191906000526020600020905b81548152906001019060200180831161076457829003601f168201915b505050600290930154919250506001600160a01b031683565b606860205260009081526040902080546001820180546001600160a01b0390921692916107c6906119f5565b80601f01602080910402602001604051908101604052809291908181526020018280546107f2906119f5565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050905082565b610851611256565b604080516080810182526001600160a01b0395861681529385166020850190815292851690840190815260608401918252606b8054600181018255600091909152935160049094027fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4810180549587166001600160a01b031996871617905592517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b584018054918716918616919091179055517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b68301805491909516931692909217909255517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b790910155565b606760205260009081526040902080546001820180546001600160a01b0390921692916107c6906119f5565b610992611256565b606c6040518060400160405280856001600160a01b031681526020018484808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939094525050835460018082018655948252602091829020845160029092020180546001600160a01b0319166001600160a01b0390921691909117815583820151805194959194610a34945091850192019061141d565b505050505050565b610a44611256565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b610aae611256565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b6060606b805480602002602001604051908101604052809291908181526020016000905b828210156106d3576000848152602090819020604080516080810182526004860290920180546001600160a01b0390811684526001808301548216858701526002830154909116928401929092526003015460608301529083529092019101610b12565b606b8181548110610b8657600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039283169450908216929091169084565b610bc8611256565b6040518060400160405280846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038781168252606760209081526040909220845181546001600160a01b0319169216919091178155838201518051919350610c63926001850192910190611399565b50505050505050565b610c74611256565b8060668484604051610c87929190611a30565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b610cc3611256565b6040518060400160405280846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038781168252606860209081526040909220845181546001600160a01b0319169216919091178155838201518051919350610c63926001850192910190611399565b610d94604051806060016040528060006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6001600160a01b038083166000908152606a60209081526040918290208251606081019093528054909316825260018301805492939291840191610dd7906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e03906119f5565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b5050509183525050600291909101546001600160a01b031660209091015292915050565b606960205260009081526040902080546001820180546001600160a01b039092169291610708906119f5565b610ea8611256565b6001600160a01b039283166000908152606d6020908152604080832094861683529390529190912080546001600160a01b03191691909216179055565b600060668383604051610ef9929190611a30565b908152604051908190036020019020546001600160a01b0316905092915050565b600054610100900460ff1615808015610f3a5750600054600160ff909116105b80610f545750303b158015610f54575060005460ff166001145b610fb75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ae5565b6000805460ff191660011790558015610fda576000805461ff0019166101001790555b610fe3826112b2565b8015611025576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610a9a565b5050565b606c818154811061103957600080fd5b60009182526020909120600290910201546001600160a01b0316905081565b61108e604051806060016040528060006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6001600160a01b038083166000908152606960209081526040918290208251606081019093528054909316825260018301805492939291840191610dd7906119f5565b6110d9611256565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146111945760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401610ae5565b60006111a86033546001600160a01b031690565b6065549091506001600160a01b03166111c0816112ed565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610a9a565b6033546001600160a01b031633146112b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ae5565b565b600054610100900460ff166112d95760405162461bcd60e51b8152600401610ae590611a40565b6112e161133f565b6112ea816112ed565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113665760405162461bcd60e51b8152600401610ae590611a40565b6112b0600054610100900460ff166113905760405162461bcd60e51b8152600401610ae590611a40565b6112b0336112ed565b8280546113a5906119f5565b90600052602060002090601f0160209004810192826113c7576000855561140d565b82601f106113e057805160ff191683800117855561140d565b8280016001018555821561140d579182015b8281111561140d5782518255916020019190600101906113f2565b50611419929150611472565b5090565b82805482825590600052602060002090810192821561140d579160200282015b8281111561140d57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061143d565b5b808211156114195760008155600101611473565b80356001600160a01b038116811461149e57600080fd5b919050565b60008083601f8401126114b557600080fd5b50813567ffffffffffffffff8111156114cd57600080fd5b6020830191508360208285010111156114e557600080fd5b9250929050565b60008060008060006080868803121561150457600080fd5b61150d86611487565b945061151b60208701611487565b9350604086013567ffffffffffffffff81111561153757600080fd5b611543888289016114a3565b9094509250611556905060608701611487565b90509295509295909350565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561160257898403603f19018652825180516001600160a01b039081168652908901518986018990528051898701819052908a0191849160608801905b808410156115ec57845183168252938c019360019390930192908c01906115ca565b50988b019896505050928801925060010161158a565b50919998505050505050505050565b60006020828403121561162357600080fd5b61162c82611487565b9392505050565b6000815180845260005b818110156116595760208185018101518683018201520161163d565b8181111561166b576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038086168352606060208401526116a26060840186611633565b9150808416604084015250949350505050565b6001600160a01b03831681526040602082018190526000906116d990830184611633565b949350505050565b600080600080608085870312156116f757600080fd5b61170085611487565b935061170e60208601611487565b925061171c60408601611487565b9396929550929360600135925050565b60008060006040848603121561174157600080fd5b61174a84611487565b9250602084013567ffffffffffffffff8082111561176757600080fd5b818601915086601f83011261177b57600080fd5b81358181111561178a57600080fd5b8760208260051b850101111561179f57600080fd5b6020830194508093505050509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561181757815180516001600160a01b0390811686528782015181168887015286820151168686015260609081015190850152608090930192908501906001016117cf565b5091979650505050505050565b60006020828403121561183657600080fd5b5035919050565b6000806000806060858703121561185357600080fd5b61185c85611487565b935061186a60208601611487565b9250604085013567ffffffffffffffff81111561188657600080fd5b611892878288016114a3565b95989497509550505050565b600080604083850312156118b157600080fd5b6118ba83611487565b91506118c860208401611487565b90509250929050565b6000806000604084860312156118e657600080fd5b833567ffffffffffffffff8111156118fd57600080fd5b611909868287016114a3565b909450925061191c905060208501611487565b90509250925092565b600060018060a01b0380835116845260208301516060602086015261194d6060860182611633565b9050816040850151166040860152809250505092915050565b60208152600061162c6020830184611925565b60008060006060848603121561198e57600080fd5b61199784611487565b92506119a560208501611487565b915061191c60408501611487565b600080602083850312156119c657600080fd5b823567ffffffffffffffff8111156119dd57600080fd5b6119e9858286016114a3565b90969095509350505050565b600181811c90821680611a0957607f821691505b60208210811415611a2a57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "404:5467:127:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3693:253;;;;;;:::i;:::-;;:::i;:::-;;3002:264;;;;;;:::i;:::-;;:::i;5283:112::-;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;688:66;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;557:51::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4389:265::-;;;;;;:::i;:::-;;:::i;510:43::-;;;;;;:::i;:::-;;:::i;4658:161::-;;;;;;:::i;:::-;;:::i;1602:386:134:-;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;5399:103:127:-;;;:::i;:::-;;;;;;;:::i;758:37::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;6759:15:486;;;6741:34;;6811:15;;;6806:2;6791:18;;6784:43;6863:15;;6858:2;6843:18;;6836:43;6910:2;6895:18;;6888:34;;;;6690:3;6675:19;;6472:456;2537:181:127;;;;;;:::i;:::-;;:::i;1441:85:436:-;1513:6;;-1:-1:-1;;;;;1513:6:436;1441:85;;;-1:-1:-1;;;;;7661:32:486;;;7643:51;;7631:2;7616:18;1441:85:436;7497:203:486;5698:171:127;;;;;;:::i;:::-;-1:-1:-1;;;;;5818:33:127;;;5796:7;5818:33;;;:21;:33;;;;;;;;:46;;;;;;;;;;;;5698:171;846:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;846:76:127;;;4984:117;;;;;;:::i;:::-;;:::i;2021:240::-;;;;;;:::i;:::-;;:::i;3950:136::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;612:72::-;;;;;;:::i;:::-;;:::i;5506:188::-;;;;;;:::i;:::-;;:::i;5177:102::-;;;;;;:::i;:::-;;:::i;1011:90::-;;;;;;:::i;:::-;;:::i;799:43::-;;;;;;:::i;:::-;;:::i;3270:145::-;;;;;;:::i;:::-;;:::i;530:27:134:-;;;;;-1:-1:-1;;;;;530:27:134;;;2839:155;;;;;;:::i;:::-;;:::i;2158:541::-;;;:::i;3693:253:127:-;1334:13:436;:11;:13::i;:::-;3885:56:127::1;;;;;;;;3901:8;-1:-1:-1::0;;;;;3885:56:127::1;;;;;3911:17;;3885:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;3885:56:127;;;-1:-1:-1;;;;;;;;3885:56:127;;::::1;;::::0;;::::1;::::0;3852:30;;::::1;::::0;;:23:::1;:30:::0;;;;;;:89;;;;-1:-1:-1;;;;;;3852:89:127::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;:30;;:89:::1;::::0;-1:-1:-1;3852:89:127;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;3852:89:127::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;3852:89:127::1;-1:-1:-1::0;;;;;3852:89:127;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;3693:253:127:o;3002:264::-;1334:13:436;:11;:13::i;:::-;3201:60:127::1;;;;;;;;3220:8;-1:-1:-1::0;;;;;3201:60:127::1;;;;;3230:17;;3201:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;3201:60:127;;;-1:-1:-1;;;;;;;;3201:60:127;;::::1;;::::0;;::::1;::::0;3165:33;;::::1;::::0;;:26:::1;:33:::0;;;;;;:96;;;;-1:-1:-1;;;;;;3165:96:127::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;:33;;:96:::1;::::0;-1:-1:-1;3165:96:127;::::1;::::0;;;::::1;::::0;::::1;:::i;5283:112::-:0;5333:22;5370:20;5363:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5363:27:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5363:27:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5283:112;:::o;688:66::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;688:66:127;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;688:66:127;;;;;;;-1:-1:-1;;;;;;;688:66:127;;:::o;557:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;557:51:127;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4389:265::-;1334:13:436;:11;:13::i;:::-;4574:74:127::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;4574:74:127;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;;;;4551:17:::1;:98:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;4551:98:127;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;4551:98:127;;::::1;;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;4389:265::o;510:43::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;510:43:127;;;;;;;;:::i;4658:161::-;1334:13:436;:11;:13::i;:::-;4754:20:127::1;4780:33;;;;;;;;4794:11;-1:-1:-1::0;;;;;4780:33:127::1;;;;;4807:5;;4780:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;4780:33:127;;;;-1:-1:-1;;4754:60:127;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;4754:60:127::1;-1:-1:-1::0;;;;;4754:60:127;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;-1:-1:-1;4754:60:127;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;4658:161:::0;;;:::o;1602:386:134:-;1334:13:436;:11;:13::i;:::-;1758:12:134::1;::::0;;-1:-1:-1;;;;;1830:30:134;;::::1;-1:-1:-1::0;;;;;;1830:30:134;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;10797:34:486::0;;;10862:2;10847:18;;10840:43;;;;1934:49:134::1;::::0;10732:18:486;1934:49:134::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:436;:11;:13::i;:::-;2804:26:134::1;::::0;-1:-1:-1;;;2804:26:134;;11096:2:486;2804:26:134::1;::::0;::::1;11078:21:486::0;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:486;;;11147:46;11210:18;;2804:26:134::1;;;;;;;;5399:103:127::0;5446:19;5480:17;5473:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5473:24:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;758:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;758:37:127;;;;-1:-1:-1;758:37:127;;;;;;;;;:::o;2537:181::-;1334:13:436;:11;:13::i;:::-;2678:35:127::1;;;;;;;;2687:6;-1:-1:-1::0;;;;;2678:35:127::1;;;;;2695:17;;2678:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;2678:35:127;;;;-1:-1:-1;;;;;;;2661:14:127;;::::1;::::0;;:7:::1;:14;::::0;;;;;;;:52;;;;-1:-1:-1;;;;;;2661:52:127::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;:14;;-1:-1:-1;2661:52:127::1;::::0;-1:-1:-1;2661:52:127;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;;;2537:181:127:o;4984:117::-;1334:13:436;:11;:13::i;:::-;5086:10:127::1;5069;5080:2;;5069:14;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:27;;-1:-1:-1;;;;;5069:27:127;;;::::1;-1:-1:-1::0;;;;;;5069:27:127;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;4984:117:127:o;2021:240::-;1334:13:436;:11;:13::i;:::-;2206:50:127::1;;;;;;;;2215:21;-1:-1:-1::0;;;;;2206:50:127::1;;;;;2238:17;;2206:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;2206:50:127;;;;-1:-1:-1;;;;;;;2175:28:127;;::::1;::::0;;:15:::1;:28;::::0;;;;;;;:81;;;;-1:-1:-1;;;;;;2175:81:127::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;:28;;-1:-1:-1;2175:81:127::1;::::0;-1:-1:-1;2175:81:127;::::1;::::0;;::::1;::::0;::::1;:::i;3950:136::-:0;4014:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4014:22:127;-1:-1:-1;;;;;4051:30:127;;;;;;;:23;:30;;;;;;;;;4044:37;;;;;;;;;;;;;;;;;;;;;;4051:30;4044:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4044:37:127;;;-1:-1:-1;;4044:37:127;;;;;;-1:-1:-1;;;;;4044:37:127;;;;;;;3950:136;-1:-1:-1;;3950:136:127:o;612:72::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;612:72:127;;;;;;;;:::i;5506:188::-;1334:13:436;:11;:13::i;:::-;-1:-1:-1;;;;;5636:33:127;;::::1;;::::0;;;:21:::1;:33;::::0;;;;;;;:46;;::::1;::::0;;;;;;;;;:53;;-1:-1:-1;;;;;;5636:53:127::1;::::0;;;::::1;;::::0;;5506:188::o;5177:102::-;5238:7;5260:10;5271:2;;5260:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;5260:14:127;;-1:-1:-1;5177:102:127;;;;:::o;1011:90::-;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;11719:2:486;3314:201:439;;;11701:21:486;11758:2;11738:18;;;11731:30;11797:34;11777:18;;;11770:62;-1:-1:-1;;;11848:18:486;;;11841:44;11902:19;;3314:201:439;11517:410:486;3314:201:439;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;1071:25:127::1;1090:5;1071:18;:25::i;:::-;3640:14:439::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;12084:36:486;;3710:14:439;;12072:2:486;12057:18;3710:14:439;11932:194:486;3636:99:439;3258:483;1011:90:127;:::o;799:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;799:43:127;;-1:-1:-1;799:43:127;:::o;3270:145::-;3337:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3337:25:127;-1:-1:-1;;;;;3377:33:127;;;;;;;:26;:33;;;;;;;;;3370:40;;;;;;;;;;;;;;;;;;;;;;3377:33;3370:40;;;;;;;:::i;2839:155:134:-;1334:13:436;:11;:13::i;:::-;2937:12:134::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:134;;::::1;10797:34:486::0;;10867:15;;;10862:2;10847:18;;10840:43;2921:39:134::1;::::0;10732:18:486;2921:39:134::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:134::1;-1:-1:-1::0;;;;;2966:23:134;;;::::1;::::0;;;::::1;::::0;;2839:155::o;2158:541::-;2285:12;;-1:-1:-1;;;;;2285:12:134;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:134;;12333:2:486;2263:60:134;;;12315:21:486;12372:2;12352:18;;;12345:30;-1:-1:-1;;;12391:18:486;;;12384:51;12452:18;;2263:60:134;12131:345:486;2263:60:134;2378:16;2397:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;2397:7:134;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:134;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:134;;;2605:32;;;-1:-1:-1;;;;;10815:15:486;;10797:34;;-1:-1:-1;10862:2:486;10847:18;;10840:43;2605:32:134;;10732:18:486;2605:32:134;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;10815:15:486;;;10797:34;;2681:12:134;;;10862:2:486;10847:18;;10840:43;2648:46:134;;10732:18:486;2648:46:134;10585:304:486;1599:130:436;1513:6;;-1:-1:-1;;;;;1513:6:436;929:10:449;1662:23:436;1654:68;;;;-1:-1:-1;;;1654:68:436;;12683:2:486;1654:68:436;;;12665:21:486;;;12702:18;;;12695:30;12761:34;12741:18;;;12734:62;12813:18;;1654:68:436;12481:356:486;1654:68:436;1599:130::o;562:129:134:-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;638:16:134::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;:::-;562:129:::0;:::o;2673:187:436:-;2765:6;;;-1:-1:-1;;;;;2781:17:436;;;-1:-1:-1;;;;;;2781:17:436;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1065:26:436::1;5363:13:439::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1176:32:436::1;929:10:449::0;1176:18:436::1;:32::i;-1:-1:-1:-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:173:486;82:20;;-1:-1:-1;;;;;131:31:486;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:348::-;244:8;254:6;308:3;301:4;293:6;289:17;285:27;275:55;;326:1;323;316:12;275:55;-1:-1:-1;349:20:486;;392:18;381:30;;378:50;;;424:1;421;414:12;378:50;461:4;453:6;449:17;437:29;;513:3;506:4;497:6;489;485:19;481:30;478:39;475:59;;;530:1;527;520:12;475:59;192:348;;;;;:::o;545:634::-;643:6;651;659;667;675;728:3;716:9;707:7;703:23;699:33;696:53;;;745:1;742;735:12;696:53;768:29;787:9;768:29;:::i;:::-;758:39;;816:38;850:2;839:9;835:18;816:38;:::i;:::-;806:48;;905:2;894:9;890:18;877:32;932:18;924:6;921:30;918:50;;;964:1;961;954:12;918:50;1003:59;1054:7;1045:6;1034:9;1030:22;1003:59;:::i;:::-;1081:8;;-1:-1:-1;977:85:486;-1:-1:-1;1135:38:486;;-1:-1:-1;1169:2:486;1154:18;;1135:38;:::i;:::-;1125:48;;545:634;;;;;;;;:::o;1184:1578::-;1390:4;1419:2;1459;1448:9;1444:18;1489:2;1478:9;1471:21;1512:6;1547;1541:13;1578:6;1570;1563:22;1604:2;1594:12;;1637:2;1626:9;1622:18;1615:25;;1699:2;1689:6;1686:1;1682:14;1671:9;1667:30;1663:39;1737:2;1729:6;1725:15;1758:1;1779;1789:944;1805:6;1800:3;1797:15;1789:944;;;1874:22;;;-1:-1:-1;;1870:36:486;1858:49;;1930:13;;2059:9;;-1:-1:-1;;;;;2055:18:486;;;2040:34;;2113:11;;;2107:18;2145:15;;;2138:27;;;2226:19;;1970:15;;;2258:24;;;2348:21;;;;2393:1;;2316:2;2304:15;;;2407:218;2423:8;2418:3;2415:17;2407:218;;;2504:15;;2500:24;;2486:39;;2594:17;;;;2451:1;2442:11;;;;;2551:14;;;;2407:218;;;-1:-1:-1;2711:12:486;;;;2648:5;-1:-1:-1;;;2676:15:486;;;;-1:-1:-1;1831:1:486;1822:11;1789:944;;;-1:-1:-1;2750:6:486;;1184:1578;-1:-1:-1;;;;;;;;;1184:1578:486:o;2767:186::-;2826:6;2879:2;2867:9;2858:7;2854:23;2850:32;2847:52;;;2895:1;2892;2885:12;2847:52;2918:29;2937:9;2918:29;:::i;:::-;2908:39;2767:186;-1:-1:-1;;;2767:186:486:o;2958:472::-;3000:3;3038:5;3032:12;3065:6;3060:3;3053:19;3090:1;3100:162;3114:6;3111:1;3108:13;3100:162;;;3176:4;3232:13;;;3228:22;;3222:29;3204:11;;;3200:20;;3193:59;3129:12;3100:162;;;3280:6;3277:1;3274:13;3271:87;;;3346:1;3339:4;3330:6;3325:3;3321:16;3317:27;3310:38;3271:87;-1:-1:-1;3412:2:486;3391:15;-1:-1:-1;;3387:29:486;3378:39;;;;3419:4;3374:50;;2958:472;-1:-1:-1;;2958:472:486:o;3435:418::-;3603:4;3649:1;3645;3640:3;3636:11;3632:19;3690:2;3682:6;3678:15;3667:9;3660:34;3730:2;3725;3714:9;3710:18;3703:30;3750:45;3791:2;3780:9;3776:18;3768:6;3750:45;:::i;:::-;3742:53;;3843:2;3835:6;3831:15;3826:2;3815:9;3811:18;3804:43;;3435:418;;;;;;:::o;3858:317::-;-1:-1:-1;;;;;4035:32:486;;4017:51;;4104:2;4099;4084:18;;4077:30;;;-1:-1:-1;;4124:45:486;;4150:18;;4142:6;4124:45;:::i;:::-;4116:53;3858:317;-1:-1:-1;;;;3858:317:486:o;4180:403::-;4266:6;4274;4282;4290;4343:3;4331:9;4322:7;4318:23;4314:33;4311:53;;;4360:1;4357;4350:12;4311:53;4383:29;4402:9;4383:29;:::i;:::-;4373:39;;4431:38;4465:2;4454:9;4450:18;4431:38;:::i;:::-;4421:48;;4488:38;4522:2;4511:9;4507:18;4488:38;:::i;:::-;4180:403;;;;-1:-1:-1;4478:48:486;;4573:2;4558:18;4545:32;;-1:-1:-1;;4180:403:486:o;4588:689::-;4683:6;4691;4699;4752:2;4740:9;4731:7;4727:23;4723:32;4720:52;;;4768:1;4765;4758:12;4720:52;4791:29;4810:9;4791:29;:::i;:::-;4781:39;;4871:2;4860:9;4856:18;4843:32;4894:18;4935:2;4927:6;4924:14;4921:34;;;4951:1;4948;4941:12;4921:34;4989:6;4978:9;4974:22;4964:32;;5034:7;5027:4;5023:2;5019:13;5015:27;5005:55;;5056:1;5053;5046:12;5005:55;5096:2;5083:16;5122:2;5114:6;5111:14;5108:34;;;5138:1;5135;5128:12;5108:34;5191:7;5186:2;5176:6;5173:1;5169:14;5165:2;5161:23;5157:32;5154:45;5151:65;;;5212:1;5209;5202:12;5151:65;5243:2;5239;5235:11;5225:21;;5265:6;5255:16;;;;;4588:689;;;;;:::o;5282:1000::-;5511:2;5563:21;;;5633:13;;5536:18;;;5655:22;;;5482:4;;5511:2;5696;;5714:18;;;;5755:15;;;5482:4;5798:458;5812:6;5809:1;5806:13;5798:458;;;5871:13;;5955:9;;-1:-1:-1;;;;;5951:18:486;;;5939:31;;6014:11;;;6008:18;6004:27;;5990:12;;;5983:49;6076:11;;;6070:18;6066:27;6052:12;;;6045:49;6117:4;6161:11;;;6155:18;6141:12;;;6134:40;6203:4;6194:14;;;;6231:15;;;;5924:1;5827:9;5798:458;;;-1:-1:-1;6273:3:486;;5282:1000;-1:-1:-1;;;;;;;5282:1000:486:o;6287:180::-;6346:6;6399:2;6387:9;6378:7;6374:23;6370:32;6367:52;;;6415:1;6412;6405:12;6367:52;-1:-1:-1;6438:23:486;;6287:180;-1:-1:-1;6287:180:486:o;6933:559::-;7022:6;7030;7038;7046;7099:2;7087:9;7078:7;7074:23;7070:32;7067:52;;;7115:1;7112;7105:12;7067:52;7138:29;7157:9;7138:29;:::i;:::-;7128:39;;7186:38;7220:2;7209:9;7205:18;7186:38;:::i;:::-;7176:48;;7275:2;7264:9;7260:18;7247:32;7302:18;7294:6;7291:30;7288:50;;;7334:1;7331;7324:12;7288:50;7373:59;7424:7;7415:6;7404:9;7400:22;7373:59;:::i;:::-;6933:559;;;;-1:-1:-1;7451:8:486;-1:-1:-1;;;;6933:559:486:o;7705:260::-;7773:6;7781;7834:2;7822:9;7813:7;7809:23;7805:32;7802:52;;;7850:1;7847;7840:12;7802:52;7873:29;7892:9;7873:29;:::i;:::-;7863:39;;7921:38;7955:2;7944:9;7940:18;7921:38;:::i;:::-;7911:48;;7705:260;;;;;:::o;7970:485::-;8050:6;8058;8066;8119:2;8107:9;8098:7;8094:23;8090:32;8087:52;;;8135:1;8132;8125:12;8087:52;8175:9;8162:23;8208:18;8200:6;8197:30;8194:50;;;8240:1;8237;8230:12;8194:50;8279:59;8330:7;8321:6;8310:9;8306:22;8279:59;:::i;:::-;8357:8;;-1:-1:-1;8253:85:486;-1:-1:-1;8411:38:486;;-1:-1:-1;8445:2:486;8430:18;;8411:38;:::i;:::-;8401:48;;7970:485;;;;;:::o;8460:396::-;8518:3;8563:1;8559;8554:3;8550:11;8546:19;8604:2;8596:5;8590:12;8586:21;8581:3;8574:34;8654:4;8647:5;8643:16;8637:23;8692:4;8685;8680:3;8676:14;8669:28;8718:47;8759:4;8754:3;8750:14;8736:12;8718:47;:::i;:::-;8706:59;;8826:2;8818:4;8811:5;8807:16;8801:23;8797:32;8790:4;8785:3;8781:14;8774:56;8846:4;8839:11;;;;8460:396;;;;:::o;8861:284::-;9058:2;9047:9;9040:21;9021:4;9078:61;9135:2;9124:9;9120:18;9112:6;9078:61;:::i;9150:334::-;9227:6;9235;9243;9296:2;9284:9;9275:7;9271:23;9267:32;9264:52;;;9312:1;9309;9302:12;9264:52;9335:29;9354:9;9335:29;:::i;:::-;9325:39;;9383:38;9417:2;9406:9;9402:18;9383:38;:::i;:::-;9373:48;;9440:38;9474:2;9463:9;9459:18;9440:38;:::i;9489:411::-;9560:6;9568;9621:2;9609:9;9600:7;9596:23;9592:32;9589:52;;;9637:1;9634;9627:12;9589:52;9677:9;9664:23;9710:18;9702:6;9699:30;9696:50;;;9742:1;9739;9732:12;9696:50;9781:59;9832:7;9823:6;9812:9;9808:22;9781:59;:::i;:::-;9859:8;;9755:85;;-1:-1:-1;9489:411:486;-1:-1:-1;;;;9489:411:486:o;10200:380::-;10279:1;10275:12;;;;10322;;;10343:61;;10397:4;10389:6;10385:17;10375:27;;10343:61;10450:2;10442:6;10439:14;10419:18;10416:38;10413:161;;;10496:10;10491:3;10487:20;10484:1;10477:31;10531:4;10528:1;10521:15;10559:4;10556:1;10549:15;10413:161;;10200:380;;;:::o;11239:273::-;11424:6;11416;11411:3;11398:33;11380:3;11450:16;;11475:13;;;11450:16;11239:273;-1:-1:-1;11239:273:486:o;12842:407::-;13044:2;13026:21;;;13083:2;13063:18;;;13056:30;13122:34;13117:2;13102:18;;13095:62;-1:-1:-1;;;13188:2:486;13173:18;;13166:41;13239:3;13224:19;;12842:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "balancerPoolForTokens(address,address)": "984d8655", + "curveSwapPoolsConfig(uint256)": "ceb4e943", + "flywheelRewards(address)": "4172e7f9", + "fundingStrategiesConfig(address)": "316eb395", + "getAddress(string)": "bf40fac1", + "getBalancerPoolForTokens(address,address)": "959fc097", + "getCurveSwapPools()": "2cf3219c", + "getFundingStrategy(address)": "a13449d6", + "getJarvisPools()": "77d79219", + "getRedemptionStrategy(address)": "cf78b30a", + "initialize(address)": "c4d66de8", + "jarvisPoolsConfig(uint256)": "7930b9b0", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "plugins(address)": "4b12e643", + "redemptionStrategiesConfig(address)": "b40dc803", + "renounceOwnership()": "715018a6", + "setAddress(string,address)": "9b2ea4bd", + "setBalancerPoolForTokens(address,address,address)": "b9197554", + "setCurveSwapPool(address,address[])": "62772c73", + "setFlywheelRewards(address,address,string)": "a11b73a6", + "setFundingStrategy(address,address,string,address)": "073d0b6c", + "setJarvisPool(address,address,address,uint256)": "44fca697", + "setPlugin(address,address,string)": "81bc3632", + "setRedemptionStrategy(address,address,string,address)": "1783a521", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/AddressesProvider_Proxy.json b/packages/sdk/deployments/mode/AddressesProvider_Proxy.json new file mode 100644 index 0000000000..1844f86fd5 --- /dev/null +++ b/packages/sdk/deployments/mode/AddressesProvider_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "transactionIndex": 1, + "gasUsed": "772424", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000004000020200000000000000000800000000800000000000000000000000400000000000000000000000000200000002000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000080000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000040000000000", + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61", + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000008d5b096c99b26d07c7f8d8a8f25be97427687f73" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + }, + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + }, + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + }, + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + }, + { + "transactionIndex": 1, + "blockNumber": 2097505, + "transactionHash": "0x0843ab269f6bde790881ef2074d71b1f5d70ad3f9a171c578e993196e303aee1", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x8fcf224fd32f62e28fa34598c49f77611443c709f38828be284f2ed83c4a7e61" + } + ], + "blockNumber": 2097505, + "cumulativeGasUsed": "819337", + "status": 1, + "byzantium": true + }, + "args": [ + "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xc4d66de80000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/AuthoritiesRegistry.json b/packages/sdk/deployments/mode/AuthoritiesRegistry.json new file mode 100644 index 0000000000..535dd2c72d --- /dev/null +++ b/packages/sdk/deployments/mode/AuthoritiesRegistry.json @@ -0,0 +1,636 @@ +{ + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "functionSig", + "type": "bytes4" + } + ], + "name": "canCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "createPoolAuthority", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "auth", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_leveredPositionsFactory", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "leveredPositionsFactory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "noAuthRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poolAuthLogic", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "poolsAuthorities", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ], + "name": "reconfigureAuthority", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_leveredPositionsFactory", + "type": "address" + } + ], + "name": "reinitialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint8", + "name": "role", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "setUserRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "transactionIndex": 1, + "gasUsed": "2296435", + "logsBloom": "0x00000000000000800000000000000000404000000000000000a00000000200000000000000000000000010000000000000100000100000000000000000000004000000000000000000000000000002000001000000000000000000000000000000000000020000000100000000000800000000800000000000000000000000400000000000000000000280000000000000000000000080000000000800c000010000000000000000000000000004000800000000000000000000001000000000000000200000000000400000000400001000000004000000000000000000a0000000000001000000020000000000000000000000000000000000000000000000", + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7", + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000005d74800e977bfc8e14eca28c9405bacbd091738e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0x2b94E2F29f6970144A42F56cA1206Aab00EA650D", + "topics": [ + "0x8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76", + "0x000000000000000000000000c3cec17c135d3c5d6badc284aff08f396447daac", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0x2b94E2F29f6970144A42F56cA1206Aab00EA650D", + "topics": [ + "0xa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198", + "0x000000000000000000000000c3cec17c135d3c5d6badc284aff08f396447daac", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0x2b94E2F29f6970144A42F56cA1206Aab00EA650D", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "logIndex": 5, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 6, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 7, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + } + ], + "blockNumber": 2097677, + "cumulativeGasUsed": "2348936", + "status": 1, + "byzantium": true + }, + "args": [ + "0x5d74800e977bFc8E14Eca28C9405BacbD091738E", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xc4d66de80000000000000000000000009b506a03bbff2a842866b10bc6732da72640cd45" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x9B506A03bBFf2a842866b10BC6732da72640cd45" + ] + }, + "implementation": "0x5d74800e977bFc8E14Eca28C9405BacbD091738E", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/AuthoritiesRegistry_Implementation.json b/packages/sdk/deployments/mode/AuthoritiesRegistry_Implementation.json new file mode 100644 index 0000000000..2725eb0b63 --- /dev/null +++ b/packages/sdk/deployments/mode/AuthoritiesRegistry_Implementation.json @@ -0,0 +1,944 @@ +{ + "address": "0x5d74800e977bFc8E14Eca28C9405BacbD091738E", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "functionSig", + "type": "bytes4" + } + ], + "name": "canCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "createPoolAuthority", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "auth", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_leveredPositionsFactory", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "leveredPositionsFactory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "noAuthRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poolAuthLogic", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "poolsAuthorities", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ], + "name": "reconfigureAuthority", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_leveredPositionsFactory", + "type": "address" + } + ], + "name": "reinitialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint8", + "name": "role", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "setUserRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x538b48f232640f13af21116f2bcca70c83a7024e9e0619438da4fb097e2c0c69", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x5d74800e977bFc8E14Eca28C9405BacbD091738E", + "transactionIndex": 1, + "gasUsed": "3581451", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa312db9ac5381bf899fb8ef6610ba2f427d417ce691d71d01daf101c5e479bd0", + "transactionHash": "0x538b48f232640f13af21116f2bcca70c83a7024e9e0619438da4fb097e2c0c69", + "logs": [], + "blockNumber": 2097674, + "cumulativeGasUsed": "3628364", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "functionSig", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "canCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "createPoolAuthority", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "auth", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_leveredPositionsFactory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "leveredPositionsFactory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "noAuthRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "poolAuthLogic", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "poolsAuthorities", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reconfigureAuthority" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_leveredPositionsFactory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reinitialize" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint8", + "name": "role", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setUserRole" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/AuthoritiesRegistry.sol": "AuthoritiesRegistry" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50613fe5806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001155760003560e01c8063c4d66de811620000a3578063ec2ffdd1116200006e578063ec2ffdd11462000241578063f2fde38b146200026d578063f7e7d1fd1462000284578063fc4d33f9146200029b57600080fd5b8063c4d66de814620001e8578063ca224d9814620001ff578063df595cb81462000216578063e30c3978146200022d57600080fd5b80637a084dac11620000e45780637a084dac14620001855780638da5cb5b14620001ab57806395f14b1614620001bd578063a1a82b5614620001d157600080fd5b806354927fb8146200011a5780635a89ef51146200014b5780636e96dfd71462000164578063715018a6146200017b575b600080fd5b6067546200012e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001626200015c36600462001297565b620002a5565b005b620001626200017536600462001297565b62000670565b62000162620006dc565b6068546200019a90600160a01b900460ff1681565b604051901515815260200162000142565b6033546001600160a01b03166200012e565b6068546200012e906001600160a01b031681565b6200012e620001e236600462001297565b62000722565b62000162620001f936600462001297565b620009ed565b6200016262000210366004620012dd565b62000b6d565b6200019a6200022736600462001342565b62000d71565b6065546200012e906001600160a01b031681565b6200012e6200025236600462001297565b6066602052600090815260409020546001600160a01b031681565b620001626200027e36600462001297565b62000e3a565b620001626200029536600462001297565b62000ead565b6200016262000ff6565b6001600160a01b038082166000818152606660205260409020548392169033141580620002da57506001600160a01b03811615155b156200066b576001600160a01b038116620003305760405162461bcd60e51b81526020600482015260116024820152706e6f207375636820617574686f7269747960781b60448201526064015b60405180910390fd5b6033546001600160a01b0316331480620003525750336001600160a01b038416145b620003945760405162461bcd60e51b81526020600482015260116024820152701b9bdd081bdddb995c881bdc881c1bdbdb607a1b604482015260640162000327565b806001600160a01b031663e347416d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620003d057600080fd5b505af1158015620003e5573d6000803e3d6000fd5b5050604051630c22644560e01b81526001600160a01b03858116600483015284169250630c2264459150602401600060405180830381600087803b1580156200042d57600080fd5b505af115801562000442573d6000803e3d6000fd5b5050604051630a4c60c560e41b81526001600160a01b0385811660048301528416925063a4c60c509150602401600060405180830381600087803b1580156200048a57600080fd5b505af11580156200049f573d6000803e3d6000fd5b5050604051637875b94560e01b81526001600160a01b03858116600483015284169250637875b9459150602401600060405180830381600087803b158015620004e757600080fd5b505af1158015620004fc573d6000803e3d6000fd5b505060405163387beb5760e11b81526001600160a01b038581166004830152841692506370f7d6ae9150602401600060405180830381600087803b1580156200054457600080fd5b505af115801562000559573d6000803e3d6000fd5b50505050620005706033546001600160a01b031690565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005de9190620013a8565b6001600160a01b0316146200066b57806001600160a01b03166313af40356200060f6033546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200065157600080fd5b505af115801562000666573d6000803e3d6000fd5b505050505b505050565b6200067a62001110565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b620006e662001110565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b604482015260640162000327565b60006200072e62001110565b6001600160a01b0382811660009081526066602052604090205416156200078a5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818dc99585d1959608a1b604482015260640162000327565b6067546000906001600160a01b0316620007cb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b604051620007d99062001265565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200081c573d6000803e3d6000fd5b5060405163189acdbd60e31b81523060048201529092508291506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156200086557600080fd5b505af11580156200087a573d6000803e3d6000fd5b505050506001600160a01b038381166000818152606660205260409081902080546001600160a01b0319169386169384179055516319883fc160e01b815260048101919091526319883fc190602401600060405180830381600087803b158015620008e457600080fd5b505af1158015620008f9573d6000803e3d6000fd5b50505050816001600160a01b03166367aff48430846001600160a01b03166342f1e8796040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200094c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009729190620013c8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260ff16602482015260016044820152606401600060405180830381600087803b158015620009c357600080fd5b505af1158015620009d8573d6000803e3d6000fd5b50505050620009e783620002a5565b50919050565b600054610100900460ff161580801562000a0e5750600054600160ff909116105b8062000a2a5750303b15801562000a2a575060005460ff166001145b62000a8f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000327565b6000805460ff19166001179055801562000ab3576000805461ff0019166101001790555b62000abe336200116e565b606880546001600160a01b0319166001600160a01b03841617905560405162000ae79062001273565b604051809103906000f08015801562000b04573d6000803e3d6000fd5b50606780546001600160a01b0319166001600160a01b0392909216919091179055801562000b69576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001620006d0565b5050565b6001600160a01b03808516600090815260666020526040902054168062000bcd5760405162461bcd60e51b8152602060048201526013602482015272185d5d1a08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640162000327565b6033546001600160a01b031633148062000bf157506068546001600160a01b031633145b62000c365760405162461bcd60e51b81526020600482015260146024820152736e6f74206f776e6572206f7220666163746f727960601b604482015260640162000327565b6068546001600160a01b03163314158062000cba5750806001600160a01b0316633300183c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cb19190620013c8565b60ff168360ff16145b62000cfc5760405162461bcd60e51b81526020600482015260116024820152706f6e6c79206c657620706f7320726f6c6560781b604482015260640162000327565b6040516319ebfd2160e21b81526001600160a01b03858116600483015260ff8516602483015283151560448301528216906367aff48490606401600060405180830381600087803b15801562000d5157600080fd5b505af115801562000d66573d6000803e3d6000fd5b505050505050505050565b6001600160a01b038085166000908152606660205260408120549091168062000da9575050606854600160a01b900460ff1662000e32565b60405163b700961360e01b81526001600160a01b03868116600483015285811660248301526001600160e01b03198516604483015282169063b700961390606401602060405180830381865afa15801562000e08573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e2e9190620013e8565b9150505b949350505050565b62000e4462001110565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633148062000f7057600062000ef57fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b03811633148062000f6d5760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b606482015260840162000327565b50505b606880546001600160a01b0319166001600160a01b03841617905560405162000f999062001273565b604051809103906000f08015801562000fb6573d6000803e3d6000fd5b50606780546001600160a01b0319166001600160a01b039290921691909117905550506068805460ff60a01b191646630e9ac0d614600160a01b02179055565b6065546001600160a01b031633146200104a5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b604482015260640162000327565b60006200105f6033546001600160a01b031690565b6065549091506001600160a01b03166200107981620011b0565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101620006d0565b6033546001600160a01b031633146200116c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000327565b565b600054610100900460ff16620011985760405162461bcd60e51b8152600401620003279062001408565b620011a262001202565b620011ad81620011b0565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166200122c5760405162461bcd60e51b8152600401620003279062001408565b6200116c600054610100900460ff166200125a5760405162461bcd60e51b8152600401620003279062001408565b6200116c33620011b0565b610e6f806200145483390190565b611d1680620022c383390190565b6001600160a01b0381168114620011ad57600080fd5b600060208284031215620012aa57600080fd5b8135620012b78162001281565b9392505050565b60ff81168114620011ad57600080fd5b8015158114620011ad57600080fd5b60008060008060808587031215620012f457600080fd5b8435620013018162001281565b93506020850135620013138162001281565b925060408501356200132581620012be565b915060608501356200133781620012ce565b939692955090935050565b600080600080608085870312156200135957600080fd5b8435620013668162001281565b93506020850135620013788162001281565b925060408501356200138a8162001281565b915060608501356001600160e01b0319811681146200133757600080fd5b600060208284031215620013bb57600080fd5b8151620012b78162001281565b600060208284031215620013db57600080fd5b8151620012b781620012be565b600060208284031215620013fb57600080fd5b8151620012b781620012ce565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe608060405260405162000e6f38038062000e6f83398101604081905262000026916200049d565b828162000036828260006200004d565b50620000449050826200008a565b505050620005d0565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620002601760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e4860279139620002f8565b9392505050565b60006200018060008051602062000e2883398151915260001b6200037760201b620002081760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e2883398151915260001b6200037760201b620002081760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b6200028c1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620002081760201c565b6060600080856001600160a01b0316856040516200031791906200057d565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fa578251620003f2576001600160a01b0385163b620003f25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000406565b6200040683836200040e565b949350505050565b8151156200041f5781518083602001fd5b8060405162461bcd60e51b8152600401620001f191906200059b565b80516001600160a01b03811681146200045357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048b57818101518382015260200162000471565b83811115620000835750506000910152565b600080600060608486031215620004b357600080fd5b620004be846200043b565b9250620004ce602085016200043b565b60408501519092506001600160401b0380821115620004ec57600080fd5b818601915086601f8301126200050157600080fd5b81518181111562000516576200051662000458565b604051601f8201601f19908116603f0116810190838211818310171562000541576200054162000458565b816040528281528960208487010111156200055b57600080fd5b6200056e8360208301602088016200046e565b80955050505050509250925092565b60008251620005918184602087016200046e565b9190910192915050565b6020815260008251806020840152620005bc8160408501602087016200046e565b601f01601f19169190910160400192915050565b61084880620005e06000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106fb565b610118565b61005b610093366004610716565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106fb565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108156027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610492565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a4836104ba565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816104fa565b6060600080856001600160a01b03168560405161043791906107c5565b600060405180830381855af49150503d8060008114610472576040519150601f19603f3d011682016040523d82523d6000602084013e610477565b606091505b5091509150610488868383876105a3565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6104c381610621565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661055f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561060f578251610608576001600160a01b0385163b6106085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610331565b5081610619565b61061983836106b5565b949350505050565b6001600160a01b0381163b61068e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610582565b8151156106c55781518083602001fd5b8060405162461bcd60e51b815260040161033191906107e1565b80356001600160a01b03811681146106f657600080fd5b919050565b60006020828403121561070d57600080fd5b610285826106df565b60008060006040848603121561072b57600080fd5b610734846106df565b9250602084013567ffffffffffffffff8082111561075157600080fd5b818601915086601f83011261076557600080fd5b81358181111561077457600080fd5b87602082850101111561078657600080fd5b6020830194508093505050509250925092565b60005b838110156107b457818101518382015260200161079c565b838111156103c05750506000910152565b600082516107d7818460208701610799565b9190910192915050565b6020815260008251806020840152610800816040850160208701610799565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b50600080546001600160a01b03199081168255600180549091169055604051819081908190819033907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908390a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a3505050506100a66100ab60201b60201c565b61016b565b600554610100900460ff16156101175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60055460ff9081161015610169576005805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611b9c8061017a6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637875b94511610104578063b4bad06a116100a2578063c6b0263e11610071578063c6b0263e14610441578063d8e708cd14610454578063e347416d14610467578063ea7ca2761461046f57600080fd5b8063b4bad06a146103bb578063b700961314610408578063bf7e214f1461041b578063c4d66de81461042e57600080fd5b80637d40583d116100de5780637d40583d146103625780638da5cb5b14610375578063a29508fc146103a0578063a4c60c50146103a857600080fd5b80637875b945146103115780637917b794146103245780637a9e5e4b1461034f57600080fd5b80632f47571f116101715780633c0689751161014b5780633c068975146102d057806342f1e879146102e357806367aff484146102eb57806370f7d6ae146102fe57600080fd5b80632f47571f1461027757806332c9c4d8146102b55780633300183c146102c857600080fd5b806313af4035116101ad57806313af40351461023657806313e27f8b1461024957806316d8887a1461025c57806319883fc11461026457600080fd5b806306a36aee146101d45780630c226445146102075780630e7b949e1461021c575b600080fd5b6101f46101e23660046117e0565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61021a6102153660046117e0565b6104a6565b005b610224600281565b60405160ff90911681526020016101fe565b61021a6102443660046117e0565b6104ef565b61021a6102573660046117e0565b61056c565b610224600381565b61021a6102723660046117e0565b6105a9565b6102a5610285366004611821565b600360209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101fe565b61021a6102c33660046117e0565b6105e6565b610224600481565b61021a6102de3660046117e0565b61072d565b610224600081565b61021a6102f9366004611875565b61076a565b61021a61030c3660046117e0565b61083f565b61021a61031f3660046117e0565b610a20565b6101f4610332366004611821565b600460209081526000928352604080842090915290825290205481565b61021a61035d3660046117e0565b610b32565b61021a6103703660046118be565b610c1c565b600054610388906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b610224600181565b61021a6103b63660046117e0565b610d27565b6102a56103c9366004611916565b6001600160a01b039190911660009081526004602090815260408083206001600160e01b031990941683529290522054600160ff929092161c16151590565b6102a561041636600461195b565b610e5f565b600154610388906001600160a01b031681565b61021a61043c3660046117e0565b610ede565b61021a61044f36600461197b565b611011565b61021a6104623660046117e0565b6110b2565b61021a6110ef565b6102a561047d3660046119a9565b6001600160a01b0391909116600090815260026020526040902054600160ff9092161c16151590565b6104bc336000356001600160e01b0319166111b6565b6104e15760405162461bcd60e51b81526004016104d8906119d5565b60405180910390fd5b6104ec81600161125f565b50565b610505336000356001600160e01b0319166111b6565b6105215760405162461bcd60e51b81526004016104d8906119d5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b610582336000356001600160e01b0319166111b6565b61059e5760405162461bcd60e51b81526004016104d8906119d5565b6104ec816001611381565b6105bf336000356001600160e01b0319166111b6565b6105db5760405162461bcd60e51b81526004016104d8906119d5565b6104ec8160016114b5565b6105fc336000356001600160e01b0319166111b6565b6106185760405162461bcd60e51b81526004016104d8906119d5565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106809190810190611a1c565b905060005b8151811015610728576106ba8282815181106106a3576106a3611ae1565b602002602001015163f5e3c46260e01b6000611011565b6106e860038383815181106106d1576106d1611ae1565b602002602001015163f5e3c46260e01b6001610c1c565b61071660038383815181106106ff576106ff611ae1565b602002602001015163db006a7560e01b6001610c1c565b8061072081611b0d565b915050610685565b505050565b610743336000356001600160e01b0319166111b6565b61075f5760405162461bcd60e51b81526004016104d8906119d5565b6104ec816000611381565b610780336000356001600160e01b0319166111b6565b61079c5760405162461bcd60e51b81526004016104d8906119d5565b80156107cb576001600160a01b03831660009081526002602052604090208054600160ff85161b1790556107f1565b6001600160a01b03831660009081526002602052604090208054600160ff85161b191690555b8160ff16836001600160a01b03167f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf283604051610832911515815260200190565b60405180910390a3505050565b610855336000356001600160e01b0319166111b6565b6108715760405162461bcd60e51b81526004016104d8906119d5565b610886600482631853304760e31b6001610c1c565b61089b600482630ede4edd60e41b6001610c1c565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109039190810190611a1c565b905060005b81518110156107285761093f600483838151811061092857610928611ae1565b602002602001015163a0712d6860e01b6001610c1c565b61095660048383815181106106ff576106ff611ae1565b610984600483838151811061096d5761096d611ae1565b602002602001015163852a12e360e01b6001610c1c565b6109b2600483838151811061099b5761099b611ae1565b602002602001015163c5ebeaec60e01b6001610c1c565b6109e060048383815181106109c9576109c9611ae1565b6020026020010151630e75270260e01b6001610c1c565b610a0e60048383815181106109f7576109f7611ae1565b6020026020010151633c3b4b8960e01b6001610c1c565b80610a1881611b0d565b915050610908565b610a36336000356001600160e01b0319166111b6565b610a525760405162461bcd60e51b81526004016104d8906119d5565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aba9190810190611a1c565b905060005b815181101561072857610af4828281518110610add57610add611ae1565b602002602001015163f5e3c46260e01b6001611011565b610b20828281518110610b0957610b09611ae1565b602002602001015163db006a7560e01b6001611011565b80610b2a81611b0d565b915050610abf565b6000546001600160a01b0316331480610bc7575060015460405163b700961360e01b81526001600160a01b039091169063b700961390610b8690339030906001600160e01b03196000351690600401611b28565b602060405180830381865afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190611b55565b610bd057600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b610c32336000356001600160e01b0319166111b6565b610c4e5760405162461bcd60e51b81526004016104d8906119d5565b8015610c92576001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b179055610ccd565b6001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b191690555b816001600160e01b031916836001600160a01b03168560ff167fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e84604051610d19911515815260200190565b60405180910390a450505050565b610d3d336000356001600160e01b0319166111b6565b610d595760405162461bcd60e51b81526004016104d8906119d5565b610d6481600261125f565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dcc9190810190611a1c565b905060005b815181101561072857610df1600283838151811061099b5761099b611ae1565b610e0860028383815181106109c9576109c9611ae1565b610e366002838381518110610e1f57610e1f611ae1565b6020026020010151632608f81860e01b6001610c1c565b610e4d60028383815181106109f7576109f7611ae1565b80610e5781611b0d565b915050610dd1565b6001600160a01b03821660009081526003602090815260408083206001600160e01b03198516845290915281205460ff1680610ed657506001600160a01b0380841660009081526004602090815260408083206001600160e01b031987168452825280832054938816835260029091529020541615155b949350505050565b600554610100900460ff1615808015610efe5750600554600160ff909116105b80610f185750303b158015610f18575060055460ff166001145b610f7b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d8565b6005805460ff191660011790558015610f9e576005805461ff0019166101001790555b600080546001600160a01b0384166001600160a01b0319918216179091556001805490911630179055801561100d576005805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b611027336000356001600160e01b0319166111b6565b6110435760405162461bcd60e51b81526004016104d8906119d5565b6001600160a01b03831660008181526003602090815260408083206001600160e01b0319871680855290835292819020805460ff191686151590811790915590519081529192917f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9101610832565b6110c8336000356001600160e01b0319166111b6565b6110e45760405162461bcd60e51b81526004016104d8906119d5565b6104ec8160006114b5565b611105336000356001600160e01b0319166111b6565b6111215760405162461bcd60e51b81526004016104d8906119d5565b61113660003063e347416d60e01b6001610c1c565b61114b600030630c22644560e01b6001610c1c565b611160600030630a4c60c560e41b6001610c1c565b611175600030630659389b60e31b6001610c1c565b61118a600030637875b94560e01b6001610c1c565b61119f60003063387beb5760e11b6001610c1c565b6111b46000306319ebfd2160e21b6001610c1c565b565b6001546000906001600160a01b03168015801590611240575060405163b700961360e01b81526001600160a01b0382169063b7009613906111ff90879030908890600401611b28565b602060405180830381865afa15801561121c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112409190611b55565b80610ed657506000546001600160a01b03858116911614949350505050565b6112738183631853304760e31b6001610c1c565b6112878183630ede4edd60e41b6001610c1c565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ef9190810190611a1c565b905060005b815181101561137b5760006113076115cb565b905060005b8151811015611366576113548585858151811061132b5761132b611ae1565b602002602001015184848151811061134557611345611ae1565b60200260200101516001610c1c565b8061135e81611b0d565b91505061130c565b5050808061137390611b0d565b9150506112f4565b50505050565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e99190810190611a1c565b905060005b815181101561137b5761142282828151811061140c5761140c611ae1565b602002602001015163c5ebeaec60e01b85611011565b61144d82828151811061143757611437611ae1565b6020026020010151630e75270260e01b85611011565b61147882828151811061146257611462611ae1565b6020026020010151632608f81860e01b85611011565b6114a382828151811061148d5761148d611ae1565b6020026020010151633c3b4b8960e01b85611011565b806114ad81611b0d565b9150506113ee565b6114c782631853304760e31b83611011565b6114d982630ede4edd60e41b83611011565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115419190810190611a1c565b905060005b815181101561137b5760006115596115cb565b905060005b81518110156115b6576115a484848151811061157c5761157c611ae1565b602002602001015183838151811061159657611596611ae1565b602002602001015187611011565b806115ae81611b0d565b91505061155e565b505080806115c390611b0d565b915050611546565b60408051600680825260e0820190925260609190816020820160c08036833701905050915063140e25ad60e31b8261160283611b72565b92508260ff168151811061161857611618611ae1565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b8261164383611b72565b92508260ff168151811061165957611659611ae1565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b8261168483611b72565b92508260ff168151811061169a5761169a611ae1565b6001600160e01b03199092166020928302919091019091015263a9059cbb60e01b826116c583611b72565b92508260ff16815181106116db576116db611ae1565b6001600160e01b0319909216602092830291909101909101526323b872dd60e01b8261170683611b72565b92508260ff168151811061171c5761171c611ae1565b6001600160e01b03199092166020928302919091019091015263095ea7b360e01b8261174783611b72565b92508260ff168151811061175d5761175d611ae1565b6001600160e01b03199092166020928302919091019091015260ff8116156117c75760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104d8565b5090565b6001600160a01b03811681146104ec57600080fd5b6000602082840312156117f257600080fd5b81356117fd816117cb565b9392505050565b80356001600160e01b03198116811461181c57600080fd5b919050565b6000806040838503121561183457600080fd5b823561183f816117cb565b915061184d60208401611804565b90509250929050565b803560ff8116811461181c57600080fd5b80151581146104ec57600080fd5b60008060006060848603121561188a57600080fd5b8335611895816117cb565b92506118a360208501611856565b915060408401356118b381611867565b809150509250925092565b600080600080608085870312156118d457600080fd5b6118dd85611856565b935060208501356118ed816117cb565b92506118fb60408601611804565b9150606085013561190b81611867565b939692955090935050565b60008060006060848603121561192b57600080fd5b61193484611856565b92506020840135611944816117cb565b915061195260408501611804565b90509250925092565b60008060006060848603121561197057600080fd5b8335611934816117cb565b60008060006060848603121561199057600080fd5b833561199b816117cb565b92506118a360208501611804565b600080604083850312156119bc57600080fd5b82356119c7816117cb565b915061184d60208401611856565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b805161181c816117cb565b60006020808385031215611a2f57600080fd5b825167ffffffffffffffff80821115611a4757600080fd5b818501915085601f830112611a5b57600080fd5b815181811115611a6d57611a6d6119fb565b8060051b604051601f19603f83011681018181108582111715611a9257611a926119fb565b604052918252848201925083810185019188831115611ab057600080fd5b938501935b82851015611ad557611ac685611a11565b84529385019392850192611ab5565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611b2157611b21611af7565b5060010190565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215611b6757600080fd5b81516117fd81611867565b600060ff821680611b8557611b85611af7565b600019019291505056fea164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "409:3105:128:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040523480156200001157600080fd5b5060043610620001155760003560e01c8063c4d66de811620000a3578063ec2ffdd1116200006e578063ec2ffdd11462000241578063f2fde38b146200026d578063f7e7d1fd1462000284578063fc4d33f9146200029b57600080fd5b8063c4d66de814620001e8578063ca224d9814620001ff578063df595cb81462000216578063e30c3978146200022d57600080fd5b80637a084dac11620000e45780637a084dac14620001855780638da5cb5b14620001ab57806395f14b1614620001bd578063a1a82b5614620001d157600080fd5b806354927fb8146200011a5780635a89ef51146200014b5780636e96dfd71462000164578063715018a6146200017b575b600080fd5b6067546200012e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001626200015c36600462001297565b620002a5565b005b620001626200017536600462001297565b62000670565b62000162620006dc565b6068546200019a90600160a01b900460ff1681565b604051901515815260200162000142565b6033546001600160a01b03166200012e565b6068546200012e906001600160a01b031681565b6200012e620001e236600462001297565b62000722565b62000162620001f936600462001297565b620009ed565b6200016262000210366004620012dd565b62000b6d565b6200019a6200022736600462001342565b62000d71565b6065546200012e906001600160a01b031681565b6200012e6200025236600462001297565b6066602052600090815260409020546001600160a01b031681565b620001626200027e36600462001297565b62000e3a565b620001626200029536600462001297565b62000ead565b6200016262000ff6565b6001600160a01b038082166000818152606660205260409020548392169033141580620002da57506001600160a01b03811615155b156200066b576001600160a01b038116620003305760405162461bcd60e51b81526020600482015260116024820152706e6f207375636820617574686f7269747960781b60448201526064015b60405180910390fd5b6033546001600160a01b0316331480620003525750336001600160a01b038416145b620003945760405162461bcd60e51b81526020600482015260116024820152701b9bdd081bdddb995c881bdc881c1bdbdb607a1b604482015260640162000327565b806001600160a01b031663e347416d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620003d057600080fd5b505af1158015620003e5573d6000803e3d6000fd5b5050604051630c22644560e01b81526001600160a01b03858116600483015284169250630c2264459150602401600060405180830381600087803b1580156200042d57600080fd5b505af115801562000442573d6000803e3d6000fd5b5050604051630a4c60c560e41b81526001600160a01b0385811660048301528416925063a4c60c509150602401600060405180830381600087803b1580156200048a57600080fd5b505af11580156200049f573d6000803e3d6000fd5b5050604051637875b94560e01b81526001600160a01b03858116600483015284169250637875b9459150602401600060405180830381600087803b158015620004e757600080fd5b505af1158015620004fc573d6000803e3d6000fd5b505060405163387beb5760e11b81526001600160a01b038581166004830152841692506370f7d6ae9150602401600060405180830381600087803b1580156200054457600080fd5b505af115801562000559573d6000803e3d6000fd5b50505050620005706033546001600160a01b031690565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005de9190620013a8565b6001600160a01b0316146200066b57806001600160a01b03166313af40356200060f6033546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200065157600080fd5b505af115801562000666573d6000803e3d6000fd5b505050505b505050565b6200067a62001110565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b620006e662001110565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b604482015260640162000327565b60006200072e62001110565b6001600160a01b0382811660009081526066602052604090205416156200078a5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818dc99585d1959608a1b604482015260640162000327565b6067546000906001600160a01b0316620007cb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b604051620007d99062001265565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200081c573d6000803e3d6000fd5b5060405163189acdbd60e31b81523060048201529092508291506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156200086557600080fd5b505af11580156200087a573d6000803e3d6000fd5b505050506001600160a01b038381166000818152606660205260409081902080546001600160a01b0319169386169384179055516319883fc160e01b815260048101919091526319883fc190602401600060405180830381600087803b158015620008e457600080fd5b505af1158015620008f9573d6000803e3d6000fd5b50505050816001600160a01b03166367aff48430846001600160a01b03166342f1e8796040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200094c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009729190620013c8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260ff16602482015260016044820152606401600060405180830381600087803b158015620009c357600080fd5b505af1158015620009d8573d6000803e3d6000fd5b50505050620009e783620002a5565b50919050565b600054610100900460ff161580801562000a0e5750600054600160ff909116105b8062000a2a5750303b15801562000a2a575060005460ff166001145b62000a8f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000327565b6000805460ff19166001179055801562000ab3576000805461ff0019166101001790555b62000abe336200116e565b606880546001600160a01b0319166001600160a01b03841617905560405162000ae79062001273565b604051809103906000f08015801562000b04573d6000803e3d6000fd5b50606780546001600160a01b0319166001600160a01b0392909216919091179055801562000b69576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001620006d0565b5050565b6001600160a01b03808516600090815260666020526040902054168062000bcd5760405162461bcd60e51b8152602060048201526013602482015272185d5d1a08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640162000327565b6033546001600160a01b031633148062000bf157506068546001600160a01b031633145b62000c365760405162461bcd60e51b81526020600482015260146024820152736e6f74206f776e6572206f7220666163746f727960601b604482015260640162000327565b6068546001600160a01b03163314158062000cba5750806001600160a01b0316633300183c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cb19190620013c8565b60ff168360ff16145b62000cfc5760405162461bcd60e51b81526020600482015260116024820152706f6e6c79206c657620706f7320726f6c6560781b604482015260640162000327565b6040516319ebfd2160e21b81526001600160a01b03858116600483015260ff8516602483015283151560448301528216906367aff48490606401600060405180830381600087803b15801562000d5157600080fd5b505af115801562000d66573d6000803e3d6000fd5b505050505050505050565b6001600160a01b038085166000908152606660205260408120549091168062000da9575050606854600160a01b900460ff1662000e32565b60405163b700961360e01b81526001600160a01b03868116600483015285811660248301526001600160e01b03198516604483015282169063b700961390606401602060405180830381865afa15801562000e08573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e2e9190620013e8565b9150505b949350505050565b62000e4462001110565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633148062000f7057600062000ef57fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b03811633148062000f6d5760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b606482015260840162000327565b50505b606880546001600160a01b0319166001600160a01b03841617905560405162000f999062001273565b604051809103906000f08015801562000fb6573d6000803e3d6000fd5b50606780546001600160a01b0319166001600160a01b039290921691909117905550506068805460ff60a01b191646630e9ac0d614600160a01b02179055565b6065546001600160a01b031633146200104a5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b604482015260640162000327565b60006200105f6033546001600160a01b031690565b6065549091506001600160a01b03166200107981620011b0565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101620006d0565b6033546001600160a01b031633146200116c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000327565b565b600054610100900460ff16620011985760405162461bcd60e51b8152600401620003279062001408565b620011a262001202565b620011ad81620011b0565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166200122c5760405162461bcd60e51b8152600401620003279062001408565b6200116c600054610100900460ff166200125a5760405162461bcd60e51b8152600401620003279062001408565b6200116c33620011b0565b610e6f806200145483390190565b611d1680620022c383390190565b6001600160a01b0381168114620011ad57600080fd5b600060208284031215620012aa57600080fd5b8135620012b78162001281565b9392505050565b60ff81168114620011ad57600080fd5b8015158114620011ad57600080fd5b60008060008060808587031215620012f457600080fd5b8435620013018162001281565b93506020850135620013138162001281565b925060408501356200132581620012be565b915060608501356200133781620012ce565b939692955090935050565b600080600080608085870312156200135957600080fd5b8435620013668162001281565b93506020850135620013788162001281565b925060408501356200138a8162001281565b915060608501356001600160e01b0319811681146200133757600080fd5b600060208284031215620013bb57600080fd5b8151620012b78162001281565b600060208284031215620013db57600080fd5b8151620012b781620012be565b600060208284031215620013fb57600080fd5b8151620012b781620012ce565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe608060405260405162000e6f38038062000e6f83398101604081905262000026916200049d565b828162000036828260006200004d565b50620000449050826200008a565b505050620005d0565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620002601760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e4860279139620002f8565b9392505050565b60006200018060008051602062000e2883398151915260001b6200037760201b620002081760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e2883398151915260001b6200037760201b620002081760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b6200028c1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620002081760201c565b6060600080856001600160a01b0316856040516200031791906200057d565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fa578251620003f2576001600160a01b0385163b620003f25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000406565b6200040683836200040e565b949350505050565b8151156200041f5781518083602001fd5b8060405162461bcd60e51b8152600401620001f191906200059b565b80516001600160a01b03811681146200045357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048b57818101518382015260200162000471565b83811115620000835750506000910152565b600080600060608486031215620004b357600080fd5b620004be846200043b565b9250620004ce602085016200043b565b60408501519092506001600160401b0380821115620004ec57600080fd5b818601915086601f8301126200050157600080fd5b81518181111562000516576200051662000458565b604051601f8201601f19908116603f0116810190838211818310171562000541576200054162000458565b816040528281528960208487010111156200055b57600080fd5b6200056e8360208301602088016200046e565b80955050505050509250925092565b60008251620005918184602087016200046e565b9190910192915050565b6020815260008251806020840152620005bc8160408501602087016200046e565b601f01601f19169190910160400192915050565b61084880620005e06000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106fb565b610118565b61005b610093366004610716565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106fb565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108156027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610492565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a4836104ba565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816104fa565b6060600080856001600160a01b03168560405161043791906107c5565b600060405180830381855af49150503d8060008114610472576040519150601f19603f3d011682016040523d82523d6000602084013e610477565b606091505b5091509150610488868383876105a3565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6104c381610621565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661055f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561060f578251610608576001600160a01b0385163b6106085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610331565b5081610619565b61061983836106b5565b949350505050565b6001600160a01b0381163b61068e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610582565b8151156106c55781518083602001fd5b8060405162461bcd60e51b815260040161033191906107e1565b80356001600160a01b03811681146106f657600080fd5b919050565b60006020828403121561070d57600080fd5b610285826106df565b60008060006040848603121561072b57600080fd5b610734846106df565b9250602084013567ffffffffffffffff8082111561075157600080fd5b818601915086601f83011261076557600080fd5b81358181111561077457600080fd5b87602082850101111561078657600080fd5b6020830194508093505050509250925092565b60005b838110156107b457818101518382015260200161079c565b838111156103c05750506000910152565b600082516107d7818460208701610799565b9190910192915050565b6020815260008251806020840152610800816040850160208701610799565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b50600080546001600160a01b03199081168255600180549091169055604051819081908190819033907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908390a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a3505050506100a66100ab60201b60201c565b61016b565b600554610100900460ff16156101175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60055460ff9081161015610169576005805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611b9c8061017a6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637875b94511610104578063b4bad06a116100a2578063c6b0263e11610071578063c6b0263e14610441578063d8e708cd14610454578063e347416d14610467578063ea7ca2761461046f57600080fd5b8063b4bad06a146103bb578063b700961314610408578063bf7e214f1461041b578063c4d66de81461042e57600080fd5b80637d40583d116100de5780637d40583d146103625780638da5cb5b14610375578063a29508fc146103a0578063a4c60c50146103a857600080fd5b80637875b945146103115780637917b794146103245780637a9e5e4b1461034f57600080fd5b80632f47571f116101715780633c0689751161014b5780633c068975146102d057806342f1e879146102e357806367aff484146102eb57806370f7d6ae146102fe57600080fd5b80632f47571f1461027757806332c9c4d8146102b55780633300183c146102c857600080fd5b806313af4035116101ad57806313af40351461023657806313e27f8b1461024957806316d8887a1461025c57806319883fc11461026457600080fd5b806306a36aee146101d45780630c226445146102075780630e7b949e1461021c575b600080fd5b6101f46101e23660046117e0565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61021a6102153660046117e0565b6104a6565b005b610224600281565b60405160ff90911681526020016101fe565b61021a6102443660046117e0565b6104ef565b61021a6102573660046117e0565b61056c565b610224600381565b61021a6102723660046117e0565b6105a9565b6102a5610285366004611821565b600360209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101fe565b61021a6102c33660046117e0565b6105e6565b610224600481565b61021a6102de3660046117e0565b61072d565b610224600081565b61021a6102f9366004611875565b61076a565b61021a61030c3660046117e0565b61083f565b61021a61031f3660046117e0565b610a20565b6101f4610332366004611821565b600460209081526000928352604080842090915290825290205481565b61021a61035d3660046117e0565b610b32565b61021a6103703660046118be565b610c1c565b600054610388906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b610224600181565b61021a6103b63660046117e0565b610d27565b6102a56103c9366004611916565b6001600160a01b039190911660009081526004602090815260408083206001600160e01b031990941683529290522054600160ff929092161c16151590565b6102a561041636600461195b565b610e5f565b600154610388906001600160a01b031681565b61021a61043c3660046117e0565b610ede565b61021a61044f36600461197b565b611011565b61021a6104623660046117e0565b6110b2565b61021a6110ef565b6102a561047d3660046119a9565b6001600160a01b0391909116600090815260026020526040902054600160ff9092161c16151590565b6104bc336000356001600160e01b0319166111b6565b6104e15760405162461bcd60e51b81526004016104d8906119d5565b60405180910390fd5b6104ec81600161125f565b50565b610505336000356001600160e01b0319166111b6565b6105215760405162461bcd60e51b81526004016104d8906119d5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b610582336000356001600160e01b0319166111b6565b61059e5760405162461bcd60e51b81526004016104d8906119d5565b6104ec816001611381565b6105bf336000356001600160e01b0319166111b6565b6105db5760405162461bcd60e51b81526004016104d8906119d5565b6104ec8160016114b5565b6105fc336000356001600160e01b0319166111b6565b6106185760405162461bcd60e51b81526004016104d8906119d5565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106809190810190611a1c565b905060005b8151811015610728576106ba8282815181106106a3576106a3611ae1565b602002602001015163f5e3c46260e01b6000611011565b6106e860038383815181106106d1576106d1611ae1565b602002602001015163f5e3c46260e01b6001610c1c565b61071660038383815181106106ff576106ff611ae1565b602002602001015163db006a7560e01b6001610c1c565b8061072081611b0d565b915050610685565b505050565b610743336000356001600160e01b0319166111b6565b61075f5760405162461bcd60e51b81526004016104d8906119d5565b6104ec816000611381565b610780336000356001600160e01b0319166111b6565b61079c5760405162461bcd60e51b81526004016104d8906119d5565b80156107cb576001600160a01b03831660009081526002602052604090208054600160ff85161b1790556107f1565b6001600160a01b03831660009081526002602052604090208054600160ff85161b191690555b8160ff16836001600160a01b03167f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf283604051610832911515815260200190565b60405180910390a3505050565b610855336000356001600160e01b0319166111b6565b6108715760405162461bcd60e51b81526004016104d8906119d5565b610886600482631853304760e31b6001610c1c565b61089b600482630ede4edd60e41b6001610c1c565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109039190810190611a1c565b905060005b81518110156107285761093f600483838151811061092857610928611ae1565b602002602001015163a0712d6860e01b6001610c1c565b61095660048383815181106106ff576106ff611ae1565b610984600483838151811061096d5761096d611ae1565b602002602001015163852a12e360e01b6001610c1c565b6109b2600483838151811061099b5761099b611ae1565b602002602001015163c5ebeaec60e01b6001610c1c565b6109e060048383815181106109c9576109c9611ae1565b6020026020010151630e75270260e01b6001610c1c565b610a0e60048383815181106109f7576109f7611ae1565b6020026020010151633c3b4b8960e01b6001610c1c565b80610a1881611b0d565b915050610908565b610a36336000356001600160e01b0319166111b6565b610a525760405162461bcd60e51b81526004016104d8906119d5565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aba9190810190611a1c565b905060005b815181101561072857610af4828281518110610add57610add611ae1565b602002602001015163f5e3c46260e01b6001611011565b610b20828281518110610b0957610b09611ae1565b602002602001015163db006a7560e01b6001611011565b80610b2a81611b0d565b915050610abf565b6000546001600160a01b0316331480610bc7575060015460405163b700961360e01b81526001600160a01b039091169063b700961390610b8690339030906001600160e01b03196000351690600401611b28565b602060405180830381865afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190611b55565b610bd057600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b610c32336000356001600160e01b0319166111b6565b610c4e5760405162461bcd60e51b81526004016104d8906119d5565b8015610c92576001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b179055610ccd565b6001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b191690555b816001600160e01b031916836001600160a01b03168560ff167fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e84604051610d19911515815260200190565b60405180910390a450505050565b610d3d336000356001600160e01b0319166111b6565b610d595760405162461bcd60e51b81526004016104d8906119d5565b610d6481600261125f565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dcc9190810190611a1c565b905060005b815181101561072857610df1600283838151811061099b5761099b611ae1565b610e0860028383815181106109c9576109c9611ae1565b610e366002838381518110610e1f57610e1f611ae1565b6020026020010151632608f81860e01b6001610c1c565b610e4d60028383815181106109f7576109f7611ae1565b80610e5781611b0d565b915050610dd1565b6001600160a01b03821660009081526003602090815260408083206001600160e01b03198516845290915281205460ff1680610ed657506001600160a01b0380841660009081526004602090815260408083206001600160e01b031987168452825280832054938816835260029091529020541615155b949350505050565b600554610100900460ff1615808015610efe5750600554600160ff909116105b80610f185750303b158015610f18575060055460ff166001145b610f7b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d8565b6005805460ff191660011790558015610f9e576005805461ff0019166101001790555b600080546001600160a01b0384166001600160a01b0319918216179091556001805490911630179055801561100d576005805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b611027336000356001600160e01b0319166111b6565b6110435760405162461bcd60e51b81526004016104d8906119d5565b6001600160a01b03831660008181526003602090815260408083206001600160e01b0319871680855290835292819020805460ff191686151590811790915590519081529192917f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9101610832565b6110c8336000356001600160e01b0319166111b6565b6110e45760405162461bcd60e51b81526004016104d8906119d5565b6104ec8160006114b5565b611105336000356001600160e01b0319166111b6565b6111215760405162461bcd60e51b81526004016104d8906119d5565b61113660003063e347416d60e01b6001610c1c565b61114b600030630c22644560e01b6001610c1c565b611160600030630a4c60c560e41b6001610c1c565b611175600030630659389b60e31b6001610c1c565b61118a600030637875b94560e01b6001610c1c565b61119f60003063387beb5760e11b6001610c1c565b6111b46000306319ebfd2160e21b6001610c1c565b565b6001546000906001600160a01b03168015801590611240575060405163b700961360e01b81526001600160a01b0382169063b7009613906111ff90879030908890600401611b28565b602060405180830381865afa15801561121c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112409190611b55565b80610ed657506000546001600160a01b03858116911614949350505050565b6112738183631853304760e31b6001610c1c565b6112878183630ede4edd60e41b6001610c1c565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ef9190810190611a1c565b905060005b815181101561137b5760006113076115cb565b905060005b8151811015611366576113548585858151811061132b5761132b611ae1565b602002602001015184848151811061134557611345611ae1565b60200260200101516001610c1c565b8061135e81611b0d565b91505061130c565b5050808061137390611b0d565b9150506112f4565b50505050565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e99190810190611a1c565b905060005b815181101561137b5761142282828151811061140c5761140c611ae1565b602002602001015163c5ebeaec60e01b85611011565b61144d82828151811061143757611437611ae1565b6020026020010151630e75270260e01b85611011565b61147882828151811061146257611462611ae1565b6020026020010151632608f81860e01b85611011565b6114a382828151811061148d5761148d611ae1565b6020026020010151633c3b4b8960e01b85611011565b806114ad81611b0d565b9150506113ee565b6114c782631853304760e31b83611011565b6114d982630ede4edd60e41b83611011565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115419190810190611a1c565b905060005b815181101561137b5760006115596115cb565b905060005b81518110156115b6576115a484848151811061157c5761157c611ae1565b602002602001015183838151811061159657611596611ae1565b602002602001015187611011565b806115ae81611b0d565b91505061155e565b505080806115c390611b0d565b915050611546565b60408051600680825260e0820190925260609190816020820160c08036833701905050915063140e25ad60e31b8261160283611b72565b92508260ff168151811061161857611618611ae1565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b8261164383611b72565b92508260ff168151811061165957611659611ae1565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b8261168483611b72565b92508260ff168151811061169a5761169a611ae1565b6001600160e01b03199092166020928302919091019091015263a9059cbb60e01b826116c583611b72565b92508260ff16815181106116db576116db611ae1565b6001600160e01b0319909216602092830291909101909101526323b872dd60e01b8261170683611b72565b92508260ff168151811061171c5761171c611ae1565b6001600160e01b03199092166020928302919091019091015263095ea7b360e01b8261174783611b72565b92508260ff168151811061175d5761175d611ae1565b6001600160e01b03199092166020928302919091019091015260ff8116156117c75760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104d8565b5090565b6001600160a01b03811681146104ec57600080fd5b6000602082840312156117f257600080fd5b81356117fd816117cb565b9392505050565b80356001600160e01b03198116811461181c57600080fd5b919050565b6000806040838503121561183457600080fd5b823561183f816117cb565b915061184d60208401611804565b90509250929050565b803560ff8116811461181c57600080fd5b80151581146104ec57600080fd5b60008060006060848603121561188a57600080fd5b8335611895816117cb565b92506118a360208501611856565b915060408401356118b381611867565b809150509250925092565b600080600080608085870312156118d457600080fd5b6118dd85611856565b935060208501356118ed816117cb565b92506118fb60408601611804565b9150606085013561190b81611867565b939692955090935050565b60008060006060848603121561192b57600080fd5b61193484611856565b92506020840135611944816117cb565b915061195260408501611804565b90509250925092565b60008060006060848603121561197057600080fd5b8335611934816117cb565b60008060006060848603121561199057600080fd5b833561199b816117cb565b92506118a360208501611804565b600080604083850312156119bc57600080fd5b82356119c7816117cb565b915061184d60208401611856565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b805161181c816117cb565b60006020808385031215611a2f57600080fd5b825167ffffffffffffffff80821115611a4757600080fd5b818501915085601f830112611a5b57600080fd5b815181811115611a6d57611a6d6119fb565b8060051b604051601f19603f83011681018181108582111715611a9257611a926119fb565b604052918252848201925083810185019188831115611ab057600080fd5b938501935b82851015611ad557611ac685611a11565b84529385019392850192611ab5565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611b2157611b21611af7565b5060010190565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215611b6757600080fd5b81516117fd81611867565b600060ff821680611b8557611b85611af7565b600019019291505056fea164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "409:3105:128:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;534:39;;;;;-1:-1:-1;;;;;534:39:128;;;;;;-1:-1:-1;;;;;206:32:486;;;188:51;;176:2;161:18;534:39:128;;;;;;;;1781:791;;;;;;:::i;:::-;;:::i;:::-;;1602:386:134;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;619:26:128:-;;;;;-1:-1:-1;;;619:26:128;;;;;;;;;803:14:486;;796:22;778:41;;766:2;751:18;619:26:128;638:187:486;1441:85:436;1513:6;;-1:-1:-1;;;;;1513:6:436;1441:85;;577:38:128;;;;;-1:-1:-1;;;;;577:38:128;;;1151:626;;;;;;:::i;:::-;;:::i;650:216::-;;;;;;:::i;:::-;;:::i;3009:503::-;;;;;;:::i;:::-;;:::i;2576:429::-;;;;;;:::i;:::-;;:::i;530:27:134:-;;;;;-1:-1:-1;;;;;530:27:134;;;468:62:128;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;468:62:128;;;2839:155:134;;;;;;:::i;:::-;;:::i;870:277:128:-;;;;;;:::i;:::-;;:::i;2158:541:134:-;;;:::i;1781:791:128:-;-1:-1:-1;;;;;1930:31:128;;;1845:21;1930:31;;;:16;:31;;;;;;1886:11;;1930:31;;1972:10;:25;;;:56;;-1:-1:-1;;;;;;2001:27:128;;;;1972:56;1968:600;;;-1:-1:-1;;;;;2046:27:128;;2038:57;;;;-1:-1:-1;;;2038:57:128;;2865:2:486;2038:57:128;;;2847:21:486;2904:2;2884:18;;;2877:30;-1:-1:-1;;;2923:18:486;;;2916:47;2980:18;;2038:57:128;;;;;;;;;1513:6:436;;-1:-1:-1;;;;;1513:6:436;2111:10:128;:21;;:50;;-1:-1:-1;2136:10:128;-1:-1:-1;;;;;2136:25:128;;;2111:50;2103:80;;;;-1:-1:-1;;;2103:80:128;;3211:2:486;2103:80:128;;;3193:21:486;3250:2;3230:18;;;3223:30;-1:-1:-1;;;3269:18:486;;;3262:47;3326:18;;2103:80:128;3009:341:486;2103:80:128;2192:4;-1:-1:-1;;;;;2192:34:128;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2236:44:128;;-1:-1:-1;;;2236:44:128;;-1:-1:-1;;;;;206:32:486;;;2236:44:128;;;188:51:486;2236:38:128;;;-1:-1:-1;2236:38:128;;-1:-1:-1;161:18:486;;2236:44:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2288:44:128;;-1:-1:-1;;;2288:44:128;;-1:-1:-1;;;;;206:32:486;;;2288:44:128;;;188:51:486;2288:38:128;;;-1:-1:-1;2288:38:128;;-1:-1:-1;161:18:486;;2288:44:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2378:50:128;;-1:-1:-1;;;2378:50:128;;-1:-1:-1;;;;;206:32:486;;;2378:50:128;;;188:51:486;2378:44:128;;;-1:-1:-1;2378:44:128;;-1:-1:-1;161:18:486;;2378:50:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2436:47:128;;-1:-1:-1;;;2436:47:128;;-1:-1:-1;;;;;206:32:486;;;2436:47:128;;;188:51:486;2436:41:128;;;-1:-1:-1;2436:41:128;;-1:-1:-1;161:18:486;;2436:47:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2512:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;2512:7:128;-1:-1:-1;;;;;2496:23:128;:4;-1:-1:-1;;;;;2496:10:128;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2496:23:128;;2492:70;;2531:4;-1:-1:-1;;;;;2531:13:128;;2545:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;2545:7:128;2531:22;;-1:-1:-1;;;;;;2531:22:128;;;;;;;-1:-1:-1;;;;;206:32:486;;;2531:22:128;;;188:51:486;161:18;;2531:22:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2492:70;1839:733;;1781:791;:::o;1602:386:134:-;1334:13:436;:11;:13::i;:::-;1758:12:134::1;::::0;;-1:-1:-1;;;;;1830:30:134;;::::1;-1:-1:-1::0;;;;;;1830:30:134;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;4057:34:486::0;;;4122:2;4107:18;;4100:43;;;;1934:49:134::1;::::0;3992:18:486;1934:49:134::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:436;:11;:13::i;:::-;2804:26:134::1;::::0;-1:-1:-1;;;2804:26:134;;4356:2:486;2804:26:134::1;::::0;::::1;4338:21:486::0;4395:2;4375:18;;;4368:30;-1:-1:-1;;;4414:18:486;;;4407:46;4470:18;;2804:26:134::1;4154:340:486::0;1151:626:128;1220:23;1334:13:436;:11;:13::i;:::-;-1:-1:-1;;;;;1267:22:128;;::::1;1302:1;1267:22:::0;;;:16:::1;:22;::::0;;;;;::::1;1259:45:::0;1251:73:::1;;;::::0;-1:-1:-1;;;1251:73:128;;4701:2:486;1251:73:128::1;::::0;::::1;4683:21:486::0;4740:2;4720:18;;;4713:30;-1:-1:-1;;;4759:18:486;;;4752:45;4814:18;;1251:73:128::1;4499:339:486::0;1251:73:128::1;1407:13;::::0;1331:33:::1;::::0;-1:-1:-1;;;;;1407:13:128::1;1423:16;3090:66:134::0;3262:15;-1:-1:-1;;;;;3262:15:134;;2998:284;1423:16:128::1;1367:77;;;;;:::i;:::-;-1:-1:-1::0;;;;;5138:15:486;;;5120:34;;5190:15;;5185:2;5170:18;;5163:43;5242:2;5237;5222:18;;5215:30;;;-1:-1:-1;5261:18:486;;;5254:29;5315:3;5300:19;1367:77:128::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;1497:30:128::1;::::0;-1:-1:-1;;;1497:30:128;;1521:4:::1;1497:30;::::0;::::1;188:51:486::0;1331:113:128;;-1:-1:-1;1331:113:128;;-1:-1:-1;;;;;;1497:15:128;::::1;::::0;::::1;::::0;161:18:486;;1497:30:128::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;;1533:22:128;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;:29;;-1:-1:-1;;;;;;1533:29:128::1;::::0;;::::1;::::0;;::::1;::::0;;1569:57;-1:-1:-1;;;1569:57:128;;::::1;::::0;::::1;188:51:486::0;;;;1569:33:128::1;::::0;161:18:486;;1569:57:128::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1632:4;-1:-1:-1::0;;;;;1632:16:128::1;;1657:4;1664;-1:-1:-1::0;;;;;1664:18:128::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1632:59;::::0;-1:-1:-1;;;;;;1632:59:128::1;::::0;;;;;;-1:-1:-1;;;;;5792:32:486;;;1632:59:128::1;::::0;::::1;5774:51:486::0;5873:4;5861:17;5841:18;;;5834:45;1686:4:128::1;5895:18:486::0;;;5888:50;5747:18;;1632:59:128::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1746:26;1767:4;1746:20;:26::i;:::-;1245:532;1151:626:::0;;;:::o;650:216::-;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;6151:2:486;3314:201:439;;;6133:21:486;6190:2;6170:18;;;6163:30;6229:34;6209:18;;;6202:62;-1:-1:-1;;;6280:18:486;;;6273:44;6334:19;;3314:201:439;5949:410:486;3314:201:439;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;729:30:128::1;748:10;729:18;:30::i;:::-;765:23;:50:::0;;-1:-1:-1;;;;;;765:50:128::1;-1:-1:-1::0;;;;;765:50:128;::::1;;::::0;;837:24:::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;821:13:128::1;:40:::0;;-1:-1:-1;;;;;;821:40:128::1;-1:-1:-1::0;;;;;821:40:128;;;::::1;::::0;;;::::1;::::0;;3636:99:439;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;6516:36:486;;3710:14:439;;6504:2:486;6489:18;3710:14:439;6364:194:486;3636:99:439;3258:483;650:216:128;:::o;3009:503::-;-1:-1:-1;;;;;3149:22:128;;;3119:27;3149:22;;;:16;:22;;;;;;;3186:31;3178:63;;;;-1:-1:-1;;;3178:63:128;;6765:2:486;3178:63:128;;;6747:21:486;6804:2;6784:18;;;6777:30;-1:-1:-1;;;6823:18:486;;;6816:49;6882:18;;3178:63:128;6563:343:486;3178:63:128;1513:6:436;;-1:-1:-1;;;;;1513:6:436;3255:10:128;:21;;:62;;-1:-1:-1;3294:23:128;;-1:-1:-1;;;;;3294:23:128;3280:10;:37;3255:62;3247:95;;;;-1:-1:-1;;;3247:95:128;;7113:2:486;3247:95:128;;;7095:21:486;7152:2;7132:18;;;7125:30;-1:-1:-1;;;7171:18:486;;;7164:50;7231:18;;3247:95:128;6911:344:486;3247:95:128;3370:23;;-1:-1:-1;;;;;3370:23:128;3356:10;:37;;;:81;;;3405:8;-1:-1:-1;;;;;3405:30:128;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3397:40;;:4;:40;;;3356:81;3348:111;;;;-1:-1:-1;;;3348:111:128;;7462:2:486;3348:111:128;;;7444:21:486;7501:2;7481:18;;;7474:30;-1:-1:-1;;;7520:18:486;;;7513:47;7577:18;;3348:111:128;7260:341:486;3348:111:128;3466:41;;-1:-1:-1;;;3466:41:128;;-1:-1:-1;;;;;5792:32:486;;;3466:41:128;;;5774:51:486;5873:4;5861:17;;5841:18;;;5834:45;5922:14;;5915:22;5895:18;;;5888:50;3466:20:128;;;;;5747:18:486;;3466:41:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3113:399;3009:503;;;;:::o;2576:429::-;-1:-1:-1;;;;;2750:22:128;;;2700:4;2750:22;;;:16;:22;;;;;;2700:4;;2750:22;2782:39;2778:223;;-1:-1:-1;;2838:14:128;;-1:-1:-1;;;2838:14:128;;;;2831:21;;2778:223;2943:51;;-1:-1:-1;;;2943:51:128;;-1:-1:-1;;;;;7862:15:486;;;2943:51:128;;;7844:34:486;7914:15;;;7894:18;;;7887:43;-1:-1:-1;;;;;;7966:33:486;;7946:18;;;7939:61;2943:24:128;;;;;7779:18:486;;2943:51:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2936:58;;;2576:429;;;;;;;:::o;2839:155:134:-;1334:13:436;:11;:13::i;:::-;2937:12:134::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:134;;::::1;4057:34:486::0;;4127:15;;;4122:2;4107:18;;4100:43;2921:39:134::1;::::0;3992:18:486;2921:39:134::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:134::1;-1:-1:-1::0;;;;;2966:23:134;;;::::1;::::0;;;::::1;::::0;;2839:155::o;870:277:128:-;1513:6:436;;-1:-1:-1;;;;;1513:6:436;929:10:449;791:23:134;;820:183;;842:13;858:16;3090:66;3262:15;-1:-1:-1;;;;;3262:15:134;;2998:284;858:16;842:32;-1:-1:-1;;;;;;897:21:134;;929:10:449;897:21:134;;926:70;;;;-1:-1:-1;;;926:70:134;;8463:2:486;926:70:134;;;8445:21:486;8502:2;8482:18;;;8475:30;8541:34;8521:18;;;8514:62;-1:-1:-1;;;8592:18:486;;;8585:48;8650:19;;926:70:134;8261:414:486;926:70:134;834:169;;820:183;956:23:128::1;:50:::0;;-1:-1:-1;;;;;;956:50:128::1;-1:-1:-1::0;;;;;956:50:128;::::1;;::::0;;1028:24:::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;1012:13:128::1;:40:::0;;-1:-1:-1;;;;;;1012:40:128::1;-1:-1:-1::0;;;;;1012:40:128;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;1099:14:128::1;:43:::0;;-1:-1:-1;;;;1099:43:128::1;1116:13;1133:9;1116:26;-1:-1:-1::0;;;1099:43:128::1;;::::0;;870:277::o;2158:541:134:-;2285:12;;-1:-1:-1;;;;;2285:12:134;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:134;;8882:2:486;2263:60:134;;;8864:21:486;8921:2;8901:18;;;8894:30;-1:-1:-1;;;8940:18:486;;;8933:51;9001:18;;2263:60:134;8680:345:486;2263:60:134;2378:16;2397:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;2397:7:134;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:134;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:134;;;2605:32;;;-1:-1:-1;;;;;4075:15:486;;4057:34;;-1:-1:-1;4122:2:486;4107:18;;4100:43;2605:32:134;;3992:18:486;2605:32:134;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;4075:15:486;;;4057:34;;2681:12:134;;;4122:2:486;4107:18;;4100:43;2648:46:134;;3992:18:486;2648:46:134;3845:304:486;1599:130:436;1513:6;;-1:-1:-1;;;;;1513:6:436;929:10:449;1662:23:436;1654:68;;;;-1:-1:-1;;;1654:68:436;;9232:2:486;1654:68:436;;;9214:21:486;;;9251:18;;;9244:30;9310:34;9290:18;;;9283:62;9362:18;;1654:68:436;9030:356:486;1654:68:436;1599:130::o;562:129:134:-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;638:16:134::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;:::-;562:129:::0;:::o;2673:187:436:-;2765:6;;;-1:-1:-1;;;;;2781:17:436;;;-1:-1:-1;;;;;;2781:17:436;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1065:26:436::1;5363:13:439::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1176:32:436::1;929:10:449::0;1176:18:436::1;:32::i;-1:-1:-1:-:0;;;;;;;;:::o;:::-;;;;;;;;:::o;250:131:486:-;-1:-1:-1;;;;;325:31:486;;315:42;;305:70;;371:1;368;361:12;386:247;445:6;498:2;486:9;477:7;473:23;469:32;466:52;;;514:1;511;504:12;466:52;553:9;540:23;572:31;597:5;572:31;:::i;:::-;622:5;386:247;-1:-1:-1;;;386:247:486:o;1038:114::-;1122:4;1115:5;1111:16;1104:5;1101:27;1091:55;;1142:1;1139;1132:12;1157:118;1243:5;1236:13;1229:21;1222:5;1219:32;1209:60;;1265:1;1262;1255:12;1280:661;1361:6;1369;1377;1385;1438:3;1426:9;1417:7;1413:23;1409:33;1406:53;;;1455:1;1452;1445:12;1406:53;1494:9;1481:23;1513:31;1538:5;1513:31;:::i;:::-;1563:5;-1:-1:-1;1620:2:486;1605:18;;1592:32;1633:33;1592:32;1633:33;:::i;:::-;1685:7;-1:-1:-1;1744:2:486;1729:18;;1716:32;1757:31;1716:32;1757:31;:::i;:::-;1807:7;-1:-1:-1;1866:2:486;1851:18;;1838:32;1879:30;1838:32;1879:30;:::i;:::-;1280:661;;;;-1:-1:-1;1280:661:486;;-1:-1:-1;;1280:661:486:o;1946:712::-;2031:6;2039;2047;2055;2108:3;2096:9;2087:7;2083:23;2079:33;2076:53;;;2125:1;2122;2115:12;2076:53;2164:9;2151:23;2183:31;2208:5;2183:31;:::i;:::-;2233:5;-1:-1:-1;2290:2:486;2275:18;;2262:32;2303:33;2262:32;2303:33;:::i;:::-;2355:7;-1:-1:-1;2414:2:486;2399:18;;2386:32;2427:33;2386:32;2427:33;:::i;:::-;2479:7;-1:-1:-1;2538:2:486;2523:18;;2510:32;-1:-1:-1;;;;;;2573:34:486;;2561:47;;2551:75;;2622:1;2619;2612:12;3589:251;3659:6;3712:2;3700:9;3691:7;3687:23;3683:32;3680:52;;;3728:1;3725;3718:12;3680:52;3760:9;3754:16;3779:31;3804:5;3779:31;:::i;5330:247::-;5398:6;5451:2;5439:9;5430:7;5426:23;5422:32;5419:52;;;5467:1;5464;5457:12;5419:52;5499:9;5493:16;5518:29;5541:5;5518:29;:::i;8011:245::-;8078:6;8131:2;8119:9;8110:7;8106:23;8102:32;8099:52;;;8147:1;8144;8137:12;8099:52;8179:9;8173:16;8198:28;8220:5;8198:28;:::i;9391:407::-;9593:2;9575:21;;;9632:2;9612:18;;;9605:30;9671:34;9666:2;9651:18;;9644:62;-1:-1:-1;;;9737:2:486;9722:18;;9715:41;9788:3;9773:19;;9391:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "canCall(address,address,address,bytes4)": "df595cb8", + "createPoolAuthority(address)": "a1a82b56", + "initialize(address)": "c4d66de8", + "leveredPositionsFactory()": "95f14b16", + "noAuthRequired()": "7a084dac", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "poolAuthLogic()": "54927fb8", + "poolsAuthorities(address)": "ec2ffdd1", + "reconfigureAuthority(address)": "5a89ef51", + "reinitialize(address)": "f7e7d1fd", + "renounceOwnership()": "715018a6", + "setUserRole(address,address,uint8,bool)": "ca224d98", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/AuthoritiesRegistry_Proxy.json b/packages/sdk/deployments/mode/AuthoritiesRegistry_Proxy.json new file mode 100644 index 0000000000..5c12b327bf --- /dev/null +++ b/packages/sdk/deployments/mode/AuthoritiesRegistry_Proxy.json @@ -0,0 +1,315 @@ +{ + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "transactionIndex": 1, + "gasUsed": "2296435", + "logsBloom": "0x00000000000000800000000000000000404000000000000000a00000000200000000000000000000000010000000000000100000100000000000000000000004000000000000000000000000000002000001000000000000000000000000000000000000020000000100000000000800000000800000000000000000000000400000000000000000000280000000000000000000000080000000000800c000010000000000000000000000000004000800000000000000000000001000000000000000200000000000400000000400001000000004000000000000000000a0000000000001000000020000000000000000000000000000000000000000000000", + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7", + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000005d74800e977bfc8e14eca28c9405bacbd091738e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0x2b94E2F29f6970144A42F56cA1206Aab00EA650D", + "topics": [ + "0x8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76", + "0x000000000000000000000000c3cec17c135d3c5d6badc284aff08f396447daac", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0x2b94E2F29f6970144A42F56cA1206Aab00EA650D", + "topics": [ + "0xa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198", + "0x000000000000000000000000c3cec17c135d3c5d6badc284aff08f396447daac", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0x2b94E2F29f6970144A42F56cA1206Aab00EA650D", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "logIndex": 5, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 6, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + }, + { + "transactionIndex": 1, + "blockNumber": 2097677, + "transactionHash": "0xa683b59f4a4de802f62d20ee5715220127496908f078e9d49015c531a4653efb", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 7, + "blockHash": "0x0912fffa3d27290787f18b499c72896a59f4c07bf35a54c1b8e76011723b8ca7" + } + ], + "blockNumber": 2097677, + "cumulativeGasUsed": "2348936", + "status": 1, + "byzantium": true + }, + "args": [ + "0x5d74800e977bFc8E14Eca28C9405BacbD091738E", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xc4d66de80000000000000000000000009b506a03bbff2a842866b10bc6732da72640cd45" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/CErc20Delegate.json b/packages/sdk/deployments/mode/CErc20Delegate.json new file mode 100644 index 0000000000..8e6c6a236f --- /dev/null +++ b/packages/sdk/deployments/mode/CErc20Delegate.json @@ -0,0 +1,2474 @@ +{ + "address": "0xb3788b3C421348E43beEa88551acC16d2f6a6332", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "AccrueInterest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "Borrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "LiquidateBorrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256" + } + ], + "name": "NewIonicFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "NewMarketInterestRateModel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "NewReserveFactor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "Redeem", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "RepayBorrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "benefactor", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesReduced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "_becomeImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "selfTransferOut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x76f6ed9dcbf2def85ac742c79e579552b17a31ae86c7115d91280c058a19ca04", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xb3788b3C421348E43beEa88551acC16d2f6a6332", + "transactionIndex": 1, + "gasUsed": "3796660", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xaac6cf569cca6066a67d9de8b4241206ace67bd8f03989f0d669d3cd2aa218cc", + "transactionHash": "0x76f6ed9dcbf2def85ac742c79e579552b17a31ae86c7115d91280c058a19ca04", + "logs": [], + "blockNumber": 2067103, + "cumulativeGasUsed": "3843573", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Borrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "LiquidateBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "redeemer", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Redeem", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "RepayBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "benefactor", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesReduced", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferOut" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_withdrawAdminFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_withdrawIonicFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrow(uint256)": { + "params": { + "borrowAmount": "The amount of the underlying asset to borrow" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "getCash()": { + "returns": { + "_0": "The quantity of underlying asset owned by this contract" + } + }, + "liquidateBorrow(address,uint256,address)": { + "params": { + "borrower": "The borrower of this cToken to be liquidated", + "cTokenCollateral": "The market in which to seize collateral from the borrower", + "repayAmount": "The amount of the underlying borrowed asset to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "mint(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "mintAmount": "The amount of the underlying asset to supply" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeem(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemTokens": "The number of cTokens to redeem into underlying" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeemUnderlying(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemAmount": "The amount of underlying to redeem" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrow(uint256)": { + "params": { + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrowBehalf(address,uint256)": { + "params": { + "borrower": "the account with the debt being payed off", + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "seize(address,address,uint256)": { + "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.", + "params": { + "borrower": "The account having collateral seized", + "liquidator": "The account receiving seized collateral", + "seizeTokens": "The number of cTokens to seize" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_becomeImplementation(bytes)": { + "notice": "Called by the delegator on a delegate to initialize it for duty" + }, + "_withdrawAdminFees(uint256)": { + "notice": "Accrues interest and reduces admin fees by transferring to admin" + }, + "_withdrawIonicFees(uint256)": { + "notice": "Accrues interest and reduces Ionic fees by transferring to Ionic" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "borrow(uint256)": { + "notice": "Sender borrows assets from the protocol to their own address" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "getCash()": { + "notice": "Get cash balance of this cToken in the underlying asset" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "liquidateBorrow(address,uint256,address)": { + "notice": "The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator." + }, + "mint(uint256)": { + "notice": "Sender supplies assets into the market and receives cTokens in exchange" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "redeem(uint256)": { + "notice": "Sender redeems cTokens in exchange for the underlying asset" + }, + "redeemUnderlying(uint256)": { + "notice": "Sender redeems cTokens in exchange for a specified amount of underlying asset" + }, + "repayBorrow(uint256)": { + "notice": "Sender repays their own borrow" + }, + "repayBorrowBehalf(address,uint256)": { + "notice": "Sender repays a borrow belonging to borrower" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "seize(address,address,uint256)": { + "notice": "Transfers collateral tokens (this market) to the liquidator." + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CErc20Delegate.sol": "CErc20Delegate" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506143bc806100206000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806389f8132e11610125578063b2a02ff1116100ad578063c91a424f1161007c578063c91a424f14610421578063cb2ef6f714610434578063db006a751461045e578063f3fdb15a14610471578063f5e3c4621461048457600080fd5b8063b2a02ff1146103e3578063be99f119146103f6578063c3bf11cd14610405578063c5ebeaec1461040e57600080fd5b80639826394b116100f45780639826394b14610398578063a0712d68146103a1578063a7b820df146103b4578063aa5af0fd146103c7578063b0d58e49146103d057600080fd5b806389f8132e146103695780638d02d9a11461037e5780638f840ddd1461038757806395d89b411461039057600080fd5b80633b1d21a2116101a857806361feacff1161017757806361feacff146103235780636752e7021461032c5780636c540baf1461033a5780636f307dc314610343578063852a12e31461035657600080fd5b80633b1d21a2146102cf57806347bd3718146102d757806356e67728146102e05780635fe3b567146102f357600080fd5b8063173b9904116101ef578063173b99041461028857806318160ddd146102915780632608f8181461029a5780632c436e5b146102ad578063313ce567146102c257600080fd5b8063067db1b31461022157806306fdde03146102365780630e75270214610254578063135f133414610275575b600080fd5b61023461022f366004613f01565b610497565b005b61023e6104e1565b60405161024b9190613f59565b60405180910390f35b610267610262366004613f8c565b61056f565b60405190815260200161024b565b610267610283366004613f01565b61062c565b61026760085481565b610267600f5481565b6102676102a8366004613f01565b610678565b60015b60405160ff909116815260200161024b565b6003546102b09060ff1681565b610267610737565b610267600b5481565b6102346102ee366004613fbb565b610746565b60035461030b9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b610267600d5481565b610267666379da05b6000081565b61026760095481565b60135461030b906001600160a01b031681565b610267610364366004613f8c565b610798565b61037161084b565b60405161024b919061406c565b61026760065481565b610267600c5481565b61023e610a53565b610267600e5481565b6102676103af366004613f8c565b610a60565b6102676103c2366004613f8c565b610b15565b610267600a5481565b6102676103de366004613f8c565b610c73565b6102676103f13660046140ba565b610d66565b61026767016345785d8a000081565b61026760075481565b61026761041c366004613f8c565b610d8a565b60005461030b906001600160a01b031681565b60408051808201909152600e81526d43457263323044656c656761746560901b602082015261023e565b61026761046c366004613f8c565b610e3d565b60045461030b906001600160a01b031681565b6102676104923660046140fb565b610ef0565b3330146104d35760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b6104dd8282610fb3565b5050565b600180546104ee9061413d565b80601f016020809104026020016040519081016040528092919081815260200182805461051a9061413d565b80156105675780601f1061053c57610100808354040283529160200191610567565b820191906000526020600020905b81548152906001019060200180831161054a57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105bc9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa1580156105d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fd91906141a5565b6106195760405162461bcd60e51b81526004016104ca906141c7565b600061062483611034565b509392505050565b60003330146106655760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104ca565b61066f83836110c5565b90505b92915050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106c59261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa1580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070691906141a5565b6107225760405162461bcd60e51b81526004016104ca906141c7565b600061072e8484611298565b50949350505050565b600061074161132b565b905090565b333014806107575750610757611398565b6107955760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b60448201526064016104ca565b50565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926107e59261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610802573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082691906141a5565b6108425760405162461bcd60e51b81526004016104ca906141c7565b61067282611515565b606060036000610859611592565b90508160ff16815161086b9190614205565b67ffffffffffffffff81111561088357610883613fa5565b6040519080825280602002602001820160405280156108ac578160200160208202803683370190505b50925060005b8151811015610912578181815181106108cd576108cd61421d565b60200260200101518482815181106108e7576108e761421d565b6001600160e01b0319909216602092830291909101909101528061090a81614233565b9150506108b2565b50805163cb2ef6f760e01b9084906109298561424e565b94506109389060ff8616614205565b815181106109485761094861421d565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b9084906109778561424e565b94506109869060ff8616614205565b815181106109965761099661421d565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b9084906109c58561424e565b94506109d49060ff8616614205565b815181106109e4576109e461421d565b6001600160e01b03199092166020928302919091019091015260ff821615610a4e5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104ca565b505090565b600280546104ee9061413d565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610aad9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee91906141a5565b610b0a5760405162461bcd60e51b81526004016104ca906141c7565b60006106248361195a565b600080610b21816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b85919061426b565b504360095414610ba257610b9b600a6039611a9b565b9150610c64565b82610bab61132b565b1015610bbd57610b9b600e6038611a9b565b600d54831115610bd357610b9b6002603a611a9b565b82600d54610be19190614284565b600d55600354604080516303e1469160e61b81529051610c5e9261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c58919061429b565b84610fb3565b60005b91505b610c6d81611b14565b50919050565b600080610c7f816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce3919061426b565b504360095414610cf957610b9b600a6035611a9b565b82610d0261132b565b1015610d1457610b9b600e6034611a9b565b600e54831115610d2a57610b9b60026036611a9b565b600083600e54610d3a9190614284565b600e819055600054909150610d58906001600160a01b031685610fb3565b6000925050610c6d81611b14565b60006001610d73816119d7565b610d7f33868686611b97565b915061062481611b14565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610dd79261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1891906141a5565b610e345760405162461bcd60e51b81526004016104ca906141c7565b61067282612082565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610e8a9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb91906141a5565b610ee75760405162461bcd60e51b81526004016104ca906141c7565b610672826120fd565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f3d9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e91906141a5565b610f9a5760405162461bcd60e51b81526004016104ca906141c7565b6000610fa785858561217a565b509150505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091018252602080820180516001600160e01b031663a9059cbb60e01b1790528251808401909352601983527f544f4b454e5f5452414e534645525f4f55545f4641494c454400000000000000908301526104dd91612274565b6000806000611042816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a6919061426b565b506110b23333866122d2565b925092506110bf81611b14565b50915091565b6013546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611136919061426b565b90506111c66323b872dd60e01b853086604051602401611158939291906142ce565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280601881526020017f544f4b454e5f5452414e534645525f494e5f4641494c45440000000000000000815250612274565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611233919061426b565b9050818110156112855760405162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f5700000000000060448201526064016104ca565b61128f8282614284565b95945050505050565b60008060006112a6816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a919061426b565b506113163386866122d2565b9250925061132381611b14565b509250929050565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611374573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610741919061426b565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611415919061429b565b6001600160a01b0316336001600160a01b03161480156114925750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149291906141a5565b8061150f57506000546001600160a01b03163314801561150f5750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f91906141a5565b91505090565b600080611521816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611585919061426b565b50610c61336000856126e1565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b816115ce8461424e565b93508360ff16815181106115e4576115e461421d565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b8161160f8461424e565b93508360ff16815181106116255761162561421d565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b816116508461424e565b93508360ff16815181106116665761166661421d565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b816116918461424e565b93508360ff16815181106116a7576116a761421d565b6001600160e01b03199092166020928302919091019091015263073a938160e11b816116d28461424e565b93508360ff16815181106116e8576116e861421d565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b816117138461424e565b93508360ff16815181106117295761172961421d565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b816117548461424e565b93508360ff168151811061176a5761176a61421d565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b816117958461424e565b93508360ff16815181106117ab576117ab61421d565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b816117d68461424e565b93508360ff16815181106117ec576117ec61421d565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816118178461424e565b93508360ff168151811061182d5761182d61421d565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816118588461424e565b93508360ff168151811061186e5761186e61421d565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816118998461424e565b93508360ff16815181106118af576118af61421d565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b816118da8461424e565b93508360ff16815181106118f0576118f061421d565b6001600160e01b03199092166020928302919091019091015260ff8216156106725760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104ca565b6000806000611968816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc919061426b565b506110b23385612d29565b600054600160a01b900460ff16611a1d5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016104ca565b80611a8b57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611ad057611ad06142b8565b836061811115611ae257611ae26142b8565b60408051928352602083019190915260009082015260600160405180910390a182601181111561066f5761066f6142b8565b6000805460ff60a01b1916600160a01b1790558061079557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7c57600080fd5b505af1158015611b90573d6000803e3d6000fd5b5050505050565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f919061426b565b90508015611c4c57611c446003601d83613134565b91505061207a565b846001600160a01b0316846001600160a01b03161415611c7257611c446006601e611a9b565b611cd7604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611cfa90856131d6565b6020830181905282826003811115611d1457611d146142b8565b6003811115611d2557611d256142b8565b9052506000905081516003811115611d3f57611d3f6142b8565b14611d6f57611d666009601c83600001516003811115611d6157611d616142b8565b613134565b9250505061207a565b611d8e846040518060200160405280666379da05b60000815250613201565b6080820152604080516020810190915267016345785d8a00008152611db4908590613201565b61014082018190526080820151611dcb9086614284565b611dd59190614284565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c919061426b565b60c082019081526040805160208101909152905181526080820151611e619190613224565b60a0820152604080516020810190915260c08201518152610140820151611e889190613224565b61016082015260a0810151600c54611ea09190614205565b60e08201526101408101516080820151600f54611ebd9190614284565b611ec79190614284565b610120820152610160810151600e54611ee09190614205565b6101008201526001600160a01b0386166000908152601060205260409020546060820151611f0e919061323c565b6040830181905282826003811115611f2857611f286142b8565b6003811115611f3957611f396142b8565b9052506000905081516003811115611f5357611f536142b8565b14611f7557611d666009601b83600001516003811115611d6157611d616142b8565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b1680825290849020929092556060850151925192835290929091600080516020614390833981519152910160405180910390a3306001600160a01b0316856001600160a01b0316600080516020614390833981519152836080015160405161202291815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061208e816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f2919061426b565b50610c613384613262565b600080612109816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216d919061426b565b50610c61338460006126e1565b6000806000612188816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156121c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ec919061426b565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561222d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612251919061426b565b5061225e338787876135fd565b9250925061226b81611b14565b50935093915050565b60135460009061228e906001600160a01b03168484613aba565b8051909150156122cd57808060200190518101906122ac91906141a5565b82906122cb5760405162461bcd60e51b81526004016104ca9190613f59565b505b505050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af1158015612340573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612364919061426b565b90508015612385576123796003604383613134565b600092509250506126d9565b436009541461239a57612379600a6044611a9b565b6123e36040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa15801561244d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612471919061426b565b608082015260001985141561248f5760808101516040820152612497565b604081018590525b6124a58782604001516110c5565b60e0820181905260808201516124ba916131d6565b60a08301819052602083018260038111156124d7576124d76142b8565b60038111156124e8576124e86142b8565b9052506000905081602001516003811115612505576125056142b8565b146125785760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c454400000000000060648201526084016104ca565b612588600b548260e001516131d6565b60c08301819052602083018260038111156125a5576125a56142b8565b60038111156125b6576125b66142b8565b90525060009050816020015160038111156125d3576125d36142b8565b1461263a5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b60648201526084016104ca565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b60008215806126ee575081155b61273a5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e74000000000000000060448201526064016104ca565b61277b6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd919061426b565b604082015283156128a05761138884600f546127f99190614284565b101561280557600f5493505b60608101849052604080516020810182529082015181526128269085613b4d565b6080830181905260208301826003811115612843576128436142b8565b6003811115612854576128546142b8565b9052506000905081602001516003811115612871576128716142b8565b1461289b576128936009602c83602001516003811115611d6157611d616142b8565b915050610fac565b6129e8565b60001983141561292e57600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292b919061426b565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561296e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612992919061426b565b90506103e86129a18583614284565b10156129ab578093505b6129b9848360400151613b9f565b60608301819052600f546103e8916129d091614284565b10156129df57600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612a269130918b91906004016142ce565b6020604051808303816000875af1158015612a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a69919061426b565b90508015612a8757612a7e6003602b83613134565b92505050610fac565b4360095414612a9c57612a7e600a602f611a9b565b612aac600f5483606001516131d6565b60a0840181905260208401826003811115612ac957612ac96142b8565b6003811115612ada57612ada6142b8565b9052506000905082602001516003811115612af757612af76142b8565b14612b1957612a7e6009603184602001516003811115611d6157611d616142b8565b6001600160a01b0386166000908152601060205260409020546060830151612b4191906131d6565b60c0840181905260208401826003811115612b5e57612b5e6142b8565b6003811115612b6f57612b6f6142b8565b9052506000905082602001516003811115612b8c57612b8c6142b8565b14612bae57612a7e6009603084602001516003811115611d6157611d616142b8565b8160800151612bbb61132b565b1015612bcd57612a7e600e6032611a9b565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612c03908790610fb3565b306001600160a01b0316866001600160a01b03166000805160206143908339815191528460600151604051612c3a91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612cfe57600080fd5b505af1158015612d12573d6000803e3d6000fd5b5060009250612d1f915050565b9695505050505050565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e190612d67903090899089906004016142ce565b6020604051808303816000875af1158015612d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612daa919061426b565b90508015612dcb57612dbf6003602183613134565b6000925092505061312d565b4360095414612de057612dbf600a6024611a9b565b612e216040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e83919061426b565b6040820152612e9286866110c5565b60c0820181905260408051602081018252908301518152612eb39190613bda565b6060830181905260208301826003811115612ed057612ed06142b8565b6003811115612ee157612ee16142b8565b9052506000905081602001516003811115612efe57612efe6142b8565b14612f4b5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c454460448201526064016104ca565b6000816060015111612f9f5760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a454354454400000000000060448201526064016104ca565b8060600151600f54612fb19190614205565b608082015260608101516001600160a01b038716600090815260106020526040902054612fde9190614205565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b0316600080516020614390833981519152836060015160405161308d91815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561310057600080fd5b505af1158015613114573d6000803e3d6000fd5b5060009250613121915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0846011811115613169576131696142b8565b84606181111561317b5761317b6142b8565b604080519283526020830191909152810184905260600160405180910390a160038460118111156131ae576131ae6142b8565b146131ca578360118111156131c5576131c56142b8565b61207a565b61207a826103e8614205565b6000808383116131f55760006131ec8486614284565b9150915061312d565b5060039050600061312d565b6000670de0b6b3a764000061321a848460000151613bea565b61066f9190614308565b6000806132318484613c2c565b905061207a81613c5d565b6000808383018481106132545760009250905061312d565b60026000925092505061312d565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c9061329f903090889088906004016142ce565b6020604051808303816000875af11580156132be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e2919061426b565b905080156132ff576132f76003601083613134565b915050610672565b4360095414613314576132f7600a600c611a9b565b600061331e61132b565b90508381101561333d57613334600e600b611a9b565b92505050610672565b613369604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d6919061426b565b602082018190526133e7908661323c565b6040830181905282826003811115613401576134016142b8565b6003811115613412576134126142b8565b905250600090508151600381111561342c5761342c6142b8565b146134585761344e6009600e83600001516003811115611d6157611d616142b8565b9350505050610672565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156134b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d5919061426b565b925082156134ea5761344e6003601085613134565b6134f6600b548661323c565b6060830181905282826003811115613510576135106142b8565b6003811115613521576135216142b8565b905250600090508151600381111561353b5761353b6142b8565b1461355d5761344e6009600d83600001516003811115611d6157611d616142b8565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b556135998686610fb3565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613673573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613697919061426b565b905080156136b8576136ac6003601483613134565b60009250925050613ab1565b43600954146136cd576136ac600a6018611a9b565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561370c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613730919061426b565b14613741576136ac600a6013611a9b565b866001600160a01b0316866001600160a01b03161415613767576136ac60066019611a9b565b84613778576136ac60076017611a9b565b60001985141561378e576136ac60076016611a9b565b60008061379c8989896122d2565b909250905081156137d1576137c38260118111156137bc576137bc6142b8565b601a611a9b565b600094509450505050613ab1565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b9061380e9030908c9088906004016142ce565b6040805180830381865afa15801561382a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384e919061431c565b909250905081156138bd5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016104ca565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392a919061426b565b10156139785760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016104ca565b60006001600160a01b03891630141561399e57613997308d8d85611b97565b9050613a14565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff1906139ce908f908f9087906004016142ce565b6020604051808303816000875af11580156139ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a11919061426b565b90505b8015613a4b5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b60448201526064016104ca565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b6060600080856001600160a01b031685604051613ad79190614340565b6000604051808303816000865af19150503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b50915091508161128f57805115613b335780518082602001fd5b8360405162461bcd60e51b81526004016104ca9190613f59565b600080600080613b5d8686613c75565b90925090506000826003811115613b7657613b766142b8565b14613b87575091506000905061312d565b6000613b9282613c5d565b9350935050509250929050565b600081613bb484670de0b6b3a764000061435c565b613bbe9190614308565b9050613bca828461437b565b156106725761066f600182614205565b600080600080613b5d8686613cf1565b600061066f83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613d64565b6040805160208101909152600081526040518060200160405280613c54856000015185613bea565b90529392505050565b805160009061067290670de0b6b3a764000090614308565b6000613c8d6040518060200160405280600081525090565b600080613c9e866000015186613db7565b90925090506000826003811115613cb757613cb76142b8565b14613cd65750604080516020810190915260008152909250905061312d565b60408051602081019091529081526000969095509350505050565b6000613d096040518060200160405280600081525090565b600080613d1e670de0b6b3a764000087613db7565b90925090506000826003811115613d3757613d376142b8565b14613d565750604080516020810190915260008152909250905061312d565b613b92818660000151613df6565b6000831580613d71575082155b15613d7e57506000610fac565b6000613d8a848661435c565b905083613d978683614308565b14839061072e5760405162461bcd60e51b81526004016104ca9190613f59565b60008083613dca5750600090508061312d565b83830283613dd88683614308565b14613deb5760026000925092505061312d565b60009250905061312d565b6000613e0e6040518060200160405280600081525090565b600080613e2386670de0b6b3a7640000613db7565b90925090506000826003811115613e3c57613e3c6142b8565b14613e5b5750604080516020810190915260008152909250905061312d565b600080613e688388613ec1565b90925090506000826003811115613e8157613e816142b8565b14613ea4578160405180602001604052806000815250955095505050505061312d565b604080516020810190915290815260009890975095505050505050565b60008082613ed5575060019050600061312d565b6000613ee18486614308565b915091509250929050565b6001600160a01b038116811461079557600080fd5b60008060408385031215613f1457600080fd5b8235613f1f81613eec565b946020939093013593505050565b60005b83811015613f48578181015183820152602001613f30565b838111156122cb5750506000910152565b6020815260008251806020840152613f78816040850160208701613f2d565b601f01601f19169190910160400192915050565b600060208284031215613f9e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613fcd57600080fd5b813567ffffffffffffffff80821115613fe557600080fd5b818401915084601f830112613ff957600080fd5b81358181111561400b5761400b613fa5565b604051601f8201601f19908116603f0116810190838211818310171561403357614033613fa5565b8160405282815287602084870101111561404c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b818110156140ae5783516001600160e01b03191683529284019291840191600101614088565b50909695505050505050565b6000806000606084860312156140cf57600080fd5b83356140da81613eec565b925060208401356140ea81613eec565b929592945050506040919091013590565b60008060006060848603121561411057600080fd5b833561411b81613eec565b925060208401359150604084013561413281613eec565b809150509250925092565b600181811c9082168061415157607f821691505b60208210811415610c6d57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000602082840312156141b757600080fd5b81518015158114610fac57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614218576142186141ef565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614247576142476141ef565b5060010190565b600060ff821680614261576142616141ef565b6000190192915050565b60006020828403121561427d57600080fd5b5051919050565b600082821015614296576142966141ef565b500390565b6000602082840312156142ad57600080fd5b8151610fac81613eec565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082614317576143176142f2565b500490565b6000806040838503121561432f57600080fd5b505080516020909101519092909150565b60008251614352818460208701613f2d565b9190910192915050565b6000816000190483118215151615614376576143766141ef565b500290565b60008261438a5761438a6142f2565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "234:1279:5:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061021c5760003560e01c806389f8132e11610125578063b2a02ff1116100ad578063c91a424f1161007c578063c91a424f14610421578063cb2ef6f714610434578063db006a751461045e578063f3fdb15a14610471578063f5e3c4621461048457600080fd5b8063b2a02ff1146103e3578063be99f119146103f6578063c3bf11cd14610405578063c5ebeaec1461040e57600080fd5b80639826394b116100f45780639826394b14610398578063a0712d68146103a1578063a7b820df146103b4578063aa5af0fd146103c7578063b0d58e49146103d057600080fd5b806389f8132e146103695780638d02d9a11461037e5780638f840ddd1461038757806395d89b411461039057600080fd5b80633b1d21a2116101a857806361feacff1161017757806361feacff146103235780636752e7021461032c5780636c540baf1461033a5780636f307dc314610343578063852a12e31461035657600080fd5b80633b1d21a2146102cf57806347bd3718146102d757806356e67728146102e05780635fe3b567146102f357600080fd5b8063173b9904116101ef578063173b99041461028857806318160ddd146102915780632608f8181461029a5780632c436e5b146102ad578063313ce567146102c257600080fd5b8063067db1b31461022157806306fdde03146102365780630e75270214610254578063135f133414610275575b600080fd5b61023461022f366004613f01565b610497565b005b61023e6104e1565b60405161024b9190613f59565b60405180910390f35b610267610262366004613f8c565b61056f565b60405190815260200161024b565b610267610283366004613f01565b61062c565b61026760085481565b610267600f5481565b6102676102a8366004613f01565b610678565b60015b60405160ff909116815260200161024b565b6003546102b09060ff1681565b610267610737565b610267600b5481565b6102346102ee366004613fbb565b610746565b60035461030b9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b610267600d5481565b610267666379da05b6000081565b61026760095481565b60135461030b906001600160a01b031681565b610267610364366004613f8c565b610798565b61037161084b565b60405161024b919061406c565b61026760065481565b610267600c5481565b61023e610a53565b610267600e5481565b6102676103af366004613f8c565b610a60565b6102676103c2366004613f8c565b610b15565b610267600a5481565b6102676103de366004613f8c565b610c73565b6102676103f13660046140ba565b610d66565b61026767016345785d8a000081565b61026760075481565b61026761041c366004613f8c565b610d8a565b60005461030b906001600160a01b031681565b60408051808201909152600e81526d43457263323044656c656761746560901b602082015261023e565b61026761046c366004613f8c565b610e3d565b60045461030b906001600160a01b031681565b6102676104923660046140fb565b610ef0565b3330146104d35760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b6104dd8282610fb3565b5050565b600180546104ee9061413d565b80601f016020809104026020016040519081016040528092919081815260200182805461051a9061413d565b80156105675780601f1061053c57610100808354040283529160200191610567565b820191906000526020600020905b81548152906001019060200180831161054a57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105bc9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa1580156105d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fd91906141a5565b6106195760405162461bcd60e51b81526004016104ca906141c7565b600061062483611034565b509392505050565b60003330146106655760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104ca565b61066f83836110c5565b90505b92915050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106c59261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa1580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070691906141a5565b6107225760405162461bcd60e51b81526004016104ca906141c7565b600061072e8484611298565b50949350505050565b600061074161132b565b905090565b333014806107575750610757611398565b6107955760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b60448201526064016104ca565b50565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926107e59261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610802573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082691906141a5565b6108425760405162461bcd60e51b81526004016104ca906141c7565b61067282611515565b606060036000610859611592565b90508160ff16815161086b9190614205565b67ffffffffffffffff81111561088357610883613fa5565b6040519080825280602002602001820160405280156108ac578160200160208202803683370190505b50925060005b8151811015610912578181815181106108cd576108cd61421d565b60200260200101518482815181106108e7576108e761421d565b6001600160e01b0319909216602092830291909101909101528061090a81614233565b9150506108b2565b50805163cb2ef6f760e01b9084906109298561424e565b94506109389060ff8616614205565b815181106109485761094861421d565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b9084906109778561424e565b94506109869060ff8616614205565b815181106109965761099661421d565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b9084906109c58561424e565b94506109d49060ff8616614205565b815181106109e4576109e461421d565b6001600160e01b03199092166020928302919091019091015260ff821615610a4e5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104ca565b505090565b600280546104ee9061413d565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610aad9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee91906141a5565b610b0a5760405162461bcd60e51b81526004016104ca906141c7565b60006106248361195a565b600080610b21816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b85919061426b565b504360095414610ba257610b9b600a6039611a9b565b9150610c64565b82610bab61132b565b1015610bbd57610b9b600e6038611a9b565b600d54831115610bd357610b9b6002603a611a9b565b82600d54610be19190614284565b600d55600354604080516303e1469160e61b81529051610c5e9261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c58919061429b565b84610fb3565b60005b91505b610c6d81611b14565b50919050565b600080610c7f816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce3919061426b565b504360095414610cf957610b9b600a6035611a9b565b82610d0261132b565b1015610d1457610b9b600e6034611a9b565b600e54831115610d2a57610b9b60026036611a9b565b600083600e54610d3a9190614284565b600e819055600054909150610d58906001600160a01b031685610fb3565b6000925050610c6d81611b14565b60006001610d73816119d7565b610d7f33868686611b97565b915061062481611b14565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610dd79261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1891906141a5565b610e345760405162461bcd60e51b81526004016104ca906141c7565b61067282612082565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610e8a9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb91906141a5565b610ee75760405162461bcd60e51b81526004016104ca906141c7565b610672826120fd565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f3d9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e91906141a5565b610f9a5760405162461bcd60e51b81526004016104ca906141c7565b6000610fa785858561217a565b509150505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091018252602080820180516001600160e01b031663a9059cbb60e01b1790528251808401909352601983527f544f4b454e5f5452414e534645525f4f55545f4641494c454400000000000000908301526104dd91612274565b6000806000611042816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a6919061426b565b506110b23333866122d2565b925092506110bf81611b14565b50915091565b6013546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611136919061426b565b90506111c66323b872dd60e01b853086604051602401611158939291906142ce565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280601881526020017f544f4b454e5f5452414e534645525f494e5f4641494c45440000000000000000815250612274565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611233919061426b565b9050818110156112855760405162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f5700000000000060448201526064016104ca565b61128f8282614284565b95945050505050565b60008060006112a6816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a919061426b565b506113163386866122d2565b9250925061132381611b14565b509250929050565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611374573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610741919061426b565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611415919061429b565b6001600160a01b0316336001600160a01b03161480156114925750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149291906141a5565b8061150f57506000546001600160a01b03163314801561150f5750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f91906141a5565b91505090565b600080611521816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611585919061426b565b50610c61336000856126e1565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b816115ce8461424e565b93508360ff16815181106115e4576115e461421d565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b8161160f8461424e565b93508360ff16815181106116255761162561421d565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b816116508461424e565b93508360ff16815181106116665761166661421d565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b816116918461424e565b93508360ff16815181106116a7576116a761421d565b6001600160e01b03199092166020928302919091019091015263073a938160e11b816116d28461424e565b93508360ff16815181106116e8576116e861421d565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b816117138461424e565b93508360ff16815181106117295761172961421d565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b816117548461424e565b93508360ff168151811061176a5761176a61421d565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b816117958461424e565b93508360ff16815181106117ab576117ab61421d565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b816117d68461424e565b93508360ff16815181106117ec576117ec61421d565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816118178461424e565b93508360ff168151811061182d5761182d61421d565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816118588461424e565b93508360ff168151811061186e5761186e61421d565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816118998461424e565b93508360ff16815181106118af576118af61421d565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b816118da8461424e565b93508360ff16815181106118f0576118f061421d565b6001600160e01b03199092166020928302919091019091015260ff8216156106725760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104ca565b6000806000611968816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc919061426b565b506110b23385612d29565b600054600160a01b900460ff16611a1d5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016104ca565b80611a8b57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611ad057611ad06142b8565b836061811115611ae257611ae26142b8565b60408051928352602083019190915260009082015260600160405180910390a182601181111561066f5761066f6142b8565b6000805460ff60a01b1916600160a01b1790558061079557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7c57600080fd5b505af1158015611b90573d6000803e3d6000fd5b5050505050565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f919061426b565b90508015611c4c57611c446003601d83613134565b91505061207a565b846001600160a01b0316846001600160a01b03161415611c7257611c446006601e611a9b565b611cd7604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611cfa90856131d6565b6020830181905282826003811115611d1457611d146142b8565b6003811115611d2557611d256142b8565b9052506000905081516003811115611d3f57611d3f6142b8565b14611d6f57611d666009601c83600001516003811115611d6157611d616142b8565b613134565b9250505061207a565b611d8e846040518060200160405280666379da05b60000815250613201565b6080820152604080516020810190915267016345785d8a00008152611db4908590613201565b61014082018190526080820151611dcb9086614284565b611dd59190614284565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c919061426b565b60c082019081526040805160208101909152905181526080820151611e619190613224565b60a0820152604080516020810190915260c08201518152610140820151611e889190613224565b61016082015260a0810151600c54611ea09190614205565b60e08201526101408101516080820151600f54611ebd9190614284565b611ec79190614284565b610120820152610160810151600e54611ee09190614205565b6101008201526001600160a01b0386166000908152601060205260409020546060820151611f0e919061323c565b6040830181905282826003811115611f2857611f286142b8565b6003811115611f3957611f396142b8565b9052506000905081516003811115611f5357611f536142b8565b14611f7557611d666009601b83600001516003811115611d6157611d616142b8565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b1680825290849020929092556060850151925192835290929091600080516020614390833981519152910160405180910390a3306001600160a01b0316856001600160a01b0316600080516020614390833981519152836080015160405161202291815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061208e816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f2919061426b565b50610c613384613262565b600080612109816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216d919061426b565b50610c61338460006126e1565b6000806000612188816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156121c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ec919061426b565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561222d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612251919061426b565b5061225e338787876135fd565b9250925061226b81611b14565b50935093915050565b60135460009061228e906001600160a01b03168484613aba565b8051909150156122cd57808060200190518101906122ac91906141a5565b82906122cb5760405162461bcd60e51b81526004016104ca9190613f59565b505b505050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af1158015612340573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612364919061426b565b90508015612385576123796003604383613134565b600092509250506126d9565b436009541461239a57612379600a6044611a9b565b6123e36040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa15801561244d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612471919061426b565b608082015260001985141561248f5760808101516040820152612497565b604081018590525b6124a58782604001516110c5565b60e0820181905260808201516124ba916131d6565b60a08301819052602083018260038111156124d7576124d76142b8565b60038111156124e8576124e86142b8565b9052506000905081602001516003811115612505576125056142b8565b146125785760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c454400000000000060648201526084016104ca565b612588600b548260e001516131d6565b60c08301819052602083018260038111156125a5576125a56142b8565b60038111156125b6576125b66142b8565b90525060009050816020015160038111156125d3576125d36142b8565b1461263a5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b60648201526084016104ca565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b60008215806126ee575081155b61273a5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e74000000000000000060448201526064016104ca565b61277b6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd919061426b565b604082015283156128a05761138884600f546127f99190614284565b101561280557600f5493505b60608101849052604080516020810182529082015181526128269085613b4d565b6080830181905260208301826003811115612843576128436142b8565b6003811115612854576128546142b8565b9052506000905081602001516003811115612871576128716142b8565b1461289b576128936009602c83602001516003811115611d6157611d616142b8565b915050610fac565b6129e8565b60001983141561292e57600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292b919061426b565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561296e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612992919061426b565b90506103e86129a18583614284565b10156129ab578093505b6129b9848360400151613b9f565b60608301819052600f546103e8916129d091614284565b10156129df57600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612a269130918b91906004016142ce565b6020604051808303816000875af1158015612a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a69919061426b565b90508015612a8757612a7e6003602b83613134565b92505050610fac565b4360095414612a9c57612a7e600a602f611a9b565b612aac600f5483606001516131d6565b60a0840181905260208401826003811115612ac957612ac96142b8565b6003811115612ada57612ada6142b8565b9052506000905082602001516003811115612af757612af76142b8565b14612b1957612a7e6009603184602001516003811115611d6157611d616142b8565b6001600160a01b0386166000908152601060205260409020546060830151612b4191906131d6565b60c0840181905260208401826003811115612b5e57612b5e6142b8565b6003811115612b6f57612b6f6142b8565b9052506000905082602001516003811115612b8c57612b8c6142b8565b14612bae57612a7e6009603084602001516003811115611d6157611d616142b8565b8160800151612bbb61132b565b1015612bcd57612a7e600e6032611a9b565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612c03908790610fb3565b306001600160a01b0316866001600160a01b03166000805160206143908339815191528460600151604051612c3a91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612cfe57600080fd5b505af1158015612d12573d6000803e3d6000fd5b5060009250612d1f915050565b9695505050505050565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e190612d67903090899089906004016142ce565b6020604051808303816000875af1158015612d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612daa919061426b565b90508015612dcb57612dbf6003602183613134565b6000925092505061312d565b4360095414612de057612dbf600a6024611a9b565b612e216040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e83919061426b565b6040820152612e9286866110c5565b60c0820181905260408051602081018252908301518152612eb39190613bda565b6060830181905260208301826003811115612ed057612ed06142b8565b6003811115612ee157612ee16142b8565b9052506000905081602001516003811115612efe57612efe6142b8565b14612f4b5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c454460448201526064016104ca565b6000816060015111612f9f5760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a454354454400000000000060448201526064016104ca565b8060600151600f54612fb19190614205565b608082015260608101516001600160a01b038716600090815260106020526040902054612fde9190614205565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b0316600080516020614390833981519152836060015160405161308d91815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561310057600080fd5b505af1158015613114573d6000803e3d6000fd5b5060009250613121915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0846011811115613169576131696142b8565b84606181111561317b5761317b6142b8565b604080519283526020830191909152810184905260600160405180910390a160038460118111156131ae576131ae6142b8565b146131ca578360118111156131c5576131c56142b8565b61207a565b61207a826103e8614205565b6000808383116131f55760006131ec8486614284565b9150915061312d565b5060039050600061312d565b6000670de0b6b3a764000061321a848460000151613bea565b61066f9190614308565b6000806132318484613c2c565b905061207a81613c5d565b6000808383018481106132545760009250905061312d565b60026000925092505061312d565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c9061329f903090889088906004016142ce565b6020604051808303816000875af11580156132be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e2919061426b565b905080156132ff576132f76003601083613134565b915050610672565b4360095414613314576132f7600a600c611a9b565b600061331e61132b565b90508381101561333d57613334600e600b611a9b565b92505050610672565b613369604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d6919061426b565b602082018190526133e7908661323c565b6040830181905282826003811115613401576134016142b8565b6003811115613412576134126142b8565b905250600090508151600381111561342c5761342c6142b8565b146134585761344e6009600e83600001516003811115611d6157611d616142b8565b9350505050610672565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156134b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d5919061426b565b925082156134ea5761344e6003601085613134565b6134f6600b548661323c565b6060830181905282826003811115613510576135106142b8565b6003811115613521576135216142b8565b905250600090508151600381111561353b5761353b6142b8565b1461355d5761344e6009600d83600001516003811115611d6157611d616142b8565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b556135998686610fb3565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613673573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613697919061426b565b905080156136b8576136ac6003601483613134565b60009250925050613ab1565b43600954146136cd576136ac600a6018611a9b565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561370c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613730919061426b565b14613741576136ac600a6013611a9b565b866001600160a01b0316866001600160a01b03161415613767576136ac60066019611a9b565b84613778576136ac60076017611a9b565b60001985141561378e576136ac60076016611a9b565b60008061379c8989896122d2565b909250905081156137d1576137c38260118111156137bc576137bc6142b8565b601a611a9b565b600094509450505050613ab1565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b9061380e9030908c9088906004016142ce565b6040805180830381865afa15801561382a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384e919061431c565b909250905081156138bd5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016104ca565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392a919061426b565b10156139785760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016104ca565b60006001600160a01b03891630141561399e57613997308d8d85611b97565b9050613a14565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff1906139ce908f908f9087906004016142ce565b6020604051808303816000875af11580156139ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a11919061426b565b90505b8015613a4b5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b60448201526064016104ca565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b6060600080856001600160a01b031685604051613ad79190614340565b6000604051808303816000865af19150503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b50915091508161128f57805115613b335780518082602001fd5b8360405162461bcd60e51b81526004016104ca9190613f59565b600080600080613b5d8686613c75565b90925090506000826003811115613b7657613b766142b8565b14613b87575091506000905061312d565b6000613b9282613c5d565b9350935050509250929050565b600081613bb484670de0b6b3a764000061435c565b613bbe9190614308565b9050613bca828461437b565b156106725761066f600182614205565b600080600080613b5d8686613cf1565b600061066f83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613d64565b6040805160208101909152600081526040518060200160405280613c54856000015185613bea565b90529392505050565b805160009061067290670de0b6b3a764000090614308565b6000613c8d6040518060200160405280600081525090565b600080613c9e866000015186613db7565b90925090506000826003811115613cb757613cb76142b8565b14613cd65750604080516020810190915260008152909250905061312d565b60408051602081019091529081526000969095509350505050565b6000613d096040518060200160405280600081525090565b600080613d1e670de0b6b3a764000087613db7565b90925090506000826003811115613d3757613d376142b8565b14613d565750604080516020810190915260008152909250905061312d565b613b92818660000151613df6565b6000831580613d71575082155b15613d7e57506000610fac565b6000613d8a848661435c565b905083613d978683614308565b14839061072e5760405162461bcd60e51b81526004016104ca9190613f59565b60008083613dca5750600090508061312d565b83830283613dd88683614308565b14613deb5760026000925092505061312d565b60009250905061312d565b6000613e0e6040518060200160405280600081525090565b600080613e2386670de0b6b3a7640000613db7565b90925090506000826003811115613e3c57613e3c6142b8565b14613e5b5750604080516020810190915260008152909250905061312d565b600080613e688388613ec1565b90925090506000826003811115613e8157613e816142b8565b14613ea4578160405180602001604052806000815250955095505050505061312d565b604080516020810190915290815260009890975095505050505050565b60008082613ed5575060019050600061312d565b6000613ee18486614308565b915091509250929050565b6001600160a01b038116811461079557600080fd5b60008060408385031215613f1457600080fd5b8235613f1f81613eec565b946020939093013593505050565b60005b83811015613f48578181015183820152602001613f30565b838111156122cb5750506000910152565b6020815260008251806020840152613f78816040850160208701613f2d565b601f01601f19169190910160400192915050565b600060208284031215613f9e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613fcd57600080fd5b813567ffffffffffffffff80821115613fe557600080fd5b818401915084601f830112613ff957600080fd5b81358181111561400b5761400b613fa5565b604051601f8201601f19908116603f0116810190838211818310171561403357614033613fa5565b8160405282815287602084870101111561404c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b818110156140ae5783516001600160e01b03191683529284019291840191600101614088565b50909695505050505050565b6000806000606084860312156140cf57600080fd5b83356140da81613eec565b925060208401356140ea81613eec565b929592945050506040919091013590565b60008060006060848603121561411057600080fd5b833561411b81613eec565b925060208401359150604084013561413281613eec565b809150509250925092565b600181811c9082168061415157607f821691505b60208210811415610c6d57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000602082840312156141b757600080fd5b81518015158114610fac57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614218576142186141ef565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614247576142476141ef565b5060010190565b600060ff821680614261576142616141ef565b6000190192915050565b60006020828403121561427d57600080fd5b5051919050565b600082821015614296576142966141ef565b500390565b6000602082840312156142ad57600080fd5b8151610fac81613eec565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082614317576143176142f2565b500490565b6000806040838503121561432f57600080fd5b505080516020909101519092909150565b60008251614352818460208701613f2d565b9190910192915050565b6000816000190483118215151615614376576143766141ef565b500290565b60008261438a5761438a6142f2565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "234:1279:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6703:158:10;;;;;;:::i;:::-;;:::i;:::-;;580:18:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4337:168:10;;;;;;:::i;:::-;;:::i;:::-;;;1452:25:486;;;1440:2;1425:18;4337:168:10;1306:177:486;6865:185:10;;;;;;:::i;:::-;;:::i;1783:36:12:-;;;;;;2626:26;;;;;;4771:208:10;;;;;;:::i;:::-;;:::i;1306:88:5:-;1388:1;1306:88;;;1660:4:486;1648:17;;;1630:36;;1618:2;1603:18;1306:88:5;1488:184:486;750:21:12;;;;;;;;;5851:95:10;;;:::i;2162:27:12:-;;;;;;1147:155:5;;;;;;:::i;:::-;;:::i;1148:35:12:-;;;;;;;;-1:-1:-1;;;;;1148:35:12;;;;;;-1:-1:-1;;;;;2925:32:486;;;2907:51;;2895:2;2880:18;1148:35:12;2735:229:486;2405:29:12;;;;;;3491:59;;3544:6;3491:59;;1896:33;;;;;;3740:25;;;;;-1:-1:-1;;;;;3740:25:12;;;3617:153:10;;;;;;:::i;:::-;;:::i;272:782:5:-;;;:::i;:::-;;;;;;;:::i;1551:31:12:-;;;;;;2282:28;;;;;;663:20;;;:::i;2529:29::-;;;;;;2669:152:10;;;;;;:::i;:::-;;:::i;8504:1035::-;;;;;;:::i;:::-;;:::i;2037:26:12:-;;;;;;7283:988:10;;;;;;:::i;:::-;;:::i;6476:223::-;;;;;;:::i;:::-;;:::i;3619:52:12:-;;3667:4;3619:52;;1668:31;;;;;;4015:133:10;;;;;;:::i;:::-;;:::i;336:33:12:-;;;;;-1:-1:-1;;;;;336:33:12;;;1398:113:5;1483:23;;;;;;;;;;;;-1:-1:-1;;;1483:23:5;;;;1398:113;;3150:133:10;;;;;;:::i;:::-;;:::i;1272:42:12:-;;;;;-1:-1:-1;;;;;1272:42:12;;;5433:264:10;;;;;;:::i;:::-;;:::i;6703:158::-;6788:10;6810:4;6788:27;6780:45;;;;-1:-1:-1;;;6780:45:10;;5422:2:486;6780:45:10;;;5404:21:486;5461:1;5441:18;;;5434:29;-1:-1:-1;;;5479:18:486;;;5472:35;5524:18;;6780:45:10;;;;;;;;;6831:25;6845:2;6849:6;6831:13;:25::i;:::-;6703:158;;:::o;580:18:12:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4337:168:10:-;4419:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4435:11:::1;4452:32;4472:11;4452:19;:32::i;:::-;-1:-1:-1::0;4434:50:10;4337:168;-1:-1:-1;;;4337:168:10:o;6865:185::-;6946:7;6969:10;6991:4;6969:27;6961:45;;;;-1:-1:-1;;;6961:45:10;;5422:2:486;6961:45:10;;;5404:21:486;5461:1;5441:18;;;5434:29;-1:-1:-1;;;5479:18:486;;;5472:35;5524:18;;6961:45:10;5220:328:486;6961:45:10;7019:26;7032:4;7038:6;7019:12;:26::i;:::-;7012:33;;6865:185;;;;;:::o;4771:208::-;4877:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4893:11:::1;4910:48;4936:8;4946:11;4910:25;:48::i;:::-;-1:-1:-1::0;4892:66:10;4771:208;-1:-1:-1;;;;4771:208:10:o;5851:95::-;5902:7;5924:17;:15;:17::i;:::-;5917:24;;5851:95;:::o;1147:155:5:-;1230:10;1252:4;1230:27;;:47;;;1261:16;:14;:16::i;:::-;1222:75;;;;-1:-1:-1;;;1222:75:5;;7251:2:486;1222:75:5;;;7233:21:486;7290:2;7270:18;;;7263:30;-1:-1:-1;;;7309:18:486;;;7302:45;7364:18;;1222:75:5;7049:339:486;1222:75:5;1147:155;:::o;3617:153:10:-;3705:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;3727:38:::1;3752:12;3727:24;:38::i;272:782:5:-:0;344:33;402:1;385:14;451:30;:28;:30::i;:::-;410:71;;552:8;520:40;;:22;:29;:40;;;;:::i;:::-;507:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:54:5;;487:74;;573:9;568:123;592:22;:29;588:1;:33;568:123;;;659:22;682:1;659:25;;;;;;;;:::i;:::-;;;;;;;636:17;654:1;636:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;636:48:5;;;:20;;;;;;;;;;;:48;623:3;;;;:::i;:::-;;;;568:123;;;-1:-1:-1;728:29:5;;-1:-1:-1;;;761:26:5;697:17;;715:10;;;:::i;:::-;;-1:-1:-1;715:42:5;;;;;;:::i;:::-;697:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;697:90:5;;;:61;;;;;;;;;;;:90;824:29;;-1:-1:-1;;;857:26:5;793:17;;811:10;;;:::i;:::-;;-1:-1:-1;811:42:5;;;;;;:::i;:::-;793:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;793:90:5;;;:61;;;;;;;;;;;:90;920:29;;-1:-1:-1;;;953:35:5;889:17;;907:10;;;:::i;:::-;;-1:-1:-1;907:42:5;;;;;;:::i;:::-;889:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;889:99:5;;;:61;;;;;;;;;;;:99;1003:13;;;;995:54;;;;-1:-1:-1;;;995:54:5;;8315:2:486;995:54:5;;;8297:21:486;8354:2;8334:18;;;8327:30;8393;8373:18;;;8366:58;8441:18;;995:54:5;8113:352:486;995:54:5;379:675;;272:782;:::o;663:20:12:-;;;;;;;:::i;2669:152:10:-;2743:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;2759:11:::1;2776:24;2789:10;2776:12;:24::i;8504:1035::-:0;8603:7;8587:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;8618:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8687:12;8665:18;;:34;8661:135;;8716:73;8721:22;8745:43;8716:4;:73::i;:::-;8709:80;;;;8661:135;8894:14;8874:17;:15;:17::i;:::-;:34;8870:149;;;8925:87;8930:29;8961:50;8925:4;:87::i;8870:149::-;9046:14;;9029;:31;9025:124;;;9077:65;9082:15;9099:42;9077:4;:65::i;9025:124::-;9293:14;9276;;:31;;;;:::i;:::-;9259:14;:48:::0;9459:11:::1;::::0;9430:50:::1;::::0;;-1:-1:-1;;;9430:50:10;;;;9416:81:::1;::::0;9459:11:::1;::::0;::::1;-1:-1:-1::0;;;;;9459:11:10::1;::::0;9430:48:::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;9459:11;9430:50:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9482:14;9416:13;:81::i;:::-;9519:14;9511:23;9504:30;;41731:1;41738:29:::0;41757:9;41738:18;:29::i;:::-;8504:1035;;;;:::o;7283:988::-;7382:7;7366:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;7397:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7466:12;7444:18;;:34;7440:135;;7495:73;7500:22;7524:43;7495:4;:73::i;7440:135::-;7605:14;7585:17;:15;:17::i;:::-;:34;7581:149;;;7636:87;7641:29;7672:50;7636:4;:87::i;7581:149::-;7757:14;;7740;:31;7736:124;;;7788:65;7793:15;7810:42;7788:4;:65::i;7736:124::-;7971:25;8016:14;7999;;:31;;;;:::i;:::-;8036:14;:34:::0;;;8201:10:::1;::::0;7971:59;;-1:-1:-1;8179:50:10::1;::::0;-1:-1:-1;;;;;8201:10:10::1;8214:14:::0;8179:13:::1;:50::i;:::-;8251:14;8236:30;;;41738:29:::0;41757:9;41738:18;:29::i;6476:223::-;6612:7;6597:4;41695:30;41715:9;41695:19;:30::i;:::-;6634:60:::1;6648:10;6660;6672:8;6682:11;6634:13;:60::i;:::-;6627:67;;41738:29:::0;41757:9;41738:18;:29::i;4015:133::-;4093:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4115:28:::1;4130:12;4115:14;:28::i;3150:133::-:0;3228:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;3250:28:::1;3265:12;3250:14;:28::i;5433:264::-:0;5579:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;5595:11:::1;5612:64;5636:8;5646:11;5659:16;5612:23;:64::i;:::-;-1:-1:-1::0;5594:82:10;-1:-1:-1;;1193:1:10::1;5433:264:::0;;;;;:::o;11820:215::-;11921:68;;;-1:-1:-1;;;;;9369:32:486;;11921:68:10;;;9351:51:486;9418:18;;;;9411:34;;;11921:68:10;;;;;;;;;;9324:18:486;;;;11921:68:10;;;;;;;;-1:-1:-1;;;;;11921:68:10;-1:-1:-1;;;11921:68:10;;;11894:136;;;;;;;;;;;;;;;;;;:19;:136::i;27701:307::-;27789:7;27798;27773:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;27813:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27950:53;27967:10;27979;27991:11;27950:16;:53::i;:::-;27943:60;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;27701:307;;;;:::o;10506:641::-;10638:10;;10623:51;;-1:-1:-1;;;10623:51:10;;10668:4;10623:51;;;2907::486;10584:7:10;;;;-1:-1:-1;;;;;10638:10:10;;;;10623:36;;2880:18:486;;10623:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10599:75;;10680:156;10730:36;;;10768:4;10782;10789:6;10707:89;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;10707:89:10;;;;;;;-1:-1:-1;;;;;10707:89:10;;;;;;;;;;;10680:156;;;;;;;;;;;;;;;;;:19;:156::i;:::-;10941:10;;10926:51;;-1:-1:-1;;;10926:51:10;;10971:4;10926:51;;;2907::486;10903:20:10;;-1:-1:-1;;;;;10941:10:10;;10926:36;;2880:18:486;;10926:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10903:74;;11007:13;10991:12;:29;;10983:68;;;;-1:-1:-1;;;10983:68:10;;10038:2:486;10983:68:10;;;10020:21:486;10077:2;10057:18;;;10050:30;10116:28;10096:18;;;10089:56;10162:18;;10983:68:10;9836:350:486;10983:68:10;11064:28;11079:13;11064:12;:28;:::i;:::-;11057:35;10506:641;-1:-1:-1;;;;;10506:641:10:o;28319:343::-;28443:7;28452;28423:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;28469:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28606:51;28623:10;28635:8;28645:11;28606:16;:51::i;:::-;28599:58;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;28319:343;;;;;;:::o;9784:136::-;9879:10;;9864:51;;-1:-1:-1;;;9864:51:10;;9909:4;9864:51;;;2907::486;9842:7:10;;-1:-1:-1;;;;;9879:10:10;;9864:36;;2880:18:486;;9864:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10605:339:12:-;10654:4;10666:39;10737:11;;;;;;;;;-1:-1:-1;;;;;10737:11:12;10666:84;;10784:18;-1:-1:-1;;;;;10784:24:12;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10770:40:12;:10;-1:-1:-1;;;;;10770:40:12;;:79;;;;;10814:18;-1:-1:-1;;;;;10814:33:12;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10769:170;;;-1:-1:-1;10883:10:12;;-1:-1:-1;;;;;10883:10:12;10861;:33;:77;;;;;10898:18;-1:-1:-1;;;;;10898:38:12;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10756:183;;;10605:339;:::o;17924:280:10:-;18018:7;18002:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;18033:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:40;18171:10;18183:1;18186:12;18159:11;:40::i;1203:1102::-:0;1359:22;;;1315:2;1359:22;;;;;;;;;1275:15;;1315:2;1298:14;;1315:2;1359:22;;;;;;;;;;-1:-1:-1;;1323:58:10;-1:-1:-1;;;;1323:58:10;1405:10;;;:::i;:::-;;;;1387:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1387:50:10;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;1443:17:10;1461:10;;;:::i;:::-;;;;1443:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1443:52:10;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1501:17:10;1519:10;;;:::i;:::-;;;;1501:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1501:62:10;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;1569:17:10;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:52:10;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1627:17:10;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:57:10;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;1690:17:10;1708:10;;;:::i;:::-;;;;1690:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1690:63:10;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1759:17:10;1777:10;;;:::i;:::-;;;;1759:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1759:61:10;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;1826:17:10;1844:10;;;:::i;:::-;;;;1826:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1826:53:10;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1885:17:10;1903:10;;;:::i;:::-;;;;1885:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1885:51:10;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;1942:17:10;1960:10;;;:::i;:::-;;;;1942:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1942:61:10;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2009:17:10;2027:10;;;:::i;:::-;;;;2009:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2009:60:10;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2075:17:10;2093:10;;;:::i;:::-;;;;2075:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2075:64:10;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2145:17:10;2163:10;;;:::i;:::-;;;;2145:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2145:64:10;;;:29;;;;;;;;;;;:64;2224:13;;;;2216:54;;;;-1:-1:-1;;;2216:54:10;;8315:2:486;2216:54:10;;;8297:21:486;8354:2;8334:18;;;8327:30;8393;8373:18;;;8366:58;8441:18;;2216:54:10;8113:352:486;13048:290:10;13128:7;13137;13112:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;13152:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13300:33;13310:10;13322;13300:9;:33::i;42073:178::-:0;42140:11;;-1:-1:-1;;;42140:11:10;;;;42132:34;;;;-1:-1:-1;;;42132:34:10;;10393:2:486;42132:34:10;;;10375:21:486;10432:2;10412:18;;;10405:30;-1:-1:-1;;;10451:18:486;;;10444:40;10501:18;;42132:34:10;10191:334:486;42132:34:10;42177:9;42172:49;;42188:11;;;;;;;;;-1:-1:-1;;;;;42188:11:10;-1:-1:-1;;;;;42188:31:10;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:49;-1:-1:-1;42241:5:10;42227:19;;-1:-1:-1;;;;42227:19:10;;;42073:178::o;7757:151:20:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;10740:25:486;;;10796:2;10781:18;;10774:34;;;;7875:1:20;10824:18:486;;;10817:34;10728:2;10713:18;7838:39:20;;;;;;;7899:3;7891:12;;;;;;;;:::i;42551:169:10:-;42609:11;:18;;-1:-1:-1;;;;42609:18:10;-1:-1:-1;;;42609:18:10;;;42672:9;42667:48;;42683:11;;;;;;;;;-1:-1:-1;;;;;42683:11:10;-1:-1:-1;;;;;42683:30:10;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42551:169;:::o;38262:3163::-;38472:11;;:87;;-1:-1:-1;;;38472:87:10;;38505:4;38472:87;;;11159:34:486;-1:-1:-1;;;;;11229:15:486;;;11209:18;;;11202:43;11281:15;;;11261:18;;;11254:43;11333:15;;;11313:18;;;11306:43;11365:19;;;11358:35;;;38403:7:10;;;;38472:11;;;;;;;;:24;;11093:19:486;;38472:87:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38454:105;-1:-1:-1;38569:12:10;;38565:139;;38598:99;38609:27;38638:49;38689:7;38598:10;:99::i;:::-;38591:106;;;;;38565:139;38766:10;-1:-1:-1;;;;;38754:22:10;:8;-1:-1:-1;;;;;38754:22:10;;38750:134;;;38793:84;38798:26;38826:50;38793:4;:84::i;38750:134::-;38890:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38890:34:10;-1:-1:-1;;;;;39230:23:10;;;;;;:13;:23;;;;;;39222:45;;39255:11;39222:7;:45::i;:::-;39196:22;;;39181:86;;;39182:4;39181:86;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;39293:18:10;;-1:-1:-1;39277:12:10;;:34;;;;;;;;:::i;:::-;;39273:167;;39328:105;39339:16;39357:52;39419:4;:12;;;39411:21;;;;;;;;:::i;:::-;39328:10;:105::i;:::-;39321:112;;;;;;39273:167;39473:64;39478:11;39491:45;;;;;;;;3544:6:12;39491:45:10;;;39473:4;:64::i;:::-;39446:24;;;:91;39583:40;;;;;;;;;3667:4:12;39583:40:10;;39565:59;;39570:11;;39565:4;:59::i;:::-;39543:19;;;:81;;;39673:24;;;;39659:38;;:11;:38;:::i;:::-;:60;;;;:::i;:::-;39630:26;;;:89;41519:4;-1:-1:-1;;;;;39754:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39726:25;;;:69;;;39855:44;;;;;;;;;39871:25;;39855:44;;-1:-1:-1;;;39907:24:10;39829:108;;39855:44;39829:18;:108::i;:::-;39802:24;;;:135;39984:44;;;;;;;;;40000:25;;;;39984:44;;40030:19;;;;39965:85;;39984:44;39965:18;:85::i;:::-;39943:19;;;:107;40097:24;;;;40081:13;;:40;;40097:24;40081:40;:::i;:::-;40057:21;;;:64;40190:19;;;;40163:24;;;;40149:11;;:38;;40163:24;40149:38;:::i;:::-;:60;;;;:::i;:::-;40127:19;;;:82;40256:19;;;;40239:14;;:36;;40256:19;40239:36;:::i;:::-;40215:21;;;:60;-1:-1:-1;;;;;40333:25:10;;;;;;:13;:25;;;;;;40360:26;;;;40325:62;;40333:25;40325:7;:62::i;:::-;40297:24;;;40282:105;;;40283:4;40282:105;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;40413:18:10;;-1:-1:-1;40397:12:10;;:34;;;;;;;;:::i;:::-;;40393:167;;40448:105;40459:16;40477:52;40539:4;:12;;;40531:21;;;;;;;;:::i;40393:167::-;40752:21;;;;40736:13;:37;40793:19;;;;40779:11;:33;40835:21;;;;40818:14;:38;40889:22;;;;;-1:-1:-1;;;;;40863:23:10;;;-1:-1:-1;40863:23:10;;;:13;:23;;;;;;:48;;;;40945:24;;;;40917:25;;;;;;;;;;:52;;;;41044:26;;;;41013:58;;1452:25:486;;;40917::10;;40863:23;;-1:-1:-1;;;;;;;;;;;41013:58:10;1425:18:486;41013:58:10;;;;;;;41109:4;-1:-1:-1;;;;;41082:59:10;41091:8;-1:-1:-1;;;;;41082:59:10;-1:-1:-1;;;;;;;;;;;41116:4:10;:24;;;41082:59;;;;1452:25:486;;1440:2;1425:18;;1306:177;41082:59:10;;;;;;;;41181:24;;;;41207:21;;;;41152:77;;;41174:4;11606:51:486;;11688:2;11673:18;;11666:34;;;;11716:18;;11709:34;41152:77:10;;11594:2:486;11579:18;41152:77:10;;;;;;;41405:14;41390:30;;;;38262:3163;;;;;;;:::o;23833:267::-;23917:7;23901:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;23932:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24058:37;24070:10;24082:12;24058:11;:37::i;17296:270::-:0;17380:7;17364:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;17395:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17521:40;17533:10;17545:12;17559:1;17521:11;:40::i;32809:437::-:0;32961:7;32970;32945:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;32985:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33035:16;-1:-1:-1::0;;;;;33027:40:10::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33168:73;33189:10;33201:8;33211:11;33224:16;33168:20;:73::i;:::-;33161:80;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;32809:437;;;;;;;:::o;12419:253::-;12550:10;;12510:23;;12536:45;;-1:-1:-1;;;;;12550:10:10;12562:4;12568:12;12536:13;:45::i;:::-;12591:17;;12510:71;;-1:-1:-1;12591:21:10;12587:80;;12633:10;12622:30;;;;;;;;;;;;:::i;:::-;12654:12;12614:53;;;;;-1:-1:-1;;;12614:53:10;;;;;;;;:::i;:::-;;12587:80;12504:168;12419:253;;:::o;29313:2997::-;29511:11;;:75;;-1:-1:-1;;;29511:75:10;;29550:4;29511:75;;;12023:34:486;-1:-1:-1;;;;;12093:15:486;;;12073:18;;;12066:43;12145:15;;;12125:18;;;12118:43;12177:18;;;12170:34;;;29427:7:10;;;;;;29511:11;;;;;;;;:30;;11957:19:486;;29511:75:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29493:93;-1:-1:-1;29596:12:10;;29592:141;;29626:96;29637:27;29666:46;29714:7;29626:10;:96::i;:::-;29724:1;29618:108;;;;;;;29592:141;29832:12;29810:18;;:34;29806:137;;29862:70;29867:22;29891:40;29862:4;:70::i;29806:137::-;29949:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:32:10;-1:-1:-1;;;;;30084:24:10;;;;;;:14;:24;;;;;:38;;;30063:18;;;:59;41519:4;30226:50;;-1:-1:-1;;;30226:50:10;;-1:-1:-1;;;;;2925:32:486;;;30226:50:10;;;2907:51:486;30226:40:10;;;;;;;2880:18:486;;30226:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30204:19;;;:72;-1:-1:-1;;30348:32:10;;30344:142;;;30409:19;;;;30390:16;;;:38;30344:142;;;30449:16;;;:30;;;30344:142;31027:37;31040:5;31047:4;:16;;;31027:12;:37::i;:::-;31002:22;;;:62;;;31343:19;;;;31335:52;;:7;:52::i;:::-;31309:22;;;31294:93;;;31295:12;;;31294:93;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31417:18:10;;-1:-1:-1;31401:4:10;:12;;;:34;;;;;;;;:::i;:::-;;31393:105;;;;-1:-1:-1;;;31393:105:10;;12417:2:486;31393:105:10;;;12399:21:486;12456:2;12436:18;;;12429:30;12495:34;12475:18;;;12468:62;12566:28;12546:18;;;12539:56;12612:19;;31393:105:10;12215:422:486;31393:105:10;31544:45;31552:12;;31566:4;:22;;;31544:7;:45::i;:::-;31520:20;;;31505:84;;;31506:12;;;31505:84;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31619:18:10;;-1:-1:-1;31603:4:10;:12;;;:34;;;;;;;;:::i;:::-;;31595:96;;;;-1:-1:-1;;;31595:96:10;;12844:2:486;31595:96:10;;;12826:21:486;12883:2;12863:18;;;12856:30;12922:34;12902:18;;;12895:62;-1:-1:-1;;;12973:18:486;;;12966:47;13030:19;;31595:96:10;12642:413:486;31595:96:10;31800:22;;;;;;-1:-1:-1;;;;;31763:24:10;;;;;;;:14;:24;;;;;;;;;:59;;;31869:11;;31828:38;;;;:52;;;;31901:20;;;;31886:12;:35;;;32000:22;;;;32024;;31971:98;;13375:15:486;;;13357:34;;13407:18;;;13400:43;;;;13459:18;;13452:34;;;;13517:2;13502:18;;13495:34;;;;13560:3;13545:19;;13538:35;;;;31971:98:10;;13291:19:486;31971:98:10;;;;;;;32282:22;;;32265:14;;-1:-1:-1;32282:22:10;-1:-1:-1;;29313:2997:10;;;;;;;:::o;19181:4407::-;19302:7;19325:19;;;:42;;-1:-1:-1;19348:19:10;;19325:42;19317:79;;;;-1:-1:-1;;;19317:79:10;;13786:2:486;19317:79:10;;;13768:21:486;13825:2;13805:18;;;13798:30;13864:26;13844:18;;;13837:54;13908:18;;19317:79:10;13584:348:486;19317:79:10;19403:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19403:27:10;41519:4;-1:-1:-1;;;;;19465:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19437:25;;;:69;19517:18;;19513:1634;;19637:4;19620:14;19606:11;;:28;;;;:::i;:::-;:35;19602:69;;;19660:11;;19643:28;;19602:69;19886:17;;;:34;;;19992:44;;;;;;;;20008:25;;;;19992:44;;19965:103;;19906:14;19965:17;:103::i;:::-;19944:17;;;19929:139;;;19930:12;;;19929:139;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;20096:18:10;;-1:-1:-1;20080:4:10;:12;;;:34;;;;;;;;:::i;:::-;;20076:182;;20143:106;20154:16;20172:53;20235:4;:12;;;20227:21;;;;;;;;:::i;20143:106::-;20126:123;;;;;20076:182;19513:1634;;;-1:-1:-1;;20282:14:10;:35;20278:150;;;20346:11;;:73;;-1:-1:-1;;;20346:73:10;;-1:-1:-1;;;;;14206:15:486;;;20346:73:10;;;14188:34:486;20405:4:10;14238:18:486;;;14231:43;20413:5:10;14290:18:486;;;14283:50;20346:11:10;;;;;;;;:32;;14123:18:486;;20346:73:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20329:90;;20278:150;20493:31;41519:4;-1:-1:-1;;;;;20527:46:10;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20493:82;-1:-1:-1;20630:4:10;20587:40;20613:14;20493:82;20587:40;:::i;:::-;:47;20583:93;;;20653:23;20636:40;;20583:93;20903:53;20914:14;20930:4;:25;;;20903:10;:53::i;:::-;20883:17;;;:73;;;21026:11;;21060:4;;21026:31;;;:::i;:::-;:38;21022:75;;;21086:11;;21066:17;;;:31;21022:75;-1:-1:-1;21106:17:10;;;:34;;;19513:1634;21208:11;;21259:17;;;;21208:69;;-1:-1:-1;;;21208:69:10;;21190:15;;21208:11;;;-1:-1:-1;;;;;21208:11:10;;:25;;:69;;21242:4;;21249:8;;21259:17;21208:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21190:87;-1:-1:-1;21287:12:10;;21283:130;;21316:90;21327:27;21356:40;21398:7;21316:10;:90::i;:::-;21309:97;;;;;;21283:130;21512:12;21490:18;;:34;21486:126;;21541:64;21546:22;21570:34;21541:4;:64::i;21486:126::-;21876:39;21884:11;;21897:4;:17;;;21876:7;:39::i;:::-;21853:19;;;21838:77;;;21839:12;;;21838:77;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;21941:18:10;;-1:-1:-1;21925:4:10;:12;;;:34;;;;;;;;:::i;:::-;;21921:177;;21984:107;21995:16;22013:54;22077:4;:12;;;22069:21;;;;;;;;:::i;21921:177::-;-1:-1:-1;;;;;22152:23:10;;;;;;:13;:23;;;;;;22177:17;;;;22144:51;;22152:23;22144:7;:51::i;:::-;22119:21;;;22104:91;;;22105:12;;;22104:91;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;22221:18:10;;-1:-1:-1;22205:4:10;:12;;;:34;;;;;;;;:::i;:::-;;22201:180;;22264:110;22275:16;22293:57;22360:4;:12;;;22352:21;;;;;;;;:::i;22201:180::-;22471:4;:17;;;22451;:15;:17::i;:::-;:37;22447:146;;;22505:81;22510:29;22541:44;22505:4;:81::i;22447:146::-;22779:19;;;;22765:11;:33;22830:21;;;;-1:-1:-1;;;;;22804:23:10;;;;;;:13;:23;;;;;:47;23215:17;;;;23191:42;;22818:8;;23191:13;:42::i;:::-;23327:4;-1:-1:-1;;;;;23300:52:10;23309:8;-1:-1:-1;;;;;23300:52:10;-1:-1:-1;;;;;;;;;;;23334:4:10;:17;;;23300:52;;;;1452:25:486;;1440:2;1425:18;;1306:177;23300:52:10;;;;;;;;23380:17;;;;23399;;;;;23363:54;;;-1:-1:-1;;;;;11624:32:486;;11606:51;;11688:2;11673:18;;11666:34;;;;11716:18;;11709:34;23363:54:10;;11579:18:486;23363:54:10;;;;;;;23459:11;;23509:17;;;;23528;;;;23459:87;;-1:-1:-1;;;23459:87:10;;23492:4;23459:87;;;14613:34:486;-1:-1:-1;;;;;14683:15:486;;;14663:18;;;14656:43;14715:18;;;14708:34;;;;14758:18;;;14751:34;;;;23459:11:10;;;;;;:24;;14547:19:486;;23459:87:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23568:14:10;;-1:-1:-1;23560:23:10;;-1:-1:-1;;23560:23:10;;23553:30;19181:4407;-1:-1:-1;;;;;;19181:4407:10:o;13996:2971::-;14146:11;;:58;;-1:-1:-1;;;14146:58:10;;14069:7;;;;;;14146:11;;;-1:-1:-1;;;;;14146:11:10;;:23;;:58;;14178:4;;14185:6;;14193:10;;14146:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14128:76;-1:-1:-1;14214:12:10;;14210:133;;14244:88;14255:27;14284:38;14324:7;14244:10;:88::i;:::-;14334:1;14236:100;;;;;;;14210:133;14442:12;14420:18;;:34;14416:129;;14472:62;14477:22;14501:32;14472:4;:62::i;14416:129::-;14551:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14551:25:10;41519:4;-1:-1:-1;;;;;14611:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14583:25;;;:69;15550:32;15563:6;15571:10;15550:12;:32::i;:::-;15526:21;;;:56;;;15890:44;;;;;;;;15906:25;;;;15890:44;;15831:109;;15526:56;15831:22;:109::i;:::-;15812:15;;;15797:143;;;15798:12;;;15797:143;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;15970:18:10;;-1:-1:-1;15954:4:10;:12;;;:34;;;;;;;;:::i;:::-;;15946:79;;;;-1:-1:-1;;;15946:79:10;;14998:2:486;15946:79:10;;;14980:21:486;;;15017:18;;;15010:30;15076:34;15056:18;;;15049:62;15128:18;;15946:79:10;14796:356:486;15946:79:10;16057:1;16039:4;:15;;;:19;16031:58;;;;-1:-1:-1;;;16031:58:10;;15359:2:486;16031:58:10;;;15341:21:486;15398:2;15378:18;;;15371:30;15437:28;15417:18;;;15410:56;15483:18;;16031:58:10;15157:350:486;16031:58:10;16360:4;:15;;;16346:11;;:29;;;;:::i;:::-;16324:19;;;:51;16430:15;;;;-1:-1:-1;;;;;16406:21:10;;;;;;:13;:21;;;;;;:39;;16430:15;16406:39;:::i;:::-;16382:21;;;:63;;;16527:19;;;;16513:11;:33;-1:-1:-1;;;;;16552:21:10;;;;;;:13;:21;;;;;;;;;:45;;;;16675:21;;;;16698:15;;;;;16662:52;;11606:51:486;;;11673:18;;;11666:34;;;;11716:18;;;11709:34;;;;16662:52:10;;11579:18:486;16662:52:10;;;;;;;16749:6;-1:-1:-1;;;;;16725:48:10;16742:4;-1:-1:-1;;;;;16725:48:10;-1:-1:-1;;;;;;;;;;;16757:4:10;:15;;;16725:48;;;;1452:25:486;;1440:2;1425:18;;1306:177;16725:48:10;;;;;;;;16815:11;;16861:21;;;;16884:15;;;;16815:85;;-1:-1:-1;;;16815:85:10;;16846:4;16815:85;;;14613:34:486;-1:-1:-1;;;;;14683:15:486;;;14663:18;;;14656:43;14715:18;;;14708:34;;;;14758:18;;;14751:34;;;;16815:11:10;;;;;;:22;;14547:19:486;;16815:85:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16923:14:10;;-1:-1:-1;16915:23:10;;-1:-1:-1;;16915:23:10;;16940:4;:21;;;16907:55;;;;;;13996:2971;;;;;;:::o;8016:262:20:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;10740:25:486;;;10796:2;10781:18;;10774:34;;;;10824:18;;10817:34;;;10728:2;10713:18;8140:49:20;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1280:213:13:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:13;;-1:-1:-1;1480:1:13;1443:39;;4229:119:22;4291:7;450:4;4313:19;4318:1;4321;:10;;;4313:4;:19::i;:::-;:30;;;;:::i;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1567:263:13:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:13;-1:-1:-1;1730:30:13;;1710:116;1789:26;1817:1;1781:38;;;;;;;24486:2981:10;24635:11;;:64;;-1:-1:-1;;;24635:64:10;;24565:7;;;;24635:11;;;;-1:-1:-1;;;;;24635:11:10;;:25;;:64;;24669:4;;24676:8;;24686:12;;24635:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24617:82;-1:-1:-1;24709:12:10;;24705:130;;24738:90;24749:27;24778:40;24820:7;24738:10;:90::i;:::-;24731:97;;;;;24705:130;24934:12;24912:18;;:34;24908:126;;24963:64;24968:22;24992:34;24963:4;:64::i;24908:126::-;25111:17;25131;:15;:17::i;:::-;25111:37;;25171:12;25159:9;:24;25155:126;;;25200:74;25205:29;25236:37;25200:4;:74::i;:::-;25193:81;;;;;;25155:126;25287:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:27:10;41519:4;25555:50;;-1:-1:-1;;;25555:50:10;;-1:-1:-1;;;;;2925:32:486;;;25555:50:10;;;2907:51:486;25555:40:10;;;;;;;2880:18:486;;25555:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25533:19;;;:72;;;25653:42;;25682:12;25653:7;:42::i;:::-;25627:22;;;25612:83;;;25613:4;25612:83;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;25721:18:10;;-1:-1:-1;25705:12:10;;:34;;;;;;;;:::i;:::-;;25701:227;;25764:157;25786:16;25814:64;25898:4;:12;;;25890:21;;;;;;;;:::i;25764:157::-;25749:172;;;;;;;25701:227;25997:11;;26043:22;;;;;25997:69;;-1:-1:-1;;;25997:69:10;;26036:4;25997:69;;;9351:51:486;9418:18;;;9411:34;;;;25997:11:10;;;;-1:-1:-1;;;;;25997:11:10;;:30;;9324:18:486;;25997:69:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25987:79;-1:-1:-1;26076:12:10;;26072:130;;26105:90;26116:27;26145:40;26187:7;26105:10;:90::i;26072:130::-;26247:35;26255:12;;26269;26247:7;:35::i;:::-;26223:20;;;26208:74;;;26209:4;26208:74;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;26308:18:10;;-1:-1:-1;26292:12:10;;:34;;;;;;;;:::i;:::-;;26288:178;;26351:108;26362:16;26380:55;26445:4;:12;;;26437:21;;;;;;;;:::i;26288:178::-;26679:22;;;;;-1:-1:-1;;;;;26642:24:10;;;;;;:14;:24;;;;;;:59;;;26748:11;;26707:38;;;;:52;26780:20;;;;26765:12;:35;27136:37;26657:8;27160:12;27136:13;:37::i;:::-;27249:22;;;;;27273:20;;;;;27218:76;;-1:-1:-1;;;;;16342:32:486;;16324:51;;16406:2;16391:18;;16384:34;;;16434:18;;;16427:34;;;;16477:18;;16470:34;27218:76:10;;16311:3:486;16296:19;27218:76:10;;;;;;;27447:14;27432:30;24486:2981;-1:-1:-1;;;;;;24486:2981:10:o;33827:3389::-;34062:11;;:138;;-1:-1:-1;;;34062:138:10;;34112:4;34062:138;;;11159:34:486;-1:-1:-1;;;;;11229:15:486;;;11209:18;;;11202:43;11281:15;;;11261:18;;;11254:43;11333:15;;;11313:18;;;11306:43;11365:19;;;11358:35;;;33980:7:10;;;;;;34062:11;;;;;;;;:34;;11093:19:486;;34062:138:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34044:156;-1:-1:-1;34210:12:10;;34206:138;;34240:93;34251:27;34280:43;34325:7;34240:10;:93::i;:::-;34335:1;34232:105;;;;;;;34206:138;34443:12;34421:18;;:34;34417:134;;34473:67;34478:22;34502:37;34473:4;:67::i;34417:134::-;34694:12;34652:16;-1:-1:-1;;;;;34645:43:10;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;34641:172;;34724:78;34729:22;34753:48;34724:4;:78::i;34641:172::-;34875:10;-1:-1:-1;;;;;34863:22:10;:8;-1:-1:-1;;;;;34863:22:10;;34859:133;;;34903:78;34908:26;34936:44;34903:4;:78::i;34859:133::-;35036:16;35032:135;;35070:86;35075:36;35113:42;35070:4;:86::i;35032:135::-;-1:-1:-1;;35212:11:10;:32;35208:155;;;35262:90;35267:36;35305:46;35262:4;:90::i;35208:155::-;35406:24;35432:25;35461:51;35478:10;35490:8;35500:11;35461:16;:51::i;:::-;35405:107;;-1:-1:-1;35405:107:10;-1:-1:-1;35522:43:10;;35518:154;;35583:78;35594:16;35588:23;;;;;;;;:::i;:::-;35613:47;35583:4;:78::i;:::-;35663:1;35575:90;;;;;;;;;35518:154;35908:11;;:117;;-1:-1:-1;;;35908:117:10;;35859:24;;;;35908:11;;;;-1:-1:-1;;;;;35908:11:10;;:41;;:117;;35965:4;;35978:16;;36002:17;;35908:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35858:167;;-1:-1:-1;35858:167:10;-1:-1:-1;36039:43:10;;36031:107;;;;-1:-1:-1;;;36031:107:10;;16967:2:486;36031:107:10;;;16949:21:486;17006:2;16986:18;;;16979:30;17045:34;17025:18;;;17018:62;-1:-1:-1;;;17096:18:486;;;17089:49;17155:19;;36031:107:10;16765:415:486;36031:107:10;36221:45;;-1:-1:-1;;;36221:45:10;;-1:-1:-1;;;;;2925:32:486;;;36221:45:10;;;2907:51:486;36270:11:10;;36221:35;;;;;;2880:18:486;;36221:45:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;36213:97;;;;-1:-1:-1;;;36213:97:10;;17387:2:486;36213:97:10;;;17369:21:486;17426:2;17406:18;;;17399:30;17465:26;17445:18;;;17438:54;17509:18;;36213:97:10;17185:348:486;36213:97:10;36428:18;-1:-1:-1;;;;;36456:33:10;;36484:4;36456:33;36452:229;;;36512:63;36534:4;36541:10;36553:8;36563:11;36512:13;:63::i;:::-;36499:76;;36452:229;;;36609:65;;-1:-1:-1;;;36609:65:10;;-1:-1:-1;;;;;36609:30:10;;;;;:65;;36640:10;;36652:8;;36662:11;;36609:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36596:78;;36452:229;36776:37;;36768:56;;;;-1:-1:-1;;;36768:56:10;;17740:2:486;36768:56:10;;;17722:21:486;17779:1;17759:18;;;17752:29;-1:-1:-1;;;17797:18:486;;;17790:36;17843:18;;36768:56:10;17538:329:486;36768:56:10;36878:87;;;-1:-1:-1;;;;;18187:15:486;;;18169:34;;18239:15;;;18234:2;18219:18;;18212:43;18271:18;;;18264:34;;;18334:15;;18329:2;18314:18;;18307:43;18381:3;18366:19;;18359:35;;;36878:87:10;;;;;;;18118:3:486;36878:87:10;;;37176:14;37160:51;-1:-1:-1;37193:17:10;;-1:-1:-1;;;;;;33827:3389:10;;;;;;;;:::o;43409:679::-;43529:12;43550;43564:23;43591:6;-1:-1:-1;;;;;43591:11:10;43603:4;43591:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43549:59;;;;43620:7;43615:445;;43701:17;;:21;43697:357;;43925:10;43919:17;43975:15;43962:10;43958:2;43954:19;43947:44;43697:357;44032:12;44025:20;;-1:-1:-1;;;44025:20:10;;;;;;;;:::i;2379:288:21:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:21;-1:-1:-1;2560:18:21;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:21;-1:-1:-1;2601:1:21;;-1:-1:-1;2588:15:21;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;18422:139:10:-;18487:11;18525:1;18513:8;:1;18517:4;18513:8;:::i;:::-;18512:14;;;;:::i;:::-;18506:20;-1:-1:-1;18536:5:10;18540:1;18536;:5;:::i;:::-;:10;18532:24;;18548:8;18555:1;18548:8;;:::i;3834:312:21:-;3925:9;3936:7;3952:13;3967:19;3990:31;4005:6;4013:7;3990:14;:31::i;4796:123:22:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:22;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:22:o;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:21:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:21;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:21;-1:-1:-1;2136:18:21;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:21;;;;;;;;;-1:-1:-1;2178:20:21;;2172:4;;-1:-1:-1;2178:20:21;-1:-1:-1;2164:35:21;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:21;;-1:-1:-1;1947:332:21;-1:-1:-1;;;;1947:332:21:o;3151:585::-;3234:9;3245:10;-1:-1:-1;;;;;;;;;;;;;;3245:10:21;3534:14;3550:17;3571:25;450:4:22;3589:6:21;3571:7;:25::i;:::-;3533:63;;-1:-1:-1;3533:63:21;-1:-1:-1;3614:18:21;3606:4;:26;;;;;;;;:::i;:::-;;3602:82;;-1:-1:-1;3656:20:21;;;;;;;;;-1:-1:-1;3656:20:21;;3650:4;;-1:-1:-1;3656:20:21;-1:-1:-1;3642:35:21;;3602:82;3696:35;3703:9;3714:7;:16;;;3696:6;:35::i;4923:243:22:-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:22;;5045:16;5041:45;;;-1:-1:-1;5078:1:22;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:22;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:22;;;;;;;;:::i;544:330:13:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:13;;-1:-1:-1;660:18:13;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:13;-1:-1:-1;833:30:13;;799:479:21;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:21;896:14;912:23;939:22;947:3;450:4:22;939:7:21;:22::i;:::-;895:66;;-1:-1:-1;895:66:21;-1:-1:-1;979:18:21;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:21;;;;;;;;;-1:-1:-1;1021:20:21;;1015:4;;-1:-1:-1;1021:20:21;-1:-1:-1;1007:35:21;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:21;-1:-1:-1;1141:18:21;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:21;;-1:-1:-1;799:479:21;-1:-1:-1;;;;;;799:479:21:o;958:198:13:-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:13;;-1:-1:-1;1102:1:13;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;14:131:486:-;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:486:o;470:258::-;542:1;552:113;566:6;563:1;560:13;552:113;;;642:11;;;636:18;623:11;;;616:39;588:2;581:10;552:113;;;683:6;680:1;677:13;674:48;;;-1:-1:-1;;718:1:486;700:16;;693:27;470:258::o;733:383::-;882:2;871:9;864:21;845:4;914:6;908:13;957:6;952:2;941:9;937:18;930:34;973:66;1032:6;1027:2;1016:9;1012:18;1007:2;999:6;995:15;973:66;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:486;1060:45;;;;1107:2;1056:54;;733:383;-1:-1:-1;;733:383:486:o;1121:180::-;1180:6;1233:2;1221:9;1212:7;1208:23;1204:32;1201:52;;;1249:1;1246;1239:12;1201:52;-1:-1:-1;1272:23:486;;1121:180;-1:-1:-1;1121:180:486:o;1677:127::-;1738:10;1733:3;1729:20;1726:1;1719:31;1769:4;1766:1;1759:15;1793:4;1790:1;1783:15;1809:921;1877:6;1930:2;1918:9;1909:7;1905:23;1901:32;1898:52;;;1946:1;1943;1936:12;1898:52;1986:9;1973:23;2015:18;2056:2;2048:6;2045:14;2042:34;;;2072:1;2069;2062:12;2042:34;2110:6;2099:9;2095:22;2085:32;;2155:7;2148:4;2144:2;2140:13;2136:27;2126:55;;2177:1;2174;2167:12;2126:55;2213:2;2200:16;2235:2;2231;2228:10;2225:36;;;2241:18;;:::i;:::-;2316:2;2310:9;2284:2;2370:13;;-1:-1:-1;;2366:22:486;;;2390:2;2362:31;2358:40;2346:53;;;2414:18;;;2434:22;;;2411:46;2408:72;;;2460:18;;:::i;:::-;2500:10;2496:2;2489:22;2535:2;2527:6;2520:18;2575:7;2570:2;2565;2561;2557:11;2553:20;2550:33;2547:53;;;2596:1;2593;2586:12;2547:53;2652:2;2647;2643;2639:11;2634:2;2626:6;2622:15;2609:46;2697:1;2675:15;;;2692:2;2671:24;2664:35;;;;-1:-1:-1;2679:6:486;1809:921;-1:-1:-1;;;;;1809:921:486:o;3177:657::-;3346:2;3398:21;;;3468:13;;3371:18;;;3490:22;;;3317:4;;3346:2;3569:15;;;;3543:2;3528:18;;;3317:4;3612:196;3626:6;3623:1;3620:13;3612:196;;;3691:13;;-1:-1:-1;;;;;;3687:40:486;3675:53;;3783:15;;;;3748:12;;;;3648:1;3641:9;3612:196;;;-1:-1:-1;3825:3:486;;3177:657;-1:-1:-1;;;;;;3177:657:486:o;3839:456::-;3916:6;3924;3932;3985:2;3973:9;3964:7;3960:23;3956:32;3953:52;;;4001:1;3998;3991:12;3953:52;4040:9;4027:23;4059:31;4084:5;4059:31;:::i;:::-;4109:5;-1:-1:-1;4166:2:486;4151:18;;4138:32;4179:33;4138:32;4179:33;:::i;:::-;3839:456;;4231:7;;-1:-1:-1;;;4285:2:486;4270:18;;;;4257:32;;3839:456::o;4759:::-;4836:6;4844;4852;4905:2;4893:9;4884:7;4880:23;4876:32;4873:52;;;4921:1;4918;4911:12;4873:52;4960:9;4947:23;4979:31;5004:5;4979:31;:::i;:::-;5029:5;-1:-1:-1;5081:2:486;5066:18;;5053:32;;-1:-1:-1;5137:2:486;5122:18;;5109:32;5150:33;5109:32;5150:33;:::i;:::-;5202:7;5192:17;;;4759:456;;;;;:::o;5553:380::-;5632:1;5628:12;;;;5675;;;5696:61;;5750:4;5742:6;5738:17;5728:27;;5696:61;5803:2;5795:6;5792:14;5772:18;5769:38;5766:161;;;5849:10;5844:3;5840:20;5837:1;5830:31;5884:4;5881:1;5874:15;5912:4;5909:1;5902:15;5938:481;-1:-1:-1;;;;;6223:15:486;;;6205:34;;6275:15;;;6270:2;6255:18;;6248:43;6327:15;;6322:2;6307:18;;6300:43;-1:-1:-1;;;;;;6379:33:486;;;6374:2;6359:18;;6352:61;6154:3;6139:19;;5938:481::o;6424:277::-;6491:6;6544:2;6532:9;6523:7;6519:23;6515:32;6512:52;;;6560:1;6557;6550:12;6512:52;6592:9;6586:16;6645:5;6638:13;6631:21;6624:5;6621:32;6611:60;;6667:1;6664;6657:12;6706:338;6908:2;6890:21;;;6947:2;6927:18;;;6920:30;-1:-1:-1;;;6981:2:486;6966:18;;6959:44;7035:2;7020:18;;6706:338::o;7393:127::-;7454:10;7449:3;7445:20;7442:1;7435:31;7485:4;7482:1;7475:15;7509:4;7506:1;7499:15;7525:128;7565:3;7596:1;7592:6;7589:1;7586:13;7583:39;;;7602:18;;:::i;:::-;-1:-1:-1;7638:9:486;;7525:128::o;7658:127::-;7719:10;7714:3;7710:20;7707:1;7700:31;7750:4;7747:1;7740:15;7774:4;7771:1;7764:15;7790:135;7829:3;-1:-1:-1;;7850:17:486;;7847:43;;;7870:18;;:::i;:::-;-1:-1:-1;7917:1:486;7906:13;;7790:135::o;7930:178::-;7967:3;8011:4;8004:5;8000:16;8035:7;8025:41;;8046:18;;:::i;:::-;-1:-1:-1;;8082:20:486;;7930:178;-1:-1:-1;;7930:178:486:o;8470:184::-;8540:6;8593:2;8581:9;8572:7;8568:23;8564:32;8561:52;;;8609:1;8606;8599:12;8561:52;-1:-1:-1;8632:16:486;;8470:184;-1:-1:-1;8470:184:486:o;8659:125::-;8699:4;8727:1;8724;8721:8;8718:34;;;8732:18;;:::i;:::-;-1:-1:-1;8769:9:486;;8659:125::o;8789:251::-;8859:6;8912:2;8900:9;8891:7;8887:23;8883:32;8880:52;;;8928:1;8925;8918:12;8880:52;8960:9;8954:16;8979:31;9004:5;8979:31;:::i;9045:127::-;9106:10;9101:3;9097:20;9094:1;9087:31;9137:4;9134:1;9127:15;9161:4;9158:1;9151:15;9456:375;-1:-1:-1;;;;;9714:15:486;;;9696:34;;9766:15;;;;9761:2;9746:18;;9739:43;9813:2;9798:18;;9791:34;;;;9646:2;9631:18;;9456:375::o;15836:127::-;15897:10;15892:3;15888:20;15885:1;15878:31;15928:4;15925:1;15918:15;15952:4;15949:1;15942:15;15968:120;16008:1;16034;16024:35;;16039:18;;:::i;:::-;-1:-1:-1;16073:9:486;;15968:120::o;16515:245::-;16594:6;16602;16655:2;16643:9;16634:7;16630:23;16626:32;16623:52;;;16671:1;16668;16661:12;16623:52;-1:-1:-1;;16694:16:486;;16750:2;16735:18;;;16729:25;16694:16;;16729:25;;-1:-1:-1;16515:245:486:o;18405:274::-;18534:3;18572:6;18566:13;18588:53;18634:6;18629:3;18622:4;18614:6;18610:17;18588:53;:::i;:::-;18657:16;;;;;18405:274;-1:-1:-1;;18405:274:486:o;18684:168::-;18724:7;18790:1;18786;18782:6;18778:14;18775:1;18772:21;18767:1;18760:9;18753:17;18749:45;18746:71;;;18797:18;;:::i;:::-;-1:-1:-1;18837:9:486;;18684:168::o;18857:112::-;18889:1;18915;18905:35;;18920:18;;:::i;:::-;-1:-1:-1;18954:9:486;;18857:112::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_becomeImplementation(bytes)": "56e67728", + "_getExtensionFunctions()": "89f8132e", + "_withdrawAdminFees(uint256)": "a7b820df", + "_withdrawIonicFees(uint256)": "b0d58e49", + "accrualBlockNumber()": "6c540baf", + "adminFeeMantissa()": "8d02d9a1", + "borrow(uint256)": "c5ebeaec", + "borrowIndex()": "aa5af0fd", + "comptroller()": "5fe3b567", + "contractType()": "cb2ef6f7", + "decimals()": "313ce567", + "delegateType()": "2c436e5b", + "feeSeizeShareMantissa()": "be99f119", + "getCash()": "3b1d21a2", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "liquidateBorrow(address,uint256,address)": "f5e3c462", + "mint(uint256)": "a0712d68", + "name()": "06fdde03", + "protocolSeizeShareMantissa()": "6752e702", + "redeem(uint256)": "db006a75", + "redeemUnderlying(uint256)": "852a12e3", + "repayBorrow(uint256)": "0e752702", + "repayBorrowBehalf(address,uint256)": "2608f818", + "reserveFactorMantissa()": "173b9904", + "seize(address,address,uint256)": "b2a02ff1", + "selfTransferIn(address,uint256)": "135f1334", + "selfTransferOut(address,uint256)": "067db1b3", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/CErc20PluginDelegate.json b/packages/sdk/deployments/mode/CErc20PluginDelegate.json new file mode 100644 index 0000000000..3a8bbf4e7b --- /dev/null +++ b/packages/sdk/deployments/mode/CErc20PluginDelegate.json @@ -0,0 +1,2605 @@ +{ + "address": "0x726C7BC0c532aE239fb0ea8522E1F982C0AFF1D5", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "AccrueInterest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "Borrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "LiquidateBorrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256" + } + ], + "name": "NewIonicFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "NewMarketInterestRateModel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldImpl", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newImpl", + "type": "address" + } + ], + "name": "NewPluginImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "NewReserveFactor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "Redeem", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "RepayBorrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "benefactor", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesReduced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "_becomeImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_plugin", + "type": "address" + } + ], + "name": "_updatePlugin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "plugin", + "outputs": [ + { + "internalType": "contract IERC4626", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "selfTransferOut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x7423528abf35f45021875640835b9d3dbadd95aa7375cf73f30e50ecdf832551", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x726C7BC0c532aE239fb0ea8522E1F982C0AFF1D5", + "transactionIndex": 1, + "gasUsed": "4052431", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xdc18fc4d207c8e3ce5de629ba835c0e364d60ab7620612c780f6be6df0bda199", + "transactionHash": "0x7423528abf35f45021875640835b9d3dbadd95aa7375cf73f30e50ecdf832551", + "logs": [], + "blockNumber": 2067107, + "cumulativeGasUsed": "4099344", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Borrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "LiquidateBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImpl", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newImpl", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPluginImplementation", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "redeemer", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Redeem", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "RepayBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "benefactor", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesReduced", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_plugin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_updatePlugin" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "plugin", + "outputs": [ + { + "internalType": "contract IERC4626", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferOut" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_becomeImplementation(bytes)": { + "params": { + "data": "The encoded arguments for becoming" + } + }, + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_updatePlugin(address)": { + "params": { + "_plugin": "The address of the plugin implementation to use" + } + }, + "_withdrawAdminFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_withdrawIonicFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrow(uint256)": { + "params": { + "borrowAmount": "The amount of the underlying asset to borrow" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "getCash()": { + "returns": { + "_0": "The quantity of underlying asset owned by this contract" + } + }, + "liquidateBorrow(address,uint256,address)": { + "params": { + "borrower": "The borrower of this cToken to be liquidated", + "cTokenCollateral": "The market in which to seize collateral from the borrower", + "repayAmount": "The amount of the underlying borrowed asset to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "mint(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "mintAmount": "The amount of the underlying asset to supply" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeem(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemTokens": "The number of cTokens to redeem into underlying" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeemUnderlying(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemAmount": "The amount of underlying to redeem" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrow(uint256)": { + "params": { + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrowBehalf(address,uint256)": { + "params": { + "borrower": "the account with the debt being payed off", + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "seize(address,address,uint256)": { + "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.", + "params": { + "borrower": "The account having collateral seized", + "liquidator": "The account receiving seized collateral", + "seizeTokens": "The number of cTokens to seize" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_becomeImplementation(bytes)": { + "notice": "Delegate interface to become the implementation" + }, + "_updatePlugin(address)": { + "notice": "Update the plugin implementation to a whitelisted implementation" + }, + "_withdrawAdminFees(uint256)": { + "notice": "Accrues interest and reduces admin fees by transferring to admin" + }, + "_withdrawIonicFees(uint256)": { + "notice": "Accrues interest and reduces Ionic fees by transferring to Ionic" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "borrow(uint256)": { + "notice": "Sender borrows assets from the protocol to their own address" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "getCash()": { + "notice": "Get cash balance of this cToken in the underlying asset" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "liquidateBorrow(address,uint256,address)": { + "notice": "The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator." + }, + "mint(uint256)": { + "notice": "Sender supplies assets into the market and receives cTokens in exchange" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "plugin()": { + "notice": "Plugin address" + }, + "redeem(uint256)": { + "notice": "Sender redeems cTokens in exchange for the underlying asset" + }, + "redeemUnderlying(uint256)": { + "notice": "Sender redeems cTokens in exchange for a specified amount of underlying asset" + }, + "repayBorrow(uint256)": { + "notice": "Sender repays their own borrow" + }, + "repayBorrowBehalf(address,uint256)": { + "notice": "Sender repays a borrow belonging to borrower" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "seize(address,address,uint256)": { + "notice": "Transfers collateral tokens (this market) to the liquidator." + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CErc20PluginDelegate.sol": "CErc20PluginDelegate" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20PluginDelegate.sol": { + "keccak256": "0x095cc54097ac06a9b6232222c5197df72c4cc4a0f2c69261bf22ebba2dfead3f", + "urls": [ + "bzz-raw://5641c9c2222825360f0dedcd0706028c062ee42540e55f1088fb10b408d4ed9a", + "dweb:/ipfs/QmW1VLeKMfHNNvcst9uz5PD7QcJizVQ8iRApUE1NJDQ9e3" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IERC4626.sol": { + "keccak256": "0x1dc7b6dc2f1202ca16bff4eb488bb5bfcd6a48202996663a7220a888b261d7cb", + "urls": [ + "bzz-raw://35f5dfa93bcb6e10c2b83a15fd376fcd57baba83d1a09e4ba300859b8cbda1be", + "dweb:/ipfs/QmbnBkjAsEn97WyATWGF8ftifX55S4efA9RYyiuFZ4juhP" + ], + "license": null + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5061485b806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806389f8132e11610130578063b2a02ff1116100b8578063cb2ef6f71161007c578063cb2ef6f71461045d578063db006a751461048d578063ef01df4f146104a0578063f3fdb15a146104b3578063f5e3c462146104c657600080fd5b8063b2a02ff11461040c578063be99f1191461041f578063c3bf11cd1461042e578063c5ebeaec14610437578063c91a424f1461044a57600080fd5b80639826394b116100ff5780639826394b146103c1578063a0712d68146103ca578063a7b820df146103dd578063aa5af0fd146103f0578063b0d58e49146103f957600080fd5b806389f8132e146103925780638d02d9a1146103a75780638f840ddd146103b057806395d89b41146103b957600080fd5b8063313ce567116101be57806361feacff1161018257806361feacff1461034c5780636752e702146103555780636c540baf146103635780636f307dc31461036c578063852a12e31461037f57600080fd5b8063313ce567146102eb5780633b1d21a2146102f857806347bd37181461030057806356e67728146103095780635fe3b5671461031c57600080fd5b8063173b990411610205578063173b99041461029e57806318160ddd146102a757806319f496c8146102b05780632608f818146102c35780632c436e5b146102d657600080fd5b8063067db1b31461023757806306fdde031461024c5780630e7527021461026a578063135f13341461028b575b600080fd5b61024a6102453660046143a9565b6104d9565b005b610254610523565b60405161026191906143d5565b60405180910390f35b61027d61027836600461442a565b6105b1565b604051908152602001610261565b61027d6102993660046143a9565b61066e565b61027d60085481565b61027d600f5481565b61024a6102be366004614443565b6106ba565b61027d6102d13660046143a9565b610a18565b60025b60405160ff9091168152602001610261565b6003546102d99060ff1681565b61027d610ad7565b61027d600b5481565b61024a610317366004614476565b610ae6565b6003546103349061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610261565b61027d600d5481565b61027d666379da05b6000081565b61027d60095481565b601354610334906001600160a01b031681565b61027d61038d36600461442a565b610c44565b61039a610cf7565b6040516102619190614527565b61027d60065481565b61027d600c5481565b610254610eb1565b61027d600e5481565b61027d6103d836600461442a565b610ebe565b61027d6103eb36600461442a565b610f73565b61027d600a5481565b61027d61040736600461442a565b6110d1565b61027d61041a366004614575565b6111c4565b61027d67016345785d8a000081565b61027d60075481565b61027d61044536600461442a565b6111e8565b600054610334906001600160a01b031681565b604080518082019091526014815273434572633230506c7567696e44656c656761746560601b6020820152610254565b61027d61049b36600461442a565b61129b565b601454610334906001600160a01b031681565b600454610334906001600160a01b031681565b61027d6104d43660046145b6565b61134e565b3330146105155760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b61051f8282611411565b5050565b60018054610530906145f8565b80601f016020809104026020016040519081016040528092919081815260200182805461055c906145f8565b80156105a95780601f1061057e576101008083540402835291602001916105a9565b820191906000526020600020905b81548152906001019060200180831161058c57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105fe9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa15801561061b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063f9190614660565b61065b5760405162461bcd60e51b815260040161050c90614682565b600061066683611493565b509392505050565b60003330146106a75760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b604482015260640161050c565b6106b18383611524565b90505b92915050565b333014806106cb57506106cb6115da565b61072b5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f7560448201526a383230ba32a8363ab3b4b760a91b606482015260840161050c565b6014546000906001600160a01b03166107445781610751565b6014546001600160a01b03165b6014549091506001600160a01b0316158015906107d857506014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d591906146aa565b15155b156108c2576014546040516370a0823160e01b81523060048201526001600160a01b039091169063ba0876529082906370a0823190602401602060405180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085191906146aa565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303816000875af115801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c091906146aa565b505b601480546001600160a01b0319166001600160a01b0384811691821790925560135460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b3906044016020604051808303816000875af115801561092d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109519190614660565b506013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf91906146aa565b905080156109d0576109d081611757565b604080516001600160a01b038085168252851660208201527fb32957d2794aaec3ea2c8852833af2192fe9fb518777de1f883e9e821781da75910160405180910390a1505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610a659261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190614660565b610ac25760405162461bcd60e51b815260040161050c90614682565b6000610ace84846117cc565b50949350505050565b6000610ae161185f565b905090565b33301480610af75750610af76115da565b610b5f5760405162461bcd60e51b815260206004820152603360248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f6260448201527232b1b7b6b2a4b6b83632b6b2b73a30ba34b7b760691b606482015260840161050c565b600081806020019051810190610b7591906146c3565b90506001600160a01b038116158015610b9857506014546001600160a01b031615155b15610c10576000546014546040516381218ea960e01b81526001600160a01b0391821660048201529116906381218ea990602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d91906146c3565b90505b6001600160a01b03811615801590610c3657506014546001600160a01b03828116911614155b1561051f5761051f816106ba565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610c919261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190614660565b610cee5760405162461bcd60e51b815260040161050c90614682565b6106b482611933565b606060026000610d056119b0565b90508160ff168151610d1791906146f6565b67ffffffffffffffff811115610d2f57610d2f614460565b604051908082528060200260200182016040528015610d58578160200160208202803683370190505b50925060005b8151811015610dbe57818181518110610d7957610d7961470e565b6020026020010151848281518110610d9357610d9361470e565b6001600160e01b03199092166020928302919091019091015280610db681614724565b915050610d5e565b50805163ef01df4f60e01b908490610dd58561473f565b9450610de49060ff86166146f6565b81518110610df457610df461470e565b6001600160e01b031990921660209283029190910190910152805163033e92d960e31b908490610e238561473f565b9450610e329060ff86166146f6565b81518110610e4257610e4261470e565b6001600160e01b03199092166020928302919091019091015260ff821615610eac5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161050c565b505090565b60028054610530906145f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f0b9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c9190614660565b610f685760405162461bcd60e51b815260040161050c90614682565b600061066683611b2a565b600080610f7f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe391906146aa565b50436009541461100057610ff9600a6039611c6b565b91506110c2565b8261100961185f565b101561101b57610ff9600e6038611c6b565b600d5483111561103157610ff96002603a611c6b565b82600d5461103f919061475c565b600d55600354604080516303e1469160e61b815290516110bc9261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b691906146c3565b84611411565b60005b91505b6110cb81611ce4565b50919050565b6000806110dd81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561111d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114191906146aa565b50436009541461115757610ff9600a6035611c6b565b8261116061185f565b101561117257610ff9600e6034611c6b565b600e5483111561118857610ff960026036611c6b565b600083600e54611198919061475c565b600e8190556000549091506111b6906001600160a01b031685611411565b60009250506110cb81611ce4565b600060016111d181611ba7565b6111dd33868686611d68565b915061066681611ce4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926112359261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015611252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112769190614660565b6112925760405162461bcd60e51b815260040161050c90614682565b6106b482612253565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926112e89261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015611305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113299190614660565b6113455760405162461bcd60e51b815260040161050c90614682565b6106b4826122ce565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261139b9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa1580156113b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dc9190614660565b6113f85760405162461bcd60e51b815260040161050c90614682565b600061140585858561234b565b509150505b9392505050565b601454604051632d182be560e21b8152600481018390526001600160a01b0384811660248301523060448301529091169063b460af94906064016020604051808303816000875af115801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e91906146aa565b505050565b60008060006114a181611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150591906146aa565b50611511333386612445565b9250925061151e81611ce4565b50915091565b6013546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061155990869030908790600401614789565b6020604051808303816000875af1158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190614660565b6115d15760405162461bcd60e51b815260040161050c906020808252600490820152631cd95b9960e21b604082015260600190565b6110cb82611757565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165791906146c3565b6001600160a01b0316336001600160a01b03161480156116d45750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190614660565b8061175157506000546001600160a01b0316331480156117515750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117519190614660565b91505090565b601454604051636e553f6560e01b8152600481018390523060248201526001600160a01b0390911690636e553f65906044016020604051808303816000875af11580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f91906146aa565b60008060006117da81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e91906146aa565b5061184a338686612445565b9250925061185781611ce4565b509250929050565b6014546040516370a0823160e01b81523060048201526000916001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d491906146aa565b6040518263ffffffff1660e01b81526004016118f291815260200190565b602060405180830381865afa15801561190f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae191906146aa565b60008061193f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561197f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a391906146aa565b506110bf33600085612854565b6060600360006119be612e9c565b90508160ff1681516119d091906146f6565b67ffffffffffffffff8111156119e8576119e8614460565b604051908082528060200260200182016040528015611a11578160200160208202803683370190505b50925060005b8151811015611a7757818181518110611a3257611a3261470e565b6020026020010151848281518110611a4c57611a4c61470e565b6001600160e01b03199092166020928302919091019091015280611a6f81614724565b915050611a17565b50805163cb2ef6f760e01b908490611a8e8561473f565b9450611a9d9060ff86166146f6565b81518110611aad57611aad61470e565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b908490611adc8561473f565b9450611aeb9060ff86166146f6565b81518110611afb57611afb61470e565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610e238561473f565b6000806000611b3881611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c91906146aa565b506115113385613264565b600054600160a01b900460ff16611bed5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015260640161050c565b80611c5b57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c4257600080fd5b505af1158015611c56573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611ca057611ca0614773565b836061811115611cb257611cb2614773565b60408051928352602083019190915260009082015260600160405180910390a18260118111156106b1576106b1614773565b6000805460ff60a01b1916600160a01b17905580611d6557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050505b50565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0091906146aa565b90508015611e1d57611e156003601d8361366f565b91505061224b565b846001600160a01b0316846001600160a01b03161415611e4357611e156006601e611c6b565b611ea8604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611ecb9085613711565b6020830181905282826003811115611ee557611ee5614773565b6003811115611ef657611ef6614773565b9052506000905081516003811115611f1057611f10614773565b14611f4057611f376009601c83600001516003811115611f3257611f32614773565b61366f565b9250505061224b565b611f5f846040518060200160405280666379da05b6000081525061373c565b6080820152604080516020810190915267016345785d8a00008152611f8590859061373c565b61014082018190526080820151611f9c908661475c565b611fa6919061475c565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200d91906146aa565b60c082019081526040805160208101909152905181526080820151612032919061375f565b60a0820152604080516020810190915260c08201518152610140820151612059919061375f565b61016082015260a0810151600c5461207191906146f6565b60e08201526101408101516080820151600f5461208e919061475c565b612098919061475c565b610120820152610160810151600e546120b191906146f6565b6101008201526001600160a01b03861660009081526010602052604090205460608201516120df9190613777565b60408301819052828260038111156120f9576120f9614773565b600381111561210a5761210a614773565b905250600090508151600381111561212457612124614773565b1461214657611f376009601b83600001516003811115611f3257611f32614773565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b168082529084902092909255606085015192519283529092909160008051602061482f833981519152910160405180910390a3306001600160a01b0316856001600160a01b031660008051602061482f83398151915283608001516040516121f391815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061225f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561229f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c391906146aa565b506110bf338461379d565b6000806122da81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e91906146aa565b506110bf33846000612854565b600080600061235981611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612399573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bd91906146aa565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156123fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242291906146aa565b5061242f33878787613b38565b9250925061243c81611ce4565b50935093915050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af11580156124b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d791906146aa565b905080156124f8576124ec600360438361366f565b6000925092505061284c565b436009541461250d576124ec600a6044611c6b565b6125566040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156125c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e491906146aa565b6080820152600019851415612602576080810151604082015261260a565b604081018590525b612618878260400151611524565b60e08201819052608082015161262d91613711565b60a083018190526020830182600381111561264a5761264a614773565b600381111561265b5761265b614773565b905250600090508160200151600381111561267857612678614773565b146126eb5760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c4544000000000000606482015260840161050c565b6126fb600b548260e00151613711565b60c083018190526020830182600381111561271857612718614773565b600381111561272957612729614773565b905250600090508160200151600381111561274657612746614773565b146127ad5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b606482015260840161050c565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b6000821580612861575081155b6128ad5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e740000000000000000604482015260640161050c565b6128ee6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295091906146aa565b60408201528315612a135761138884600f5461296c919061475c565b101561297857600f5493505b60608101849052604080516020810182529082015181526129999085613ff5565b60808301819052602083018260038111156129b6576129b6614773565b60038111156129c7576129c7614773565b90525060009050816020015160038111156129e4576129e4614773565b14612a0e57612a066009602c83602001516003811115611f3257611f32614773565b91505061140a565b612b5b565b600019831415612aa157600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e91906146aa565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0591906146aa565b90506103e8612b14858361475c565b1015612b1e578093505b612b2c848360400151614047565b60608301819052600f546103e891612b439161475c565b1015612b5257600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612b999130918b9190600401614789565b6020604051808303816000875af1158015612bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdc91906146aa565b90508015612bfa57612bf16003602b8361366f565b9250505061140a565b4360095414612c0f57612bf1600a602f611c6b565b612c1f600f548360600151613711565b60a0840181905260208401826003811115612c3c57612c3c614773565b6003811115612c4d57612c4d614773565b9052506000905082602001516003811115612c6a57612c6a614773565b14612c8c57612bf16009603184602001516003811115611f3257611f32614773565b6001600160a01b0386166000908152601060205260409020546060830151612cb49190613711565b60c0840181905260208401826003811115612cd157612cd1614773565b6003811115612ce257612ce2614773565b9052506000905082602001516003811115612cff57612cff614773565b14612d2157612bf16009603084602001516003811115611f3257611f32614773565b8160800151612d2e61185f565b1015612d4057612bf1600e6032611c6b565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612d76908790611411565b306001600160a01b0316866001600160a01b031660008051602061482f8339815191528460600151604051612dad91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b5060009250612e92915050565b9695505050505050565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81612ed88461473f565b93508360ff1681518110612eee57612eee61470e565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81612f198461473f565b93508360ff1681518110612f2f57612f2f61470e565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81612f5a8461473f565b93508360ff1681518110612f7057612f7061470e565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b81612f9b8461473f565b93508360ff1681518110612fb157612fb161470e565b6001600160e01b03199092166020928302919091019091015263073a938160e11b81612fdc8461473f565b93508360ff1681518110612ff257612ff261470e565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b8161301d8461473f565b93508360ff16815181106130335761303361470e565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b8161305e8461473f565b93508360ff16815181106130745761307461470e565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b8161309f8461473f565b93508360ff16815181106130b5576130b561470e565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b816130e08461473f565b93508360ff16815181106130f6576130f661470e565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816131218461473f565b93508360ff16815181106131375761313761470e565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816131628461473f565b93508360ff16815181106131785761317861470e565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816131a38461473f565b93508360ff16815181106131b9576131b961470e565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b816131e48461473f565b93508360ff16815181106131fa576131fa61470e565b6001600160e01b03199092166020928302919091019091015260ff8216156106b45760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161050c565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e1906132a290309089908990600401614789565b6020604051808303816000875af11580156132c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e591906146aa565b90508015613306576132fa600360218361366f565b60009250925050613668565b436009541461331b576132fa600a6024611c6b565b61335c6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133be91906146aa565b60408201526133cd8686611524565b60c08201819052604080516020810182529083015181526133ee9190614082565b606083018190526020830182600381111561340b5761340b614773565b600381111561341c5761341c614773565b905250600090508160200151600381111561343957613439614773565b146134865760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c4544604482015260640161050c565b60008160600151116134da5760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a4543544544000000000000604482015260640161050c565b8060600151600f546134ec91906146f6565b608082015260608101516001600160a01b03871660009081526010602052604090205461351991906146f6565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b031660008051602061482f83398151915283606001516040516135c891815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561363b57600080fd5b505af115801561364f573d6000803e3d6000fd5b506000925061365c915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08460118111156136a4576136a4614773565b8460618111156136b6576136b6614773565b604080519283526020830191909152810184905260600160405180910390a160038460118111156136e9576136e9614773565b146137055783601181111561370057613700614773565b61224b565b61224b826103e86146f6565b600080838311613730576000613727848661475c565b91509150613668565b50600390506000613668565b6000670de0b6b3a7640000613755848460000151614092565b6106b191906147c3565b60008061376c84846140d4565b905061224b81614105565b60008083830184811061378f57600092509050613668565b600260009250925050613668565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c906137da90309088908890600401614789565b6020604051808303816000875af11580156137f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381d91906146aa565b9050801561383a57613832600360108361366f565b9150506106b4565b436009541461384f57613832600a600c611c6b565b600061385961185f565b9050838110156138785761386f600e600b611c6b565b925050506106b4565b6138a4604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391191906146aa565b602082018190526139229086613777565b604083018190528282600381111561393c5761393c614773565b600381111561394d5761394d614773565b905250600090508151600381111561396757613967614773565b14613993576139896009600e83600001516003811115611f3257611f32614773565b93505050506106b4565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156139ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1091906146aa565b92508215613a2557613989600360108561366f565b613a31600b5486613777565b6060830181905282826003811115613a4b57613a4b614773565b6003811115613a5c57613a5c614773565b9052506000905081516003811115613a7657613a76614773565b14613a98576139896009600d83600001516003811115611f3257611f32614773565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b55613ad48686611411565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd291906146aa565b90508015613bf357613be7600360148361366f565b60009250925050613fec565b4360095414613c0857613be7600a6018611c6b565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6b91906146aa565b14613c7c57613be7600a6013611c6b565b866001600160a01b0316866001600160a01b03161415613ca257613be760066019611c6b565b84613cb357613be760076017611c6b565b600019851415613cc957613be760076016611c6b565b600080613cd7898989612445565b90925090508115613d0c57613cfe826011811115613cf757613cf7614773565b601a611c6b565b600094509450505050613fec565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b90613d499030908c908890600401614789565b6040805180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8991906147d7565b90925090508115613df85760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161050c565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6591906146aa565b1015613eb35760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000604482015260640161050c565b60006001600160a01b038916301415613ed957613ed2308d8d85611d68565b9050613f4f565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613f09908f908f908790600401614789565b6020604051808303816000875af1158015613f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4c91906146aa565b90505b8015613f865760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b604482015260640161050c565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b600080600080614005868661411d565b9092509050600082600381111561401e5761401e614773565b1461402f5750915060009050613668565b600061403a82614105565b9350935050509250929050565b60008161405c84670de0b6b3a76400006147fb565b61406691906147c3565b9050614072828461481a565b156106b4576106b16001826146f6565b6000806000806140058686614199565b60006106b183836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061420c565b60408051602081019091526000815260405180602001604052806140fc856000015185614092565b90529392505050565b80516000906106b490670de0b6b3a7640000906147c3565b60006141356040518060200160405280600081525090565b60008061414686600001518661425f565b9092509050600082600381111561415f5761415f614773565b1461417e57506040805160208101909152600081529092509050613668565b60408051602081019091529081526000969095509350505050565b60006141b16040518060200160405280600081525090565b6000806141c6670de0b6b3a76400008761425f565b909250905060008260038111156141df576141df614773565b146141fe57506040805160208101909152600081529092509050613668565b61403a81866000015161429e565b6000831580614219575082155b156142265750600061140a565b600061423284866147fb565b90508361423f86836147c3565b148390610ace5760405162461bcd60e51b815260040161050c91906143d5565b6000808361427257506000905080613668565b8383028361428086836147c3565b1461429357600260009250925050613668565b600092509050613668565b60006142b66040518060200160405280600081525090565b6000806142cb86670de0b6b3a764000061425f565b909250905060008260038111156142e4576142e4614773565b1461430357506040805160208101909152600081529092509050613668565b6000806143108388614369565b9092509050600082600381111561432957614329614773565b1461434c5781604051806020016040528060008152509550955050505050613668565b604080516020810190915290815260009890975095505050505050565b6000808261437d5750600190506000613668565b600061438984866147c3565b915091509250929050565b6001600160a01b0381168114611d6557600080fd5b600080604083850312156143bc57600080fd5b82356143c781614394565b946020939093013593505050565b600060208083528351808285015260005b81811015614402578581018301518582016040015282016143e6565b81811115614414576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561443c57600080fd5b5035919050565b60006020828403121561445557600080fd5b813561140a81614394565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561448857600080fd5b813567ffffffffffffffff808211156144a057600080fd5b818401915084601f8301126144b457600080fd5b8135818111156144c6576144c6614460565b604051601f8201601f19908116603f011681019083821181831017156144ee576144ee614460565b8160405282815287602084870101111561450757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b818110156145695783516001600160e01b03191683529284019291840191600101614543565b50909695505050505050565b60008060006060848603121561458a57600080fd5b833561459581614394565b925060208401356145a581614394565b929592945050506040919091013590565b6000806000606084860312156145cb57600080fd5b83356145d681614394565b92506020840135915060408401356145ed81614394565b809150509250925092565b600181811c9082168061460c57607f821691505b602082108114156110cb57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561467257600080fd5b8151801515811461140a57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000602082840312156146bc57600080fd5b5051919050565b6000602082840312156146d557600080fd5b815161140a81614394565b634e487b7160e01b600052601160045260246000fd5b60008219821115614709576147096146e0565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614738576147386146e0565b5060010190565b600060ff821680614752576147526146e0565b6000190192915050565b60008282101561476e5761476e6146e0565b500390565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b6000826147d2576147d26147ad565b500490565b600080604083850312156147ea57600080fd5b505080516020909101519092909150565b6000816000190483118215151615614815576148156146e0565b500290565b600082614829576148296147ad565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "494:3909:7:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c806389f8132e11610130578063b2a02ff1116100b8578063cb2ef6f71161007c578063cb2ef6f71461045d578063db006a751461048d578063ef01df4f146104a0578063f3fdb15a146104b3578063f5e3c462146104c657600080fd5b8063b2a02ff11461040c578063be99f1191461041f578063c3bf11cd1461042e578063c5ebeaec14610437578063c91a424f1461044a57600080fd5b80639826394b116100ff5780639826394b146103c1578063a0712d68146103ca578063a7b820df146103dd578063aa5af0fd146103f0578063b0d58e49146103f957600080fd5b806389f8132e146103925780638d02d9a1146103a75780638f840ddd146103b057806395d89b41146103b957600080fd5b8063313ce567116101be57806361feacff1161018257806361feacff1461034c5780636752e702146103555780636c540baf146103635780636f307dc31461036c578063852a12e31461037f57600080fd5b8063313ce567146102eb5780633b1d21a2146102f857806347bd37181461030057806356e67728146103095780635fe3b5671461031c57600080fd5b8063173b990411610205578063173b99041461029e57806318160ddd146102a757806319f496c8146102b05780632608f818146102c35780632c436e5b146102d657600080fd5b8063067db1b31461023757806306fdde031461024c5780630e7527021461026a578063135f13341461028b575b600080fd5b61024a6102453660046143a9565b6104d9565b005b610254610523565b60405161026191906143d5565b60405180910390f35b61027d61027836600461442a565b6105b1565b604051908152602001610261565b61027d6102993660046143a9565b61066e565b61027d60085481565b61027d600f5481565b61024a6102be366004614443565b6106ba565b61027d6102d13660046143a9565b610a18565b60025b60405160ff9091168152602001610261565b6003546102d99060ff1681565b61027d610ad7565b61027d600b5481565b61024a610317366004614476565b610ae6565b6003546103349061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610261565b61027d600d5481565b61027d666379da05b6000081565b61027d60095481565b601354610334906001600160a01b031681565b61027d61038d36600461442a565b610c44565b61039a610cf7565b6040516102619190614527565b61027d60065481565b61027d600c5481565b610254610eb1565b61027d600e5481565b61027d6103d836600461442a565b610ebe565b61027d6103eb36600461442a565b610f73565b61027d600a5481565b61027d61040736600461442a565b6110d1565b61027d61041a366004614575565b6111c4565b61027d67016345785d8a000081565b61027d60075481565b61027d61044536600461442a565b6111e8565b600054610334906001600160a01b031681565b604080518082019091526014815273434572633230506c7567696e44656c656761746560601b6020820152610254565b61027d61049b36600461442a565b61129b565b601454610334906001600160a01b031681565b600454610334906001600160a01b031681565b61027d6104d43660046145b6565b61134e565b3330146105155760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b61051f8282611411565b5050565b60018054610530906145f8565b80601f016020809104026020016040519081016040528092919081815260200182805461055c906145f8565b80156105a95780601f1061057e576101008083540402835291602001916105a9565b820191906000526020600020905b81548152906001019060200180831161058c57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105fe9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa15801561061b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063f9190614660565b61065b5760405162461bcd60e51b815260040161050c90614682565b600061066683611493565b509392505050565b60003330146106a75760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b604482015260640161050c565b6106b18383611524565b90505b92915050565b333014806106cb57506106cb6115da565b61072b5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f7560448201526a383230ba32a8363ab3b4b760a91b606482015260840161050c565b6014546000906001600160a01b03166107445781610751565b6014546001600160a01b03165b6014549091506001600160a01b0316158015906107d857506014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d591906146aa565b15155b156108c2576014546040516370a0823160e01b81523060048201526001600160a01b039091169063ba0876529082906370a0823190602401602060405180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085191906146aa565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303816000875af115801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c091906146aa565b505b601480546001600160a01b0319166001600160a01b0384811691821790925560135460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b3906044016020604051808303816000875af115801561092d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109519190614660565b506013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf91906146aa565b905080156109d0576109d081611757565b604080516001600160a01b038085168252851660208201527fb32957d2794aaec3ea2c8852833af2192fe9fb518777de1f883e9e821781da75910160405180910390a1505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610a659261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190614660565b610ac25760405162461bcd60e51b815260040161050c90614682565b6000610ace84846117cc565b50949350505050565b6000610ae161185f565b905090565b33301480610af75750610af76115da565b610b5f5760405162461bcd60e51b815260206004820152603360248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f6260448201527232b1b7b6b2a4b6b83632b6b2b73a30ba34b7b760691b606482015260840161050c565b600081806020019051810190610b7591906146c3565b90506001600160a01b038116158015610b9857506014546001600160a01b031615155b15610c10576000546014546040516381218ea960e01b81526001600160a01b0391821660048201529116906381218ea990602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d91906146c3565b90505b6001600160a01b03811615801590610c3657506014546001600160a01b03828116911614155b1561051f5761051f816106ba565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610c919261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190614660565b610cee5760405162461bcd60e51b815260040161050c90614682565b6106b482611933565b606060026000610d056119b0565b90508160ff168151610d1791906146f6565b67ffffffffffffffff811115610d2f57610d2f614460565b604051908082528060200260200182016040528015610d58578160200160208202803683370190505b50925060005b8151811015610dbe57818181518110610d7957610d7961470e565b6020026020010151848281518110610d9357610d9361470e565b6001600160e01b03199092166020928302919091019091015280610db681614724565b915050610d5e565b50805163ef01df4f60e01b908490610dd58561473f565b9450610de49060ff86166146f6565b81518110610df457610df461470e565b6001600160e01b031990921660209283029190910190910152805163033e92d960e31b908490610e238561473f565b9450610e329060ff86166146f6565b81518110610e4257610e4261470e565b6001600160e01b03199092166020928302919091019091015260ff821615610eac5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161050c565b505090565b60028054610530906145f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f0b9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c9190614660565b610f685760405162461bcd60e51b815260040161050c90614682565b600061066683611b2a565b600080610f7f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe391906146aa565b50436009541461100057610ff9600a6039611c6b565b91506110c2565b8261100961185f565b101561101b57610ff9600e6038611c6b565b600d5483111561103157610ff96002603a611c6b565b82600d5461103f919061475c565b600d55600354604080516303e1469160e61b815290516110bc9261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b691906146c3565b84611411565b60005b91505b6110cb81611ce4565b50919050565b6000806110dd81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561111d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114191906146aa565b50436009541461115757610ff9600a6035611c6b565b8261116061185f565b101561117257610ff9600e6034611c6b565b600e5483111561118857610ff960026036611c6b565b600083600e54611198919061475c565b600e8190556000549091506111b6906001600160a01b031685611411565b60009250506110cb81611ce4565b600060016111d181611ba7565b6111dd33868686611d68565b915061066681611ce4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926112359261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015611252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112769190614660565b6112925760405162461bcd60e51b815260040161050c90614682565b6106b482612253565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926112e89261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015611305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113299190614660565b6113455760405162461bcd60e51b815260040161050c90614682565b6106b4826122ce565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261139b9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa1580156113b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dc9190614660565b6113f85760405162461bcd60e51b815260040161050c90614682565b600061140585858561234b565b509150505b9392505050565b601454604051632d182be560e21b8152600481018390526001600160a01b0384811660248301523060448301529091169063b460af94906064016020604051808303816000875af115801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e91906146aa565b505050565b60008060006114a181611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150591906146aa565b50611511333386612445565b9250925061151e81611ce4565b50915091565b6013546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061155990869030908790600401614789565b6020604051808303816000875af1158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190614660565b6115d15760405162461bcd60e51b815260040161050c906020808252600490820152631cd95b9960e21b604082015260600190565b6110cb82611757565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165791906146c3565b6001600160a01b0316336001600160a01b03161480156116d45750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190614660565b8061175157506000546001600160a01b0316331480156117515750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117519190614660565b91505090565b601454604051636e553f6560e01b8152600481018390523060248201526001600160a01b0390911690636e553f65906044016020604051808303816000875af11580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f91906146aa565b60008060006117da81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e91906146aa565b5061184a338686612445565b9250925061185781611ce4565b509250929050565b6014546040516370a0823160e01b81523060048201526000916001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d491906146aa565b6040518263ffffffff1660e01b81526004016118f291815260200190565b602060405180830381865afa15801561190f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae191906146aa565b60008061193f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561197f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a391906146aa565b506110bf33600085612854565b6060600360006119be612e9c565b90508160ff1681516119d091906146f6565b67ffffffffffffffff8111156119e8576119e8614460565b604051908082528060200260200182016040528015611a11578160200160208202803683370190505b50925060005b8151811015611a7757818181518110611a3257611a3261470e565b6020026020010151848281518110611a4c57611a4c61470e565b6001600160e01b03199092166020928302919091019091015280611a6f81614724565b915050611a17565b50805163cb2ef6f760e01b908490611a8e8561473f565b9450611a9d9060ff86166146f6565b81518110611aad57611aad61470e565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b908490611adc8561473f565b9450611aeb9060ff86166146f6565b81518110611afb57611afb61470e565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610e238561473f565b6000806000611b3881611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c91906146aa565b506115113385613264565b600054600160a01b900460ff16611bed5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015260640161050c565b80611c5b57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c4257600080fd5b505af1158015611c56573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611ca057611ca0614773565b836061811115611cb257611cb2614773565b60408051928352602083019190915260009082015260600160405180910390a18260118111156106b1576106b1614773565b6000805460ff60a01b1916600160a01b17905580611d6557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050505b50565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0091906146aa565b90508015611e1d57611e156003601d8361366f565b91505061224b565b846001600160a01b0316846001600160a01b03161415611e4357611e156006601e611c6b565b611ea8604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611ecb9085613711565b6020830181905282826003811115611ee557611ee5614773565b6003811115611ef657611ef6614773565b9052506000905081516003811115611f1057611f10614773565b14611f4057611f376009601c83600001516003811115611f3257611f32614773565b61366f565b9250505061224b565b611f5f846040518060200160405280666379da05b6000081525061373c565b6080820152604080516020810190915267016345785d8a00008152611f8590859061373c565b61014082018190526080820151611f9c908661475c565b611fa6919061475c565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200d91906146aa565b60c082019081526040805160208101909152905181526080820151612032919061375f565b60a0820152604080516020810190915260c08201518152610140820151612059919061375f565b61016082015260a0810151600c5461207191906146f6565b60e08201526101408101516080820151600f5461208e919061475c565b612098919061475c565b610120820152610160810151600e546120b191906146f6565b6101008201526001600160a01b03861660009081526010602052604090205460608201516120df9190613777565b60408301819052828260038111156120f9576120f9614773565b600381111561210a5761210a614773565b905250600090508151600381111561212457612124614773565b1461214657611f376009601b83600001516003811115611f3257611f32614773565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b168082529084902092909255606085015192519283529092909160008051602061482f833981519152910160405180910390a3306001600160a01b0316856001600160a01b031660008051602061482f83398151915283608001516040516121f391815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061225f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561229f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c391906146aa565b506110bf338461379d565b6000806122da81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e91906146aa565b506110bf33846000612854565b600080600061235981611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612399573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bd91906146aa565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156123fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242291906146aa565b5061242f33878787613b38565b9250925061243c81611ce4565b50935093915050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af11580156124b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d791906146aa565b905080156124f8576124ec600360438361366f565b6000925092505061284c565b436009541461250d576124ec600a6044611c6b565b6125566040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156125c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e491906146aa565b6080820152600019851415612602576080810151604082015261260a565b604081018590525b612618878260400151611524565b60e08201819052608082015161262d91613711565b60a083018190526020830182600381111561264a5761264a614773565b600381111561265b5761265b614773565b905250600090508160200151600381111561267857612678614773565b146126eb5760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c4544000000000000606482015260840161050c565b6126fb600b548260e00151613711565b60c083018190526020830182600381111561271857612718614773565b600381111561272957612729614773565b905250600090508160200151600381111561274657612746614773565b146127ad5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b606482015260840161050c565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b6000821580612861575081155b6128ad5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e740000000000000000604482015260640161050c565b6128ee6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295091906146aa565b60408201528315612a135761138884600f5461296c919061475c565b101561297857600f5493505b60608101849052604080516020810182529082015181526129999085613ff5565b60808301819052602083018260038111156129b6576129b6614773565b60038111156129c7576129c7614773565b90525060009050816020015160038111156129e4576129e4614773565b14612a0e57612a066009602c83602001516003811115611f3257611f32614773565b91505061140a565b612b5b565b600019831415612aa157600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e91906146aa565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0591906146aa565b90506103e8612b14858361475c565b1015612b1e578093505b612b2c848360400151614047565b60608301819052600f546103e891612b439161475c565b1015612b5257600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612b999130918b9190600401614789565b6020604051808303816000875af1158015612bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdc91906146aa565b90508015612bfa57612bf16003602b8361366f565b9250505061140a565b4360095414612c0f57612bf1600a602f611c6b565b612c1f600f548360600151613711565b60a0840181905260208401826003811115612c3c57612c3c614773565b6003811115612c4d57612c4d614773565b9052506000905082602001516003811115612c6a57612c6a614773565b14612c8c57612bf16009603184602001516003811115611f3257611f32614773565b6001600160a01b0386166000908152601060205260409020546060830151612cb49190613711565b60c0840181905260208401826003811115612cd157612cd1614773565b6003811115612ce257612ce2614773565b9052506000905082602001516003811115612cff57612cff614773565b14612d2157612bf16009603084602001516003811115611f3257611f32614773565b8160800151612d2e61185f565b1015612d4057612bf1600e6032611c6b565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612d76908790611411565b306001600160a01b0316866001600160a01b031660008051602061482f8339815191528460600151604051612dad91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b5060009250612e92915050565b9695505050505050565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81612ed88461473f565b93508360ff1681518110612eee57612eee61470e565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81612f198461473f565b93508360ff1681518110612f2f57612f2f61470e565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81612f5a8461473f565b93508360ff1681518110612f7057612f7061470e565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b81612f9b8461473f565b93508360ff1681518110612fb157612fb161470e565b6001600160e01b03199092166020928302919091019091015263073a938160e11b81612fdc8461473f565b93508360ff1681518110612ff257612ff261470e565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b8161301d8461473f565b93508360ff16815181106130335761303361470e565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b8161305e8461473f565b93508360ff16815181106130745761307461470e565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b8161309f8461473f565b93508360ff16815181106130b5576130b561470e565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b816130e08461473f565b93508360ff16815181106130f6576130f661470e565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816131218461473f565b93508360ff16815181106131375761313761470e565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816131628461473f565b93508360ff16815181106131785761317861470e565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816131a38461473f565b93508360ff16815181106131b9576131b961470e565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b816131e48461473f565b93508360ff16815181106131fa576131fa61470e565b6001600160e01b03199092166020928302919091019091015260ff8216156106b45760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161050c565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e1906132a290309089908990600401614789565b6020604051808303816000875af11580156132c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e591906146aa565b90508015613306576132fa600360218361366f565b60009250925050613668565b436009541461331b576132fa600a6024611c6b565b61335c6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133be91906146aa565b60408201526133cd8686611524565b60c08201819052604080516020810182529083015181526133ee9190614082565b606083018190526020830182600381111561340b5761340b614773565b600381111561341c5761341c614773565b905250600090508160200151600381111561343957613439614773565b146134865760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c4544604482015260640161050c565b60008160600151116134da5760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a4543544544000000000000604482015260640161050c565b8060600151600f546134ec91906146f6565b608082015260608101516001600160a01b03871660009081526010602052604090205461351991906146f6565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b031660008051602061482f83398151915283606001516040516135c891815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561363b57600080fd5b505af115801561364f573d6000803e3d6000fd5b506000925061365c915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08460118111156136a4576136a4614773565b8460618111156136b6576136b6614773565b604080519283526020830191909152810184905260600160405180910390a160038460118111156136e9576136e9614773565b146137055783601181111561370057613700614773565b61224b565b61224b826103e86146f6565b600080838311613730576000613727848661475c565b91509150613668565b50600390506000613668565b6000670de0b6b3a7640000613755848460000151614092565b6106b191906147c3565b60008061376c84846140d4565b905061224b81614105565b60008083830184811061378f57600092509050613668565b600260009250925050613668565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c906137da90309088908890600401614789565b6020604051808303816000875af11580156137f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381d91906146aa565b9050801561383a57613832600360108361366f565b9150506106b4565b436009541461384f57613832600a600c611c6b565b600061385961185f565b9050838110156138785761386f600e600b611c6b565b925050506106b4565b6138a4604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391191906146aa565b602082018190526139229086613777565b604083018190528282600381111561393c5761393c614773565b600381111561394d5761394d614773565b905250600090508151600381111561396757613967614773565b14613993576139896009600e83600001516003811115611f3257611f32614773565b93505050506106b4565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156139ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1091906146aa565b92508215613a2557613989600360108561366f565b613a31600b5486613777565b6060830181905282826003811115613a4b57613a4b614773565b6003811115613a5c57613a5c614773565b9052506000905081516003811115613a7657613a76614773565b14613a98576139896009600d83600001516003811115611f3257611f32614773565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b55613ad48686611411565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd291906146aa565b90508015613bf357613be7600360148361366f565b60009250925050613fec565b4360095414613c0857613be7600a6018611c6b565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6b91906146aa565b14613c7c57613be7600a6013611c6b565b866001600160a01b0316866001600160a01b03161415613ca257613be760066019611c6b565b84613cb357613be760076017611c6b565b600019851415613cc957613be760076016611c6b565b600080613cd7898989612445565b90925090508115613d0c57613cfe826011811115613cf757613cf7614773565b601a611c6b565b600094509450505050613fec565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b90613d499030908c908890600401614789565b6040805180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8991906147d7565b90925090508115613df85760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161050c565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6591906146aa565b1015613eb35760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000604482015260640161050c565b60006001600160a01b038916301415613ed957613ed2308d8d85611d68565b9050613f4f565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613f09908f908f908790600401614789565b6020604051808303816000875af1158015613f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4c91906146aa565b90505b8015613f865760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b604482015260640161050c565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b600080600080614005868661411d565b9092509050600082600381111561401e5761401e614773565b1461402f5750915060009050613668565b600061403a82614105565b9350935050509250929050565b60008161405c84670de0b6b3a76400006147fb565b61406691906147c3565b9050614072828461481a565b156106b4576106b16001826146f6565b6000806000806140058686614199565b60006106b183836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061420c565b60408051602081019091526000815260405180602001604052806140fc856000015185614092565b90529392505050565b80516000906106b490670de0b6b3a7640000906147c3565b60006141356040518060200160405280600081525090565b60008061414686600001518661425f565b9092509050600082600381111561415f5761415f614773565b1461417e57506040805160208101909152600081529092509050613668565b60408051602081019091529081526000969095509350505050565b60006141b16040518060200160405280600081525090565b6000806141c6670de0b6b3a76400008761425f565b909250905060008260038111156141df576141df614773565b146141fe57506040805160208101909152600081529092509050613668565b61403a81866000015161429e565b6000831580614219575082155b156142265750600061140a565b600061423284866147fb565b90508361423f86836147c3565b148390610ace5760405162461bcd60e51b815260040161050c91906143d5565b6000808361427257506000905080613668565b8383028361428086836147c3565b1461429357600260009250925050613668565b600092509050613668565b60006142b66040518060200160405280600081525090565b6000806142cb86670de0b6b3a764000061425f565b909250905060008260038111156142e4576142e4614773565b1461430357506040805160208101909152600081529092509050613668565b6000806143108388614369565b9092509050600082600381111561432957614329614773565b1461434c5781604051806020016040528060008152509550955050505050613668565b604080516020810190915290815260009890975095505050505050565b6000808261437d5750600190506000613668565b600061438984866147c3565b915091509250929050565b6001600160a01b0381168114611d6557600080fd5b600080604083850312156143bc57600080fd5b82356143c781614394565b946020939093013593505050565b600060208083528351808285015260005b81811015614402578581018301518582016040015282016143e6565b81811115614414576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561443c57600080fd5b5035919050565b60006020828403121561445557600080fd5b813561140a81614394565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561448857600080fd5b813567ffffffffffffffff808211156144a057600080fd5b818401915084601f8301126144b457600080fd5b8135818111156144c6576144c6614460565b604051601f8201601f19908116603f011681019083821181831017156144ee576144ee614460565b8160405282815287602084870101111561450757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b818110156145695783516001600160e01b03191683529284019291840191600101614543565b50909695505050505050565b60008060006060848603121561458a57600080fd5b833561459581614394565b925060208401356145a581614394565b929592945050506040919091013590565b6000806000606084860312156145cb57600080fd5b83356145d681614394565b92506020840135915060408401356145ed81614394565b809150509250925092565b600181811c9082168061460c57607f821691505b602082108114156110cb57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561467257600080fd5b8151801515811461140a57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000602082840312156146bc57600080fd5b5051919050565b6000602082840312156146d557600080fd5b815161140a81614394565b634e487b7160e01b600052601160045260246000fd5b60008219821115614709576147096146e0565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614738576147386146e0565b5060010190565b600060ff821680614752576147526146e0565b6000190192915050565b60008282101561476e5761476e6146e0565b500390565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b6000826147d2576147d26147ad565b500490565b600080604083850312156147ea57600080fd5b505080516020909101519092909150565b6000816000190483118215151615614815576148156146e0565b500290565b600082614829576148296147ad565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "494:3909:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6703:158:10;;;;;;:::i;:::-;;:::i;:::-;;580:18:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4337:168:10;;;;;;:::i;:::-;;:::i;:::-;;;1403:25:486;;;1391:2;1376:18;4337:168:10;1257:177:486;6865:185:10;;;;;;:::i;:::-;;:::i;1783:36:12:-;;;;;;2626:26;;;;;;2228:717:7;;;;;;:::i;:::-;;:::i;4771:208:10:-;;;;;;:::i;:::-;;:::i;4190:88:7:-;4272:1;4190:88;;;1863:4:486;1851:17;;;1833:36;;1821:2;1806:18;4190:88:7;1691:184:486;750:21:12;;;;;;;;;5851:95:10;;;:::i;2162:27:12:-;;;;;;1482:584:7;;;;;;:::i;:::-;;:::i;1148:35:12:-;;;;;;;;-1:-1:-1;;;;;1148:35:12;;;;;;-1:-1:-1;;;;;3128:32:486;;;3110:51;;3098:2;3083:18;1148:35:12;2938:229:486;2405:29:12;;;;;;3491:59;;3544:6;3491:59;;1896:33;;;;;;3740:25;;;;;-1:-1:-1;;;;;3740:25:12;;;3617:153:10;;;;;;:::i;:::-;;:::i;681:672:7:-;;;:::i;:::-;;;;;;;:::i;1551:31:12:-;;;;;;2282:28;;;;;;663:20;;;:::i;2529:29::-;;;;;;2669:152:10;;;;;;:::i;:::-;;:::i;8504:1035::-;;;;;;:::i;:::-;;:::i;2037:26:12:-;;;;;;7283:988:10;;;;;;:::i;:::-;;:::i;6476:223::-;;;;;;:::i;:::-;;:::i;3619:52:12:-;;3667:4;3619:52;;1668:31;;;;;;4015:133:10;;;;;;:::i;:::-;;:::i;336:33:12:-;;;;;-1:-1:-1;;;;;336:33:12;;;4282:119:7;4367:29;;;;;;;;;;;;-1:-1:-1;;;4367:29:7;;;;4282:119;;3150:133:10;;;;;;:::i;:::-;;:::i;654:22:7:-;;;;;-1:-1:-1;;;;;654:22:7;;;1272:42:12;;;;;-1:-1:-1;;;;;1272:42:12;;;5433:264:10;;;;;;:::i;:::-;;:::i;6703:158::-;6788:10;6810:4;6788:27;6780:45;;;;-1:-1:-1;;;6780:45:10;;5851:2:486;6780:45:10;;;5833:21:486;5890:1;5870:18;;;5863:29;-1:-1:-1;;;5908:18:486;;;5901:35;5953:18;;6780:45:10;;;;;;;;;6831:25;6845:2;6849:6;6831:13;:25::i;:::-;6703:158;;:::o;580:18:12:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4337:168:10:-;4419:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4435:11:::1;4452:32;4472:11;4452:19;:32::i;:::-;-1:-1:-1::0;4434:50:10;4337:168;-1:-1:-1;;;4337:168:10:o;6865:185::-;6946:7;6969:10;6991:4;6969:27;6961:45;;;;-1:-1:-1;;;6961:45:10;;5851:2:486;6961:45:10;;;5833:21:486;5890:1;5870:18;;;5863:29;-1:-1:-1;;;5908:18:486;;;5901:35;5953:18;;6961:45:10;5649:328:486;6961:45:10;7019:26;7032:4;7038:6;7019:12;:26::i;:::-;7012:33;;6865:185;;;;;:::o;2228:717:7:-;2289:10;2311:4;2289:27;;:47;;;2320:16;:14;:16::i;:::-;2281:103;;;;-1:-1:-1;;;2281:103:7;;7680:2:486;2281:103:7;;;7662:21:486;7719:2;7699:18;;;7692:30;7758:34;7738:18;;;7731:62;-1:-1:-1;;;7809:18:486;;;7802:41;7860:19;;2281:103:7;7478:407:486;2281:103:7;2427:6;;2391:25;;-1:-1:-1;;;;;2427:6:7;2419:57;;2469:7;2419:57;;;2459:6;;-1:-1:-1;;;;;2459:6:7;2419:57;2495:6;;2391:85;;-1:-1:-1;;;;;;2495:6:7;2487:29;;;;:69;;-1:-1:-1;2520:6:7;;:31;;-1:-1:-1;;;2520:31:7;;2545:4;2520:31;;;3110:51:486;-1:-1:-1;;;;;2520:6:7;;;;:16;;3083:18:486;;2520:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;2487:69;2483:166;;;2566:6;;2580:31;;-1:-1:-1;;;2580:31:7;;2605:4;2580:31;;;3110:51:486;-1:-1:-1;;;;;2566:6:7;;;;:13;;:6;;2580:16;;3083:18:486;;2580:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2566:76;;-1:-1:-1;;;;;;2566:76:7;;;;;;;;;;8281:25:486;;;;2621:4:7;8360:18:486;;;8353:43;;;8412:18;;;8405:43;8254:18;;2566:76:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2483:166;2655:6;:26;;-1:-1:-1;;;;;;2655:26:7;-1:-1:-1;;;;;2655:26:7;;;;;;;;;2703:10;;2688:62;;-1:-1:-1;;;2688:62:7;;;;;8633:51:486;;;;-1:-1:-1;;8700:18:486;;;8693:34;2703:10:7;;;;2688:34;;8606:18:486;;2688:62:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2789:10:7;;2774:51;;-1:-1:-1;;;2774:51:7;;2819:4;2774:51;;;3110::486;2757:14:7;;-1:-1:-1;;;;;2789:10:7;;2774:36;;3083:18:486;;2774:51:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2757:68;-1:-1:-1;2835:11:7;;2831:47;;2856:15;2864:6;2856:7;:15::i;:::-;2889:51;;;-1:-1:-1;;;;;8968:15:486;;;8950:34;;9020:15;;9015:2;9000:18;;8993:43;2889:51:7;;8885:18:486;2889:51:7;;;;;;;2275:670;;2228:717;:::o;4771:208:10:-;4877:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4893:11:::1;4910:48;4936:8;4946:11;4910:25;:48::i;:::-;-1:-1:-1::0;4892:66:10;4771:208;-1:-1:-1;;;;4771:208:10:o;5851:95::-;5902:7;5924:17;:15;:17::i;:::-;5917:24;;5851:95;:::o;1482:584:7:-;1570:10;1592:4;1570:27;;:47;;;1601:16;:14;:16::i;:::-;1562:111;;;;-1:-1:-1;;;1562:111:7;;9249:2:486;1562:111:7;;;9231:21:486;9288:2;9268:18;;;9261:30;9327:34;9307:18;;;9300:62;-1:-1:-1;;;9378:18:486;;;9371:49;9437:19;;1562:111:7;9047:415:486;1562:111:7;1680:15;1709:4;1698:27;;;;;;;;;;;;:::i;:::-;1680:45;-1:-1:-1;;;;;;1736:21:7;;;:54;;;;-1:-1:-1;1769:6:7;;-1:-1:-1;;;;;1769:6:7;1761:29;;1736:54;1732:230;;;1900:10;;1947:6;;1884:71;;-1:-1:-1;;;1884:71:7;;-1:-1:-1;;;;;1947:6:7;;;1884:71;;;3110:51:486;1900:10:7;;;1884:54;;3083:18:486;;1884:71:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1874:81;;1732:230;-1:-1:-1;;;;;1972:21:7;;;;;;:51;;-1:-1:-1;2016:6:7;;-1:-1:-1;;;;;1997:26:7;;;2016:6;;1997:26;;1972:51;1968:94;;;2033:22;2047:7;2033:13;:22::i;3617:153:10:-;3705:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;3727:38:::1;3752:12;3727:24;:38::i;681:672:7:-:0;753:33;811:1;794:14;860:30;:28;:30::i;:::-;819:71;;961:8;929:40;;:22;:29;:40;;;;:::i;:::-;916:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;916:54:7;;896:74;;982:9;977:123;1001:22;:29;997:1;:33;977:123;;;1068:22;1091:1;1068:25;;;;;;;;:::i;:::-;;;;;;;1045:17;1063:1;1045:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1045:48:7;;;:20;;;;;;;;;;;:48;1032:3;;;;:::i;:::-;;;;977:123;;;-1:-1:-1;1137:29:7;;-1:-1:-1;;;1170:20:7;1106:17;;1124:10;;;:::i;:::-;;-1:-1:-1;1124:42:7;;;;;;:::i;:::-;1106:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1106:84:7;;;:61;;;;;;;;;;;:84;1227:29;;-1:-1:-1;;;1260:27:7;1196:17;;1214:10;;;:::i;:::-;;-1:-1:-1;1214:42:7;;;;;;:::i;:::-;1196:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1196:91:7;;;:61;;;;;;;;;;;:91;1302:13;;;;1294:54;;;;-1:-1:-1;;;1294:54:7;;10909:2:486;1294:54:7;;;10891:21:486;10948:2;10928:18;;;10921:30;10987;10967:18;;;10960:58;11035:18;;1294:54:7;10707:352:486;1294:54:7;788:565;;681:672;:::o;663:20:12:-;;;;;;;:::i;2669:152:10:-;2743:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;2759:11:::1;2776:24;2789:10;2776:12;:24::i;8504:1035::-:0;8603:7;8587:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;8618:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8687:12;8665:18;;:34;8661:135;;8716:73;8721:22;8745:43;8716:4;:73::i;:::-;8709:80;;;;8661:135;8894:14;8874:17;:15;:17::i;:::-;:34;8870:149;;;8925:87;8930:29;8961:50;8925:4;:87::i;8870:149::-;9046:14;;9029;:31;9025:124;;;9077:65;9082:15;9099:42;9077:4;:65::i;9025:124::-;9293:14;9276;;:31;;;;:::i;:::-;9259:14;:48:::0;9459:11:::1;::::0;9430:50:::1;::::0;;-1:-1:-1;;;9430:50:10;;;;9416:81:::1;::::0;9459:11:::1;::::0;::::1;-1:-1:-1::0;;;;;9459:11:10::1;::::0;9430:48:::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;9459:11;9430:50:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9482:14;9416:13;:81::i;:::-;9519:14;9511:23;9504:30;;41731:1;41738:29:::0;41757:9;41738:18;:29::i;:::-;8504:1035;;;;:::o;7283:988::-;7382:7;7366:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;7397:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7466:12;7444:18;;:34;7440:135;;7495:73;7500:22;7524:43;7495:4;:73::i;7440:135::-;7605:14;7585:17;:15;:17::i;:::-;:34;7581:149;;;7636:87;7641:29;7672:50;7636:4;:87::i;7581:149::-;7757:14;;7740;:31;7736:124;;;7788:65;7793:15;7810:42;7788:4;:65::i;7736:124::-;7971:25;8016:14;7999;;:31;;;;:::i;:::-;8036:14;:34:::0;;;8201:10:::1;::::0;7971:59;;-1:-1:-1;8179:50:10::1;::::0;-1:-1:-1;;;;;8201:10:10::1;8214:14:::0;8179:13:::1;:50::i;:::-;8251:14;8236:30;;;41738:29:::0;41757:9;41738:18;:29::i;6476:223::-;6612:7;6597:4;41695:30;41715:9;41695:19;:30::i;:::-;6634:60:::1;6648:10;6660;6672:8;6682:11;6634:13;:60::i;:::-;6627:67;;41738:29:::0;41757:9;41738:18;:29::i;4015:133::-;4093:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4115:28:::1;4130:12;4115:14;:28::i;3150:133::-:0;3228:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;3250:28:::1;3265:12;3250:14;:28::i;5433:264::-:0;5579:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;5595:11:::1;5612:64;5636:8;5646:11;5659:16;5612:23;:64::i;:::-;-1:-1:-1::0;5594:82:10;-1:-1:-1;;1193:1:10::1;5433:264:::0;;;;;:::o;4064:122:7:-;4139:6;;:42;;-1:-1:-1;;;4139:42:7;;;;;8281:25:486;;;-1:-1:-1;;;;;8380:15:486;;;8360:18;;;8353:43;4175:4:7;8412:18:486;;;8405:43;4139:6:7;;;;:15;;8254:18:486;;4139:42:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4064:122;;:::o;27701:307:10:-;27789:7;27798;27773:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;27813:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27950:53;27967:10;27979;27991:11;27950:16;:53::i;:::-;27943:60;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;27701:307;;;;:::o;3531:263:7:-;3686:10;;3671:68;;-1:-1:-1;;;3671:68:7;;3610:7;;-1:-1:-1;;;;;3686:10:7;;3671:39;;:68;;3711:4;;3725;;3732:6;;3671:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3663:85;;;;-1:-1:-1;;;3663:85:7;;;;;;11908:2:486;11890:21;;;11947:1;11927:18;;;11920:29;-1:-1:-1;;;11980:2:486;11965:18;;11958:34;12024:2;12009:18;;11706:327;3663:85:7;3755:15;3763:6;3755:7;:15::i;10605:339:12:-;10654:4;10666:39;10737:11;;;;;;;;;-1:-1:-1;;;;;10737:11:12;10666:84;;10784:18;-1:-1:-1;;;;;10784:24:12;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10770:40:12;:10;-1:-1:-1;;;;;10770:40:12;;:79;;;;;10814:18;-1:-1:-1;;;;;10814:33:12;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10769:170;;;-1:-1:-1;10883:10:12;;-1:-1:-1;;;;;10883:10:12;10861;:33;:77;;;;;10898:18;-1:-1:-1;;;;;10898:38:12;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10756:183;;;10605:339;:::o;3798:90:7:-;3846:6;;:37;;-1:-1:-1;;;3846:37:7;;;;;12212:25:486;;;3877:4:7;12253:18:486;;;12246:60;-1:-1:-1;;;;;3846:6:7;;;;:14;;12185:18:486;;3846:37:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28319:343:10:-;28443:7;28452;28423:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;28469:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28606:51;28623:10;28635:8;28645:11;28606:16;:51::i;:::-;28599:58;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;28319:343;;;;;;:::o;3152:139:7:-;3233:6;;3254:31;;-1:-1:-1;;;3254:31:7;;3279:4;3254:31;;;3110:51:486;3211:7:7;;-1:-1:-1;;;;;3233:6:7;;:20;;:6;;3254:16;;3083:18:486;;3254:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3233:53;;;;;;;;;;;;;1403:25:486;;1391:2;1376:18;;1257:177;3233:53:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17924:280:10:-;18018:7;18002:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;18033:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:40;18171:10;18183:1;18186:12;18159:11;:40::i;272:782:5:-:0;344:33;402:1;385:14;451:30;:28;:30::i;:::-;410:71;;552:8;520:40;;:22;:29;:40;;;;:::i;:::-;507:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:54:5;;487:74;;573:9;568:123;592:22;:29;588:1;:33;568:123;;;659:22;682:1;659:25;;;;;;;;:::i;:::-;;;;;;;636:17;654:1;636:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;636:48:5;;;:20;;;;;;;;;;;:48;623:3;;;;:::i;:::-;;;;568:123;;;-1:-1:-1;728:29:5;;-1:-1:-1;;;761:26:5;697:17;;715:10;;;:::i;:::-;;-1:-1:-1;715:42:5;;;;;;:::i;:::-;697:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;697:90:5;;;:61;;;;;;;;;;;:90;824:29;;-1:-1:-1;;;857:26:5;793:17;;811:10;;;:::i;:::-;;-1:-1:-1;811:42:5;;;;;;:::i;:::-;793:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;793:90:5;;;:61;;;;;;;;;;;:90;920:29;;-1:-1:-1;;;953:35:5;889:17;;907:10;;;:::i;13048:290:10:-;13128:7;13137;13112:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;13152:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13300:33;13310:10;13322;13300:9;:33::i;42073:178::-:0;42140:11;;-1:-1:-1;;;42140:11:10;;;;42132:34;;;;-1:-1:-1;;;42132:34:10;;12519:2:486;42132:34:10;;;12501:21:486;12558:2;12538:18;;;12531:30;-1:-1:-1;;;12577:18:486;;;12570:40;12627:18;;42132:34:10;12317:334:486;42132:34:10;42177:9;42172:49;;42188:11;;;;;;;;;-1:-1:-1;;;;;42188:11:10;-1:-1:-1;;;;;42188:31:10;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:49;-1:-1:-1;42241:5:10;42227:19;;-1:-1:-1;;;;42227:19:10;;;42073:178::o;7757:151:20:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;12866:25:486;;;12922:2;12907:18;;12900:34;;;;7875:1:20;12950:18:486;;;12943:34;12854:2;12839:18;7838:39:20;;;;;;;7899:3;7891:12;;;;;;;;:::i;42551:169:10:-;42609:11;:18;;-1:-1:-1;;;;42609:18:10;-1:-1:-1;;;42609:18:10;;;42672:9;42667:48;;42683:11;;;;;;;;;-1:-1:-1;;;;;42683:11:10;-1:-1:-1;;;;;42683:30:10;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42667:48;42551:169;:::o;38262:3163::-;38472:11;;:87;;-1:-1:-1;;;38472:87:10;;38505:4;38472:87;;;13285:34:486;-1:-1:-1;;;;;13355:15:486;;;13335:18;;;13328:43;13407:15;;;13387:18;;;13380:43;13459:15;;;13439:18;;;13432:43;13491:19;;;13484:35;;;38403:7:10;;;;38472:11;;;;;;;;:24;;13219:19:486;;38472:87:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38454:105;-1:-1:-1;38569:12:10;;38565:139;;38598:99;38609:27;38638:49;38689:7;38598:10;:99::i;:::-;38591:106;;;;;38565:139;38766:10;-1:-1:-1;;;;;38754:22:10;:8;-1:-1:-1;;;;;38754:22:10;;38750:134;;;38793:84;38798:26;38826:50;38793:4;:84::i;38750:134::-;38890:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38890:34:10;-1:-1:-1;;;;;39230:23:10;;;;;;:13;:23;;;;;;39222:45;;39255:11;39222:7;:45::i;:::-;39196:22;;;39181:86;;;39182:4;39181:86;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;39293:18:10;;-1:-1:-1;39277:12:10;;:34;;;;;;;;:::i;:::-;;39273:167;;39328:105;39339:16;39357:52;39419:4;:12;;;39411:21;;;;;;;;:::i;:::-;39328:10;:105::i;:::-;39321:112;;;;;;39273:167;39473:64;39478:11;39491:45;;;;;;;;3544:6:12;39491:45:10;;;39473:4;:64::i;:::-;39446:24;;;:91;39583:40;;;;;;;;;3667:4:12;39583:40:10;;39565:59;;39570:11;;39565:4;:59::i;:::-;39543:19;;;:81;;;39673:24;;;;39659:38;;:11;:38;:::i;:::-;:60;;;;:::i;:::-;39630:26;;;:89;41519:4;-1:-1:-1;;;;;39754:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39726:25;;;:69;;;39855:44;;;;;;;;;39871:25;;39855:44;;-1:-1:-1;;;39907:24:10;39829:108;;39855:44;39829:18;:108::i;:::-;39802:24;;;:135;39984:44;;;;;;;;;40000:25;;;;39984:44;;40030:19;;;;39965:85;;39984:44;39965:18;:85::i;:::-;39943:19;;;:107;40097:24;;;;40081:13;;:40;;40097:24;40081:40;:::i;:::-;40057:21;;;:64;40190:19;;;;40163:24;;;;40149:11;;:38;;40163:24;40149:38;:::i;:::-;:60;;;;:::i;:::-;40127:19;;;:82;40256:19;;;;40239:14;;:36;;40256:19;40239:36;:::i;:::-;40215:21;;;:60;-1:-1:-1;;;;;40333:25:10;;;;;;:13;:25;;;;;;40360:26;;;;40325:62;;40333:25;40325:7;:62::i;:::-;40297:24;;;40282:105;;;40283:4;40282:105;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;40413:18:10;;-1:-1:-1;40397:12:10;;:34;;;;;;;;:::i;:::-;;40393:167;;40448:105;40459:16;40477:52;40539:4;:12;;;40531:21;;;;;;;;:::i;40393:167::-;40752:21;;;;40736:13;:37;40793:19;;;;40779:11;:33;40835:21;;;;40818:14;:38;40889:22;;;;;-1:-1:-1;;;;;40863:23:10;;;-1:-1:-1;40863:23:10;;;:13;:23;;;;;;:48;;;;40945:24;;;;40917:25;;;;;;;;;;:52;;;;41044:26;;;;41013:58;;1403:25:486;;;40917::10;;40863:23;;-1:-1:-1;;;;;;;;;;;41013:58:10;1376:18:486;41013:58:10;;;;;;;41109:4;-1:-1:-1;;;;;41082:59:10;41091:8;-1:-1:-1;;;;;41082:59:10;-1:-1:-1;;;;;;;;;;;41116:4:10;:24;;;41082:59;;;;1403:25:486;;1391:2;1376:18;;1257:177;41082:59:10;;;;;;;;41181:24;;;;41207:21;;;;41152:77;;;41174:4;13732:51:486;;13814:2;13799:18;;13792:34;;;;13842:18;;13835:34;41152:77:10;;13720:2:486;13705:18;41152:77:10;;;;;;;41405:14;41390:30;;;;38262:3163;;;;;;;:::o;23833:267::-;23917:7;23901:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;23932:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24058:37;24070:10;24082:12;24058:11;:37::i;17296:270::-:0;17380:7;17364:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;17395:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17521:40;17533:10;17545:12;17559:1;17521:11;:40::i;32809:437::-:0;32961:7;32970;32945:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;32985:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33035:16;-1:-1:-1::0;;;;;33027:40:10::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33168:73;33189:10;33201:8;33211:11;33224:16;33168:20;:73::i;:::-;33161:80;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;32809:437;;;;;;;:::o;29313:2997::-;29511:11;;:75;;-1:-1:-1;;;29511:75:10;;29550:4;29511:75;;;14149:34:486;-1:-1:-1;;;;;14219:15:486;;;14199:18;;;14192:43;14271:15;;;14251:18;;;14244:43;14303:18;;;14296:34;;;29427:7:10;;;;;;29511:11;;;;;;;;:30;;14083:19:486;;29511:75:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29493:93;-1:-1:-1;29596:12:10;;29592:141;;29626:96;29637:27;29666:46;29714:7;29626:10;:96::i;:::-;29724:1;29618:108;;;;;;;29592:141;29832:12;29810:18;;:34;29806:137;;29862:70;29867:22;29891:40;29862:4;:70::i;29806:137::-;29949:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:32:10;-1:-1:-1;;;;;30084:24:10;;;;;;:14;:24;;;;;:38;;;30063:18;;;:59;41519:4;30226:50;;-1:-1:-1;;;30226:50:10;;-1:-1:-1;;;;;3128:32:486;;;30226:50:10;;;3110:51:486;30226:40:10;;;;;;;3083:18:486;;30226:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30204:19;;;:72;-1:-1:-1;;30348:32:10;;30344:142;;;30409:19;;;;30390:16;;;:38;30344:142;;;30449:16;;;:30;;;30344:142;31027:37;31040:5;31047:4;:16;;;31027:12;:37::i;:::-;31002:22;;;:62;;;31343:19;;;;31335:52;;:7;:52::i;:::-;31309:22;;;31294:93;;;31295:12;;;31294:93;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31417:18:10;;-1:-1:-1;31401:4:10;:12;;;:34;;;;;;;;:::i;:::-;;31393:105;;;;-1:-1:-1;;;31393:105:10;;14543:2:486;31393:105:10;;;14525:21:486;14582:2;14562:18;;;14555:30;14621:34;14601:18;;;14594:62;14692:28;14672:18;;;14665:56;14738:19;;31393:105:10;14341:422:486;31393:105:10;31544:45;31552:12;;31566:4;:22;;;31544:7;:45::i;:::-;31520:20;;;31505:84;;;31506:12;;;31505:84;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31619:18:10;;-1:-1:-1;31603:4:10;:12;;;:34;;;;;;;;:::i;:::-;;31595:96;;;;-1:-1:-1;;;31595:96:10;;14970:2:486;31595:96:10;;;14952:21:486;15009:2;14989:18;;;14982:30;15048:34;15028:18;;;15021:62;-1:-1:-1;;;15099:18:486;;;15092:47;15156:19;;31595:96:10;14768:413:486;31595:96:10;31800:22;;;;;;-1:-1:-1;;;;;31763:24:10;;;;;;;:14;:24;;;;;;;;;:59;;;31869:11;;31828:38;;;;:52;;;;31901:20;;;;31886:12;:35;;;32000:22;;;;32024;;31971:98;;15501:15:486;;;15483:34;;15533:18;;;15526:43;;;;15585:18;;15578:34;;;;15643:2;15628:18;;15621:34;;;;15686:3;15671:19;;15664:35;;;;31971:98:10;;15417:19:486;31971:98:10;;;;;;;32282:22;;;32265:14;;-1:-1:-1;32282:22:10;-1:-1:-1;;29313:2997:10;;;;;;;:::o;19181:4407::-;19302:7;19325:19;;;:42;;-1:-1:-1;19348:19:10;;19325:42;19317:79;;;;-1:-1:-1;;;19317:79:10;;15912:2:486;19317:79:10;;;15894:21:486;15951:2;15931:18;;;15924:30;15990:26;15970:18;;;15963:54;16034:18;;19317:79:10;15710:348:486;19317:79:10;19403:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19403:27:10;41519:4;-1:-1:-1;;;;;19465:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19437:25;;;:69;19517:18;;19513:1634;;19637:4;19620:14;19606:11;;:28;;;;:::i;:::-;:35;19602:69;;;19660:11;;19643:28;;19602:69;19886:17;;;:34;;;19992:44;;;;;;;;20008:25;;;;19992:44;;19965:103;;19906:14;19965:17;:103::i;:::-;19944:17;;;19929:139;;;19930:12;;;19929:139;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;20096:18:10;;-1:-1:-1;20080:4:10;:12;;;:34;;;;;;;;:::i;:::-;;20076:182;;20143:106;20154:16;20172:53;20235:4;:12;;;20227:21;;;;;;;;:::i;20143:106::-;20126:123;;;;;20076:182;19513:1634;;;-1:-1:-1;;20282:14:10;:35;20278:150;;;20346:11;;:73;;-1:-1:-1;;;20346:73:10;;-1:-1:-1;;;;;16332:15:486;;;20346:73:10;;;16314:34:486;20405:4:10;16364:18:486;;;16357:43;20413:5:10;16416:18:486;;;16409:50;20346:11:10;;;;;;;;:32;;16249:18:486;;20346:73:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20329:90;;20278:150;20493:31;41519:4;-1:-1:-1;;;;;20527:46:10;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20493:82;-1:-1:-1;20630:4:10;20587:40;20613:14;20493:82;20587:40;:::i;:::-;:47;20583:93;;;20653:23;20636:40;;20583:93;20903:53;20914:14;20930:4;:25;;;20903:10;:53::i;:::-;20883:17;;;:73;;;21026:11;;21060:4;;21026:31;;;:::i;:::-;:38;21022:75;;;21086:11;;21066:17;;;:31;21022:75;-1:-1:-1;21106:17:10;;;:34;;;19513:1634;21208:11;;21259:17;;;;21208:69;;-1:-1:-1;;;21208:69:10;;21190:15;;21208:11;;;-1:-1:-1;;;;;21208:11:10;;:25;;:69;;21242:4;;21249:8;;21259:17;21208:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21190:87;-1:-1:-1;21287:12:10;;21283:130;;21316:90;21327:27;21356:40;21398:7;21316:10;:90::i;:::-;21309:97;;;;;;21283:130;21512:12;21490:18;;:34;21486:126;;21541:64;21546:22;21570:34;21541:4;:64::i;21486:126::-;21876:39;21884:11;;21897:4;:17;;;21876:7;:39::i;:::-;21853:19;;;21838:77;;;21839:12;;;21838:77;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;21941:18:10;;-1:-1:-1;21925:4:10;:12;;;:34;;;;;;;;:::i;:::-;;21921:177;;21984:107;21995:16;22013:54;22077:4;:12;;;22069:21;;;;;;;;:::i;21921:177::-;-1:-1:-1;;;;;22152:23:10;;;;;;:13;:23;;;;;;22177:17;;;;22144:51;;22152:23;22144:7;:51::i;:::-;22119:21;;;22104:91;;;22105:12;;;22104:91;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;22221:18:10;;-1:-1:-1;22205:4:10;:12;;;:34;;;;;;;;:::i;:::-;;22201:180;;22264:110;22275:16;22293:57;22360:4;:12;;;22352:21;;;;;;;;:::i;22201:180::-;22471:4;:17;;;22451;:15;:17::i;:::-;:37;22447:146;;;22505:81;22510:29;22541:44;22505:4;:81::i;22447:146::-;22779:19;;;;22765:11;:33;22830:21;;;;-1:-1:-1;;;;;22804:23:10;;;;;;:13;:23;;;;;:47;23215:17;;;;23191:42;;22818:8;;23191:13;:42::i;:::-;23327:4;-1:-1:-1;;;;;23300:52:10;23309:8;-1:-1:-1;;;;;23300:52:10;-1:-1:-1;;;;;;;;;;;23334:4:10;:17;;;23300:52;;;;1403:25:486;;1391:2;1376:18;;1257:177;23300:52:10;;;;;;;;23380:17;;;;23399;;;;;23363:54;;;-1:-1:-1;;;;;13750:32:486;;13732:51;;13814:2;13799:18;;13792:34;;;;13842:18;;13835:34;23363:54:10;;13705:18:486;23363:54:10;;;;;;;23459:11;;23509:17;;;;23528;;;;23459:87;;-1:-1:-1;;;23459:87:10;;23492:4;23459:87;;;16739:34:486;-1:-1:-1;;;;;16809:15:486;;;16789:18;;;16782:43;16841:18;;;16834:34;;;;16884:18;;;16877:34;;;;23459:11:10;;;;;;:24;;16673:19:486;;23459:87:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23568:14:10;;-1:-1:-1;23560:23:10;;-1:-1:-1;;23560:23:10;;23553:30;19181:4407;-1:-1:-1;;;;;;19181:4407:10:o;1203:1102::-;1359:22;;;1315:2;1359:22;;;;;;;;;1275:15;;1315:2;1298:14;;1315:2;1359:22;;;;;;;;;;-1:-1:-1;;1323:58:10;-1:-1:-1;;;;1323:58:10;1405:10;;;:::i;:::-;;;;1387:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1387:50:10;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;1443:17:10;1461:10;;;:::i;:::-;;;;1443:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1443:52:10;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1501:17:10;1519:10;;;:::i;:::-;;;;1501:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1501:62:10;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;1569:17:10;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:52:10;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1627:17:10;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:57:10;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;1690:17:10;1708:10;;;:::i;:::-;;;;1690:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1690:63:10;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1759:17:10;1777:10;;;:::i;:::-;;;;1759:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1759:61:10;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;1826:17:10;1844:10;;;:::i;:::-;;;;1826:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1826:53:10;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1885:17:10;1903:10;;;:::i;:::-;;;;1885:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1885:51:10;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;1942:17:10;1960:10;;;:::i;:::-;;;;1942:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1942:61:10;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2009:17:10;2027:10;;;:::i;:::-;;;;2009:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2009:60:10;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2075:17:10;2093:10;;;:::i;:::-;;;;2075:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2075:64:10;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2145:17:10;2163:10;;;:::i;:::-;;;;2145:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2145:64:10;;;:29;;;;;;;;;;;:64;2224:13;;;;2216:54;;;;-1:-1:-1;;;2216:54:10;;10909:2:486;2216:54:10;;;10891:21:486;10948:2;10928:18;;;10921:30;10987;10967:18;;;10960:58;11035:18;;2216:54:10;10707:352:486;13996:2971:10;14146:11;;:58;;-1:-1:-1;;;14146:58:10;;14069:7;;;;;;14146:11;;;-1:-1:-1;;;;;14146:11:10;;:23;;:58;;14178:4;;14185:6;;14193:10;;14146:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14128:76;-1:-1:-1;14214:12:10;;14210:133;;14244:88;14255:27;14284:38;14324:7;14244:10;:88::i;:::-;14334:1;14236:100;;;;;;;14210:133;14442:12;14420:18;;:34;14416:129;;14472:62;14477:22;14501:32;14472:4;:62::i;14416:129::-;14551:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14551:25:10;41519:4;-1:-1:-1;;;;;14611:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14583:25;;;:69;15550:32;15563:6;15571:10;15550:12;:32::i;:::-;15526:21;;;:56;;;15890:44;;;;;;;;15906:25;;;;15890:44;;15831:109;;15526:56;15831:22;:109::i;:::-;15812:15;;;15797:143;;;15798:12;;;15797:143;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;15970:18:10;;-1:-1:-1;15954:4:10;:12;;;:34;;;;;;;;:::i;:::-;;15946:79;;;;-1:-1:-1;;;15946:79:10;;17124:2:486;15946:79:10;;;17106:21:486;;;17143:18;;;17136:30;17202:34;17182:18;;;17175:62;17254:18;;15946:79:10;16922:356:486;15946:79:10;16057:1;16039:4;:15;;;:19;16031:58;;;;-1:-1:-1;;;16031:58:10;;17485:2:486;16031:58:10;;;17467:21:486;17524:2;17504:18;;;17497:30;17563:28;17543:18;;;17536:56;17609:18;;16031:58:10;17283:350:486;16031:58:10;16360:4;:15;;;16346:11;;:29;;;;:::i;:::-;16324:19;;;:51;16430:15;;;;-1:-1:-1;;;;;16406:21:10;;;;;;:13;:21;;;;;;:39;;16430:15;16406:39;:::i;:::-;16382:21;;;:63;;;16527:19;;;;16513:11;:33;-1:-1:-1;;;;;16552:21:10;;;;;;:13;:21;;;;;;;;;:45;;;;16675:21;;;;16698:15;;;;;16662:52;;13732:51:486;;;13799:18;;;13792:34;;;;13842:18;;;13835:34;;;;16662:52:10;;13705:18:486;16662:52:10;;;;;;;16749:6;-1:-1:-1;;;;;16725:48:10;16742:4;-1:-1:-1;;;;;16725:48:10;-1:-1:-1;;;;;;;;;;;16757:4:10;:15;;;16725:48;;;;1403:25:486;;1391:2;1376:18;;1257:177;16725:48:10;;;;;;;;16815:11;;16861:21;;;;16884:15;;;;16815:85;;-1:-1:-1;;;16815:85:10;;16846:4;16815:85;;;16739:34:486;-1:-1:-1;;;;;16809:15:486;;;16789:18;;;16782:43;16841:18;;;16834:34;;;;16884:18;;;16877:34;;;;16815:11:10;;;;;;:22;;16673:19:486;;16815:85:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16923:14:10;;-1:-1:-1;16915:23:10;;-1:-1:-1;;16915:23:10;;16940:4;:21;;;16907:55;;;;;;13996:2971;;;;;;:::o;8016:262:20:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;12866:25:486;;;12922:2;12907:18;;12900:34;;;;12950:18;;12943:34;;;12854:2;12839:18;8140:49:20;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1280:213:13:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:13;;-1:-1:-1;1480:1:13;1443:39;;4229:119:22;4291:7;450:4;4313:19;4318:1;4321;:10;;;4313:4;:19::i;:::-;:30;;;;:::i;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1567:263:13:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:13;-1:-1:-1;1730:30:13;;1710:116;1789:26;1817:1;1781:38;;;;;;;24486:2981:10;24635:11;;:64;;-1:-1:-1;;;24635:64:10;;24565:7;;;;24635:11;;;;-1:-1:-1;;;;;24635:11:10;;:25;;:64;;24669:4;;24676:8;;24686:12;;24635:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24617:82;-1:-1:-1;24709:12:10;;24705:130;;24738:90;24749:27;24778:40;24820:7;24738:10;:90::i;:::-;24731:97;;;;;24705:130;24934:12;24912:18;;:34;24908:126;;24963:64;24968:22;24992:34;24963:4;:64::i;24908:126::-;25111:17;25131;:15;:17::i;:::-;25111:37;;25171:12;25159:9;:24;25155:126;;;25200:74;25205:29;25236:37;25200:4;:74::i;:::-;25193:81;;;;;;25155:126;25287:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:27:10;41519:4;25555:50;;-1:-1:-1;;;25555:50:10;;-1:-1:-1;;;;;3128:32:486;;;25555:50:10;;;3110:51:486;25555:40:10;;;;;;;3083:18:486;;25555:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25533:19;;;:72;;;25653:42;;25682:12;25653:7;:42::i;:::-;25627:22;;;25612:83;;;25613:4;25612:83;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;25721:18:10;;-1:-1:-1;25705:12:10;;:34;;;;;;;;:::i;:::-;;25701:227;;25764:157;25786:16;25814:64;25898:4;:12;;;25890:21;;;;;;;;:::i;25764:157::-;25749:172;;;;;;;25701:227;25997:11;;26043:22;;;;;25997:69;;-1:-1:-1;;;25997:69:10;;26036:4;25997:69;;;8633:51:486;8700:18;;;8693:34;;;;25997:11:10;;;;-1:-1:-1;;;;;25997:11:10;;:30;;8606:18:486;;25997:69:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25987:79;-1:-1:-1;26076:12:10;;26072:130;;26105:90;26116:27;26145:40;26187:7;26105:10;:90::i;26072:130::-;26247:35;26255:12;;26269;26247:7;:35::i;:::-;26223:20;;;26208:74;;;26209:4;26208:74;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;26308:18:10;;-1:-1:-1;26292:12:10;;:34;;;;;;;;:::i;:::-;;26288:178;;26351:108;26362:16;26380:55;26445:4;:12;;;26437:21;;;;;;;;:::i;26288:178::-;26679:22;;;;;-1:-1:-1;;;;;26642:24:10;;;;;;:14;:24;;;;;;:59;;;26748:11;;26707:38;;;;:52;26780:20;;;;26765:12;:35;27136:37;26657:8;27160:12;27136:13;:37::i;:::-;27249:22;;;;;27273:20;;;;;27218:76;;-1:-1:-1;;;;;18468:32:486;;18450:51;;18532:2;18517:18;;18510:34;;;18560:18;;;18553:34;;;;18603:18;;18596:34;27218:76:10;;18437:3:486;18422:19;27218:76:10;;;;;;;27447:14;27432:30;24486:2981;-1:-1:-1;;;;;;24486:2981:10:o;33827:3389::-;34062:11;;:138;;-1:-1:-1;;;34062:138:10;;34112:4;34062:138;;;13285:34:486;-1:-1:-1;;;;;13355:15:486;;;13335:18;;;13328:43;13407:15;;;13387:18;;;13380:43;13459:15;;;13439:18;;;13432:43;13491:19;;;13484:35;;;33980:7:10;;;;;;34062:11;;;;;;;;:34;;13219:19:486;;34062:138:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34044:156;-1:-1:-1;34210:12:10;;34206:138;;34240:93;34251:27;34280:43;34325:7;34240:10;:93::i;:::-;34335:1;34232:105;;;;;;;34206:138;34443:12;34421:18;;:34;34417:134;;34473:67;34478:22;34502:37;34473:4;:67::i;34417:134::-;34694:12;34652:16;-1:-1:-1;;;;;34645:43:10;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;34641:172;;34724:78;34729:22;34753:48;34724:4;:78::i;34641:172::-;34875:10;-1:-1:-1;;;;;34863:22:10;:8;-1:-1:-1;;;;;34863:22:10;;34859:133;;;34903:78;34908:26;34936:44;34903:4;:78::i;34859:133::-;35036:16;35032:135;;35070:86;35075:36;35113:42;35070:4;:86::i;35032:135::-;-1:-1:-1;;35212:11:10;:32;35208:155;;;35262:90;35267:36;35305:46;35262:4;:90::i;35208:155::-;35406:24;35432:25;35461:51;35478:10;35490:8;35500:11;35461:16;:51::i;:::-;35405:107;;-1:-1:-1;35405:107:10;-1:-1:-1;35522:43:10;;35518:154;;35583:78;35594:16;35588:23;;;;;;;;:::i;:::-;35613:47;35583:4;:78::i;:::-;35663:1;35575:90;;;;;;;;;35518:154;35908:11;;:117;;-1:-1:-1;;;35908:117:10;;35859:24;;;;35908:11;;;;-1:-1:-1;;;;;35908:11:10;;:41;;:117;;35965:4;;35978:16;;36002:17;;35908:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35858:167;;-1:-1:-1;35858:167:10;-1:-1:-1;36039:43:10;;36031:107;;;;-1:-1:-1;;;36031:107:10;;19093:2:486;36031:107:10;;;19075:21:486;19132:2;19112:18;;;19105:30;19171:34;19151:18;;;19144:62;-1:-1:-1;;;19222:18:486;;;19215:49;19281:19;;36031:107:10;18891:415:486;36031:107:10;36221:45;;-1:-1:-1;;;36221:45:10;;-1:-1:-1;;;;;3128:32:486;;;36221:45:10;;;3110:51:486;36270:11:10;;36221:35;;;;;;3083:18:486;;36221:45:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;36213:97;;;;-1:-1:-1;;;36213:97:10;;19513:2:486;36213:97:10;;;19495:21:486;19552:2;19532:18;;;19525:30;19591:26;19571:18;;;19564:54;19635:18;;36213:97:10;19311:348:486;36213:97:10;36428:18;-1:-1:-1;;;;;36456:33:10;;36484:4;36456:33;36452:229;;;36512:63;36534:4;36541:10;36553:8;36563:11;36512:13;:63::i;:::-;36499:76;;36452:229;;;36609:65;;-1:-1:-1;;;36609:65:10;;-1:-1:-1;;;;;36609:30:10;;;;;:65;;36640:10;;36652:8;;36662:11;;36609:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36596:78;;36452:229;36776:37;;36768:56;;;;-1:-1:-1;;;36768:56:10;;19866:2:486;36768:56:10;;;19848:21:486;19905:1;19885:18;;;19878:29;-1:-1:-1;;;19923:18:486;;;19916:36;19969:18;;36768:56:10;19664:329:486;36768:56:10;36878:87;;;-1:-1:-1;;;;;20313:15:486;;;20295:34;;20365:15;;;20360:2;20345:18;;20338:43;20397:18;;;20390:34;;;20460:15;;20455:2;20440:18;;20433:43;20507:3;20492:19;;20485:35;;;36878:87:10;;;;;;;20244:3:486;36878:87:10;;;37176:14;37160:51;-1:-1:-1;37193:17:10;;-1:-1:-1;;;;;;33827:3389:10;;;;;;;;:::o;2379:288:21:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:21;-1:-1:-1;2560:18:21;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:21;-1:-1:-1;2601:1:21;;-1:-1:-1;2588:15:21;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;18422:139:10:-;18487:11;18525:1;18513:8;:1;18517:4;18513:8;:::i;:::-;18512:14;;;;:::i;:::-;18506:20;-1:-1:-1;18536:5:10;18540:1;18536;:5;:::i;:::-;:10;18532:24;;18548:8;18555:1;18548:8;;:::i;3834:312:21:-;3925:9;3936:7;3952:13;3967:19;3990:31;4005:6;4013:7;3990:14;:31::i;4796:123:22:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:22;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:22:o;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:21:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:21;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:21;-1:-1:-1;2136:18:21;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:21;;;;;;;;;-1:-1:-1;2178:20:21;;2172:4;;-1:-1:-1;2178:20:21;-1:-1:-1;2164:35:21;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:21;;-1:-1:-1;1947:332:21;-1:-1:-1;;;;1947:332:21:o;3151:585::-;3234:9;3245:10;-1:-1:-1;;;;;;;;;;;;;;3245:10:21;3534:14;3550:17;3571:25;450:4:22;3589:6:21;3571:7;:25::i;:::-;3533:63;;-1:-1:-1;3533:63:21;-1:-1:-1;3614:18:21;3606:4;:26;;;;;;;;:::i;:::-;;3602:82;;-1:-1:-1;3656:20:21;;;;;;;;;-1:-1:-1;3656:20:21;;3650:4;;-1:-1:-1;3656:20:21;-1:-1:-1;3642:35:21;;3602:82;3696:35;3703:9;3714:7;:16;;;3696:6;:35::i;4923:243:22:-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:22;;5045:16;5041:45;;;-1:-1:-1;5078:1:22;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:22;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:22;;;;;;;;:::i;544:330:13:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:13;;-1:-1:-1;660:18:13;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:13;-1:-1:-1;833:30:13;;799:479:21;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:21;896:14;912:23;939:22;947:3;450:4:22;939:7:21;:22::i;:::-;895:66;;-1:-1:-1;895:66:21;-1:-1:-1;979:18:21;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:21;;;;;;;;;-1:-1:-1;1021:20:21;;1015:4;;-1:-1:-1;1021:20:21;-1:-1:-1;1007:35:21;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:21;-1:-1:-1;1141:18:21;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:21;;-1:-1:-1;799:479:21;-1:-1:-1;;;;;;799:479:21:o;958:198:13:-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:13;;-1:-1:-1;1102:1:13;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;14:131:486:-;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:486:o;470:597::-;582:4;611:2;640;629:9;622:21;672:6;666:13;715:6;710:2;699:9;695:18;688:34;740:1;750:140;764:6;761:1;758:13;750:140;;;859:14;;;855:23;;849:30;825:17;;;844:2;821:26;814:66;779:10;;750:140;;;908:6;905:1;902:13;899:91;;;978:1;973:2;964:6;953:9;949:22;945:31;938:42;899:91;-1:-1:-1;1051:2:486;1030:15;-1:-1:-1;;1026:29:486;1011:45;;;;1058:2;1007:54;;470:597;-1:-1:-1;;;470:597:486:o;1072:180::-;1131:6;1184:2;1172:9;1163:7;1159:23;1155:32;1152:52;;;1200:1;1197;1190:12;1152:52;-1:-1:-1;1223:23:486;;1072:180;-1:-1:-1;1072:180:486:o;1439:247::-;1498:6;1551:2;1539:9;1530:7;1526:23;1522:32;1519:52;;;1567:1;1564;1557:12;1519:52;1606:9;1593:23;1625:31;1650:5;1625:31;:::i;1880:127::-;1941:10;1936:3;1932:20;1929:1;1922:31;1972:4;1969:1;1962:15;1996:4;1993:1;1986:15;2012:921;2080:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:52;;;2149:1;2146;2139:12;2101:52;2189:9;2176:23;2218:18;2259:2;2251:6;2248:14;2245:34;;;2275:1;2272;2265:12;2245:34;2313:6;2302:9;2298:22;2288:32;;2358:7;2351:4;2347:2;2343:13;2339:27;2329:55;;2380:1;2377;2370:12;2329:55;2416:2;2403:16;2438:2;2434;2431:10;2428:36;;;2444:18;;:::i;:::-;2519:2;2513:9;2487:2;2573:13;;-1:-1:-1;;2569:22:486;;;2593:2;2565:31;2561:40;2549:53;;;2617:18;;;2637:22;;;2614:46;2611:72;;;2663:18;;:::i;:::-;2703:10;2699:2;2692:22;2738:2;2730:6;2723:18;2778:7;2773:2;2768;2764;2760:11;2756:20;2753:33;2750:53;;;2799:1;2796;2789:12;2750:53;2855:2;2850;2846;2842:11;2837:2;2829:6;2825:15;2812:46;2900:1;2878:15;;;2895:2;2874:24;2867:35;;;;-1:-1:-1;2882:6:486;2012:921;-1:-1:-1;;;;;2012:921:486:o;3380:657::-;3549:2;3601:21;;;3671:13;;3574:18;;;3693:22;;;3520:4;;3549:2;3772:15;;;;3746:2;3731:18;;;3520:4;3815:196;3829:6;3826:1;3823:13;3815:196;;;3894:13;;-1:-1:-1;;;;;;3890:40:486;3878:53;;3986:15;;;;3951:12;;;;3851:1;3844:9;3815:196;;;-1:-1:-1;4028:3:486;;3380:657;-1:-1:-1;;;;;;3380:657:486:o;4042:456::-;4119:6;4127;4135;4188:2;4176:9;4167:7;4163:23;4159:32;4156:52;;;4204:1;4201;4194:12;4156:52;4243:9;4230:23;4262:31;4287:5;4262:31;:::i;:::-;4312:5;-1:-1:-1;4369:2:486;4354:18;;4341:32;4382:33;4341:32;4382:33;:::i;:::-;4042:456;;4434:7;;-1:-1:-1;;;4488:2:486;4473:18;;;;4460:32;;4042:456::o;5188:::-;5265:6;5273;5281;5334:2;5322:9;5313:7;5309:23;5305:32;5302:52;;;5350:1;5347;5340:12;5302:52;5389:9;5376:23;5408:31;5433:5;5408:31;:::i;:::-;5458:5;-1:-1:-1;5510:2:486;5495:18;;5482:32;;-1:-1:-1;5566:2:486;5551:18;;5538:32;5579:33;5538:32;5579:33;:::i;:::-;5631:7;5621:17;;;5188:456;;;;;:::o;5982:380::-;6061:1;6057:12;;;;6104;;;6125:61;;6179:4;6171:6;6167:17;6157:27;;6125:61;6232:2;6224:6;6221:14;6201:18;6198:38;6195:161;;;6278:10;6273:3;6269:20;6266:1;6259:31;6313:4;6310:1;6303:15;6341:4;6338:1;6331:15;6367:481;-1:-1:-1;;;;;6652:15:486;;;6634:34;;6704:15;;;6699:2;6684:18;;6677:43;6756:15;;6751:2;6736:18;;6729:43;-1:-1:-1;;;;;;6808:33:486;;;6803:2;6788:18;;6781:61;6583:3;6568:19;;6367:481::o;6853:277::-;6920:6;6973:2;6961:9;6952:7;6948:23;6944:32;6941:52;;;6989:1;6986;6979:12;6941:52;7021:9;7015:16;7074:5;7067:13;7060:21;7053:5;7050:32;7040:60;;7096:1;7093;7086:12;7135:338;7337:2;7319:21;;;7376:2;7356:18;;;7349:30;-1:-1:-1;;;7410:2:486;7395:18;;7388:44;7464:2;7449:18;;7135:338::o;7890:184::-;7960:6;8013:2;8001:9;7992:7;7988:23;7984:32;7981:52;;;8029:1;8026;8019:12;7981:52;-1:-1:-1;8052:16:486;;7890:184;-1:-1:-1;7890:184:486:o;9467:259::-;9545:6;9598:2;9586:9;9577:7;9573:23;9569:32;9566:52;;;9614:1;9611;9604:12;9566:52;9646:9;9640:16;9665:31;9690:5;9665:31;:::i;9987:127::-;10048:10;10043:3;10039:20;10036:1;10029:31;10079:4;10076:1;10069:15;10103:4;10100:1;10093:15;10119:128;10159:3;10190:1;10186:6;10183:1;10180:13;10177:39;;;10196:18;;:::i;:::-;-1:-1:-1;10232:9:486;;10119:128::o;10252:127::-;10313:10;10308:3;10304:20;10301:1;10294:31;10344:4;10341:1;10334:15;10368:4;10365:1;10358:15;10384:135;10423:3;-1:-1:-1;;10444:17:486;;10441:43;;;10464:18;;:::i;:::-;-1:-1:-1;10511:1:486;10500:13;;10384:135::o;10524:178::-;10561:3;10605:4;10598:5;10594:16;10629:7;10619:41;;10640:18;;:::i;:::-;-1:-1:-1;;10676:20:486;;10524:178;-1:-1:-1;;10524:178:486:o;11064:125::-;11104:4;11132:1;11129;11126:8;11123:34;;;11137:18;;:::i;:::-;-1:-1:-1;11174:9:486;;11064:125::o;11194:127::-;11255:10;11250:3;11246:20;11243:1;11236:31;11286:4;11283:1;11276:15;11310:4;11307:1;11300:15;11326:375;-1:-1:-1;;;;;11584:15:486;;;11566:34;;11636:15;;;;11631:2;11616:18;;11609:43;11683:2;11668:18;;11661:34;;;;11516:2;11501:18;;11326:375::o;17962:127::-;18023:10;18018:3;18014:20;18011:1;18004:31;18054:4;18051:1;18044:15;18078:4;18075:1;18068:15;18094:120;18134:1;18160;18150:35;;18165:18;;:::i;:::-;-1:-1:-1;18199:9:486;;18094:120::o;18641:245::-;18720:6;18728;18781:2;18769:9;18760:7;18756:23;18752:32;18749:52;;;18797:1;18794;18787:12;18749:52;-1:-1:-1;;18820:16:486;;18876:2;18861:18;;;18855:25;18820:16;;18855:25;;-1:-1:-1;18641:245:486:o;20531:168::-;20571:7;20637:1;20633;20629:6;20625:14;20622:1;20619:21;20614:1;20607:9;20600:17;20596:45;20593:71;;;20644:18;;:::i;:::-;-1:-1:-1;20684:9:486;;20531:168::o;20704:112::-;20736:1;20762;20752:35;;20767:18;;:::i;:::-;-1:-1:-1;20801:9:486;;20704:112::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_becomeImplementation(bytes)": "56e67728", + "_getExtensionFunctions()": "89f8132e", + "_updatePlugin(address)": "19f496c8", + "_withdrawAdminFees(uint256)": "a7b820df", + "_withdrawIonicFees(uint256)": "b0d58e49", + "accrualBlockNumber()": "6c540baf", + "adminFeeMantissa()": "8d02d9a1", + "borrow(uint256)": "c5ebeaec", + "borrowIndex()": "aa5af0fd", + "comptroller()": "5fe3b567", + "contractType()": "cb2ef6f7", + "decimals()": "313ce567", + "delegateType()": "2c436e5b", + "feeSeizeShareMantissa()": "be99f119", + "getCash()": "3b1d21a2", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "liquidateBorrow(address,uint256,address)": "f5e3c462", + "mint(uint256)": "a0712d68", + "name()": "06fdde03", + "plugin()": "ef01df4f", + "protocolSeizeShareMantissa()": "6752e702", + "redeem(uint256)": "db006a75", + "redeemUnderlying(uint256)": "852a12e3", + "repayBorrow(uint256)": "0e752702", + "repayBorrowBehalf(address,uint256)": "2608f818", + "reserveFactorMantissa()": "173b9904", + "seize(address,address,uint256)": "b2a02ff1", + "selfTransferIn(address,uint256)": "135f1334", + "selfTransferOut(address,uint256)": "067db1b3", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/CErc20PluginRewardsDelegate.json b/packages/sdk/deployments/mode/CErc20PluginRewardsDelegate.json new file mode 100644 index 0000000000..5b43fa29a8 --- /dev/null +++ b/packages/sdk/deployments/mode/CErc20PluginRewardsDelegate.json @@ -0,0 +1,2669 @@ +{ + "address": "0x798Ee06Eb08151fadf5fFD07B7931B79985884D1", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "AccrueInterest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "Borrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "LiquidateBorrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256" + } + ], + "name": "NewIonicFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "NewMarketInterestRateModel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldImpl", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newImpl", + "type": "address" + } + ], + "name": "NewPluginImplementation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "NewReserveFactor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "Redeem", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "RepayBorrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "benefactor", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesReduced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "_becomeImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_plugin", + "type": "address" + } + ], + "name": "_updatePlugin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "plugin", + "outputs": [ + { + "internalType": "contract IERC4626", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "selfTransferOut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x111327bbe23152bc9fe6ff91ab38a8258116960c5deab44cc009bba4da1d059b", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x798Ee06Eb08151fadf5fFD07B7931B79985884D1", + "transactionIndex": 1, + "gasUsed": "4199554", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc0f2d847c054c08bfb8a22a214e370a79b061a241fb352b376561fe65e201c70", + "transactionHash": "0x111327bbe23152bc9fe6ff91ab38a8258116960c5deab44cc009bba4da1d059b", + "logs": [], + "blockNumber": 2067113, + "cumulativeGasUsed": "4252043", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Borrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "LiquidateBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImpl", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newImpl", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPluginImplementation", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "redeemer", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Redeem", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "RepayBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "benefactor", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesReduced", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_plugin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_updatePlugin" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "approve" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "claim" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "plugin", + "outputs": [ + { + "internalType": "contract IERC4626", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferOut" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_becomeImplementation(bytes)": { + "params": { + "data": "The encoded arguments for becoming" + } + }, + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_updatePlugin(address)": { + "params": { + "_plugin": "The address of the plugin implementation to use" + } + }, + "_withdrawAdminFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_withdrawIonicFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrow(uint256)": { + "params": { + "borrowAmount": "The amount of the underlying asset to borrow" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "getCash()": { + "returns": { + "_0": "The quantity of underlying asset owned by this contract" + } + }, + "liquidateBorrow(address,uint256,address)": { + "params": { + "borrower": "The borrower of this cToken to be liquidated", + "cTokenCollateral": "The market in which to seize collateral from the borrower", + "repayAmount": "The amount of the underlying borrowed asset to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "mint(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "mintAmount": "The amount of the underlying asset to supply" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeem(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemTokens": "The number of cTokens to redeem into underlying" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeemUnderlying(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemAmount": "The amount of underlying to redeem" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrow(uint256)": { + "params": { + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrowBehalf(address,uint256)": { + "params": { + "borrower": "the account with the debt being payed off", + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "seize(address,address,uint256)": { + "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.", + "params": { + "borrower": "The account having collateral seized", + "liquidator": "The account receiving seized collateral", + "seizeTokens": "The number of cTokens to seize" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_becomeImplementation(bytes)": { + "notice": "Delegate interface to become the implementation" + }, + "_updatePlugin(address)": { + "notice": "Update the plugin implementation to a whitelisted implementation" + }, + "_withdrawAdminFees(uint256)": { + "notice": "Accrues interest and reduces admin fees by transferring to admin" + }, + "_withdrawIonicFees(uint256)": { + "notice": "Accrues interest and reduces Ionic fees by transferring to Ionic" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "approve(address,address)": { + "notice": "token approval function" + }, + "borrow(uint256)": { + "notice": "Sender borrows assets from the protocol to their own address" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "claim()": { + "notice": "A reward token claim function to be overridden for use cases where rewardToken needs to be pulled in" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "getCash()": { + "notice": "Get cash balance of this cToken in the underlying asset" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "liquidateBorrow(address,uint256,address)": { + "notice": "The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator." + }, + "mint(uint256)": { + "notice": "Sender supplies assets into the market and receives cTokens in exchange" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "plugin()": { + "notice": "Plugin address" + }, + "redeem(uint256)": { + "notice": "Sender redeems cTokens in exchange for the underlying asset" + }, + "redeemUnderlying(uint256)": { + "notice": "Sender redeems cTokens in exchange for a specified amount of underlying asset" + }, + "repayBorrow(uint256)": { + "notice": "Sender repays their own borrow" + }, + "repayBorrowBehalf(address,uint256)": { + "notice": "Sender repays a borrow belonging to borrower" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "seize(address,address,uint256)": { + "notice": "Transfers collateral tokens (this market) to the liquidator." + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CErc20PluginRewardsDelegate.sol": "CErc20PluginRewardsDelegate" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20PluginDelegate.sol": { + "keccak256": "0x095cc54097ac06a9b6232222c5197df72c4cc4a0f2c69261bf22ebba2dfead3f", + "urls": [ + "bzz-raw://5641c9c2222825360f0dedcd0706028c062ee42540e55f1088fb10b408d4ed9a", + "dweb:/ipfs/QmW1VLeKMfHNNvcst9uz5PD7QcJizVQ8iRApUE1NJDQ9e3" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20PluginRewardsDelegate.sol": { + "keccak256": "0x23501b22979946368a39d990fa507774877cd7eb6a42848d5376834f2fb5cf08", + "urls": [ + "bzz-raw://881651c1a1955b3925681fd3de442d73cb38a4b141233e7daf971b0e902444d1", + "dweb:/ipfs/QmRHBRmWgDYUANsVXxUnPcpD52PLSEbEtzz8CAPXKh53ib" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IERC4626.sol": { + "keccak256": "0x1dc7b6dc2f1202ca16bff4eb488bb5bfcd6a48202996663a7220a888b261d7cb", + "urls": [ + "bzz-raw://35f5dfa93bcb6e10c2b83a15fd376fcd57baba83d1a09e4ba300859b8cbda1be", + "dweb:/ipfs/QmbnBkjAsEn97WyATWGF8ftifX55S4efA9RYyiuFZ4juhP" + ], + "license": null + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50614b04806100206000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c8063852a12e31161013b578063b2a02ff1116100b8578063cb2ef6f71161007c578063cb2ef6f714610486578063db006a75146104bf578063ef01df4f146104d2578063f3fdb15a146104e5578063f5e3c462146104f857600080fd5b8063b2a02ff114610435578063be99f11914610448578063c3bf11cd14610457578063c5ebeaec14610460578063c91a424f1461047357600080fd5b80639826394b116100ff5780639826394b146103ea578063a0712d68146103f3578063a7b820df14610406578063aa5af0fd14610419578063b0d58e491461042257600080fd5b8063852a12e3146103a857806389f8132e146103bb5780638d02d9a1146103d05780638f840ddd146103d957806395d89b41146103e257600080fd5b80633b1d21a2116101c957806361feacff1161018d57806361feacff146103625780636752e7021461036b5780636c540baf146103795780636f307dc3146103825780637e5465ba1461039557600080fd5b80633b1d21a21461030e57806347bd3718146103165780634e71d92d1461026057806356e677281461031f5780635fe3b5671461033257600080fd5b806318160ddd1161021057806318160ddd146102bd57806319f496c8146102c65780632608f818146102d95780632c436e5b146102ec578063313ce5671461030157600080fd5b8063067db1b31461024d57806306fdde03146102625780630e75270214610280578063135f1334146102a1578063173b9904146102b4575b600080fd5b61026061025b366004614619565b61050b565b005b61026a610555565b6040516102779190614645565b60405180910390f35b61029361028e36600461469a565b6105e3565b604051908152602001610277565b6102936102af366004614619565b6106a0565b61029360085481565b610293600f5481565b6102606102d43660046146b3565b6106ec565b6102936102e7366004614619565b610a4a565b60045b60405160ff9091168152602001610277565b6003546102ef9060ff1681565b610293610b09565b610293600b5481565b61026061032d3660046146e6565b610b18565b60035461034a9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610277565b610293600d5481565b610293666379da05b6000081565b61029360095481565b60135461034a906001600160a01b031681565b6102606103a3366004614797565b610c76565b6102936103b636600461469a565b610d8d565b6103c3610e40565b60405161027791906147d0565b61029360065481565b610293600c5481565b61026a610ffa565b610293600e5481565b61029361040136600461469a565b611007565b61029361041436600461469a565b6110bc565b610293600a5481565b61029361043036600461469a565b61121a565b61029361044336600461481e565b61130d565b61029367016345785d8a000081565b61029360075481565b61029361046e36600461469a565b611331565b60005461034a906001600160a01b031681565b60408051808201909152601b81527f434572633230506c7567696e5265776172647344656c65676174650000000000602082015261026a565b6102936104cd36600461469a565b6113e4565b60145461034a906001600160a01b031681565b60045461034a906001600160a01b031681565b61029361050636600461485f565b611497565b3330146105475760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b610551828261155a565b5050565b60018054610562906148a1565b80601f016020809104026020016040519081016040528092919081815260200182805461058e906148a1565b80156105db5780601f106105b0576101008083540402835291602001916105db565b820191906000526020600020905b8154815290600101906020018083116105be57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106309261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190614909565b61068d5760405162461bcd60e51b815260040161053e9061492b565b6000610698836115d7565b509392505050565b60003330146106d95760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b604482015260640161053e565b6106e38383611668565b90505b92915050565b333014806106fd57506106fd61171e565b61075d5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f7560448201526a383230ba32a8363ab3b4b760a91b606482015260840161053e565b6014546000906001600160a01b03166107765781610783565b6014546001600160a01b03165b6014549091506001600160a01b03161580159061080a57506014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108079190614953565b15155b156108f4576014546040516370a0823160e01b81523060048201526001600160a01b039091169063ba0876529082906370a0823190602401602060405180830381865afa15801561085f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108839190614953565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190614953565b505b601480546001600160a01b0319166001600160a01b0384811691821790925560135460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b3906044016020604051808303816000875af115801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190614909565b506013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f19190614953565b90508015610a0257610a028161189b565b604080516001600160a01b038085168252851660208201527fb32957d2794aaec3ea2c8852833af2192fe9fb518777de1f883e9e821781da75910160405180910390a1505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610a979261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015610ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad89190614909565b610af45760405162461bcd60e51b815260040161053e9061492b565b6000610b008484611910565b50949350505050565b6000610b136119a3565b905090565b33301480610b295750610b2961171e565b610b915760405162461bcd60e51b815260206004820152603360248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f6260448201527232b1b7b6b2a4b6b83632b6b2b73a30ba34b7b760691b606482015260840161053e565b600081806020019051810190610ba7919061496c565b90506001600160a01b038116158015610bca57506014546001600160a01b031615155b15610c42576000546014546040516381218ea960e01b81526001600160a01b0391821660048201529116906381218ea990602401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f919061496c565b90505b6001600160a01b03811615801590610c6857506014546001600160a01b03828116911614155b1561055157610551816106ec565b610c7e61171e565b610cb35760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b604482015260640161053e565b6013546001600160a01b03838116911614801590610cdf57506014546001600160a01b03838116911614155b610d145760405162461bcd60e51b815260206004820152600660248201526510ba37b5b2b760d11b604482015260640161053e565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af1158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614909565b505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610dda9261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190614909565b610e375760405162461bcd60e51b815260040161053e9061492b565b6106e682611a77565b606060026000610e4e611af4565b90508160ff168151610e60919061499f565b67ffffffffffffffff811115610e7857610e786146d0565b604051908082528060200260200182016040528015610ea1578160200160208202803683370190505b50925060005b8151811015610f0757818181518110610ec257610ec26149b7565b6020026020010151848281518110610edc57610edc6149b7565b6001600160e01b03199092166020928302919091019091015280610eff816149cd565b915050610ea7565b508051634e71d92d60e01b908490610f1e856149e8565b9450610f2d9060ff861661499f565b81518110610f3d57610f3d6149b7565b6001600160e01b0319909216602092830291909101909101528051633f2a32dd60e11b908490610f6c856149e8565b9450610f7b9060ff861661499f565b81518110610f8b57610f8b6149b7565b6001600160e01b03199092166020928302919091019091015260ff821615610ff55760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161053e565b505090565b60028054610562906148a1565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926110549261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015611071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110959190614909565b6110b15760405162461bcd60e51b815260040161053e9061492b565b600061069883611c20565b6000806110c881611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112c9190614953565b50436009541461114957611142600a6039611d61565b915061120b565b826111526119a3565b101561116457611142600e6038611d61565b600d5483111561117a576111426002603a611d61565b82600d546111889190614a05565b600d55600354604080516303e1469160e61b815290516112059261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff919061496c565b8461155a565b60005b91505b61121481611dda565b50919050565b60008061122681611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190614953565b5043600954146112a057611142600a6035611d61565b826112a96119a3565b10156112bb57611142600e6034611d61565b600e548311156112d15761114260026036611d61565b600083600e546112e19190614a05565b600e8190556000549091506112ff906001600160a01b03168561155a565b600092505061121481611dda565b6000600161131a81611c9d565b61132633868686611e5e565b915061069881611dda565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261137e9261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561139b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bf9190614909565b6113db5760405162461bcd60e51b815260040161053e9061492b565b6106e682612349565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926114319261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561144e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114729190614909565b61148e5760405162461bcd60e51b815260040161053e9061492b565b6106e6826123c4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926114e49261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190614909565b6115415760405162461bcd60e51b815260040161053e9061492b565b600061154e858585612441565b509150505b9392505050565b601454604051632d182be560e21b8152600481018390526001600160a01b0384811660248301523060448301529091169063b460af94906064016020604051808303816000875af11580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614953565b60008060006115e581611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116499190614953565b5061165533338661253b565b9250925061166281611dda565b50915091565b6013546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061169d90869030908790600401614a32565b6020604051808303816000875af11580156116bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e09190614909565b6117155760405162461bcd60e51b815260040161053e906020808252600490820152631cd95b9960e21b604082015260600190565b6112148261189b565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b919061496c565b6001600160a01b0316336001600160a01b03161480156118185750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118189190614909565b8061189557506000546001600160a01b0316331480156118955750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118959190614909565b91505090565b601454604051636e553f6560e01b8152600481018390523060248201526001600160a01b0390911690636e553f65906044016020604051808303816000875af11580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105519190614953565b600080600061191e81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561195e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119829190614953565b5061198e33868661253b565b9250925061199b81611dda565b509250929050565b6014546040516370a0823160e01b81523060048201526000916001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa1580156119f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a189190614953565b6040518263ffffffff1660e01b8152600401611a3691815260200190565b602060405180830381865afa158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b139190614953565b600080611a8381611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190614953565b506112083360008561294a565b606060026000611b02612f92565b90508160ff168151611b14919061499f565b67ffffffffffffffff811115611b2c57611b2c6146d0565b604051908082528060200260200182016040528015611b55578160200160208202803683370190505b50925060005b8151811015611bbb57818181518110611b7657611b766149b7565b6020026020010151848281518110611b9057611b906149b7565b6001600160e01b03199092166020928302919091019091015280611bb3816149cd565b915050611b5b565b50805163ef01df4f60e01b908490611bd2856149e8565b9450611be19060ff861661499f565b81518110611bf157611bf16149b7565b6001600160e01b031990921660209283029190910190910152805163033e92d960e31b908490610f6c856149e8565b6000806000611c2e81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190614953565b50611655338561310c565b600054600160a01b900460ff16611ce35760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015260640161053e565b80611d5157600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611d9657611d96614a1c565b836061811115611da857611da8614a1c565b60408051928352602083019190915260009082015260600160405180910390a18260118111156106e3576106e3614a1c565b6000805460ff60a01b1916600160a01b17905580611e5b57600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4257600080fd5b505af1158015611e56573d6000803e3d6000fd5b505050505b50565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef69190614953565b90508015611f1357611f0b6003601d83613517565b915050612341565b846001600160a01b0316846001600160a01b03161415611f3957611f0b6006601e611d61565b611f9e604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611fc190856135b9565b6020830181905282826003811115611fdb57611fdb614a1c565b6003811115611fec57611fec614a1c565b905250600090508151600381111561200657612006614a1c565b146120365761202d6009601c8360000151600381111561202857612028614a1c565b613517565b92505050612341565b612055846040518060200160405280666379da05b600008152506135e4565b6080820152604080516020810190915267016345785d8a0000815261207b9085906135e4565b610140820181905260808201516120929086614a05565b61209c9190614a05565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121039190614953565b60c0820190815260408051602081019091529051815260808201516121289190613607565b60a0820152604080516020810190915260c0820151815261014082015161214f9190613607565b61016082015260a0810151600c54612167919061499f565b60e08201526101408101516080820151600f546121849190614a05565b61218e9190614a05565b610120820152610160810151600e546121a7919061499f565b6101008201526001600160a01b03861660009081526010602052604090205460608201516121d5919061361f565b60408301819052828260038111156121ef576121ef614a1c565b600381111561220057612200614a1c565b905250600090508151600381111561221a5761221a614a1c565b1461223c5761202d6009601b8360000151600381111561202857612028614a1c565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b1680825290849020929092556060850151925192835290929091600080516020614ad8833981519152910160405180910390a3306001600160a01b0316856001600160a01b0316600080516020614ad883398151915283608001516040516122e991815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061235581611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b99190614953565b506112083384613645565b6000806123d081611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124349190614953565b506112083384600061294a565b600080600061244f81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561248f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b39190614953565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156124f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125189190614953565b50612525338787876139e0565b9250925061253281611dda565b50935093915050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af11580156125a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cd9190614953565b905080156125ee576125e26003604383613517565b60009250925050612942565b4360095414612603576125e2600a6044611d61565b61264c6040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da9190614953565b60808201526000198514156126f85760808101516040820152612700565b604081018590525b61270e878260400151611668565b60e082018190526080820151612723916135b9565b60a083018190526020830182600381111561274057612740614a1c565b600381111561275157612751614a1c565b905250600090508160200151600381111561276e5761276e614a1c565b146127e15760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c4544000000000000606482015260840161053e565b6127f1600b548260e001516135b9565b60c083018190526020830182600381111561280e5761280e614a1c565b600381111561281f5761281f614a1c565b905250600090508160200151600381111561283c5761283c614a1c565b146128a35760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b606482015260840161053e565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b6000821580612957575081155b6129a35760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e740000000000000000604482015260640161053e565b6129e46040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a469190614953565b60408201528315612b095761138884600f54612a629190614a05565b1015612a6e57600f5493505b6060810184905260408051602081018252908201518152612a8f9085613e9d565b6080830181905260208301826003811115612aac57612aac614a1c565b6003811115612abd57612abd614a1c565b9052506000905081602001516003811115612ada57612ada614a1c565b14612b0457612afc6009602c8360200151600381111561202857612028614a1c565b915050611553565b612c51565b600019831415612b9757600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b949190614953565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfb9190614953565b90506103e8612c0a8583614a05565b1015612c14578093505b612c22848360400151613eef565b60608301819052600f546103e891612c3991614a05565b1015612c4857600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612c8f9130918b9190600401614a32565b6020604051808303816000875af1158015612cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd29190614953565b90508015612cf057612ce76003602b83613517565b92505050611553565b4360095414612d0557612ce7600a602f611d61565b612d15600f5483606001516135b9565b60a0840181905260208401826003811115612d3257612d32614a1c565b6003811115612d4357612d43614a1c565b9052506000905082602001516003811115612d6057612d60614a1c565b14612d8257612ce7600960318460200151600381111561202857612028614a1c565b6001600160a01b0386166000908152601060205260409020546060830151612daa91906135b9565b60c0840181905260208401826003811115612dc757612dc7614a1c565b6003811115612dd857612dd8614a1c565b9052506000905082602001516003811115612df557612df5614a1c565b14612e1757612ce7600960308460200151600381111561202857612028614a1c565b8160800151612e246119a3565b1015612e3657612ce7600e6032611d61565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612e6c90879061155a565b306001600160a01b0316866001600160a01b0316600080516020614ad88339815191528460600151604051612ea391815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612f6757600080fd5b505af1158015612f7b573d6000803e3d6000fd5b5060009250612f88915050565b9695505050505050565b606060036000612fa0613f2a565b90508160ff168151612fb2919061499f565b67ffffffffffffffff811115612fca57612fca6146d0565b604051908082528060200260200182016040528015612ff3578160200160208202803683370190505b50925060005b815181101561305957818181518110613014576130146149b7565b602002602001015184828151811061302e5761302e6149b7565b6001600160e01b03199092166020928302919091019091015280613051816149cd565b915050612ff9565b50805163cb2ef6f760e01b908490613070856149e8565b945061307f9060ff861661499f565b8151811061308f5761308f6149b7565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b9084906130be856149e8565b94506130cd9060ff861661499f565b815181106130dd576130dd6149b7565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610f6c856149e8565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e19061314a90309089908990600401614a32565b6020604051808303816000875af1158015613169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318d9190614953565b905080156131ae576131a26003602183613517565b60009250925050613510565b43600954146131c3576131a2600a6024611d61565b6132046040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132669190614953565b60408201526132758686611668565b60c082018190526040805160208101825290830151815261329691906142f2565b60608301819052602083018260038111156132b3576132b3614a1c565b60038111156132c4576132c4614a1c565b90525060009050816020015160038111156132e1576132e1614a1c565b1461332e5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c4544604482015260640161053e565b60008160600151116133825760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a4543544544000000000000604482015260640161053e565b8060600151600f54613394919061499f565b608082015260608101516001600160a01b0387166000908152601060205260409020546133c1919061499f565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b0316600080516020614ad8833981519152836060015160405161347091815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b1580156134e357600080fd5b505af11580156134f7573d6000803e3d6000fd5b5060009250613504915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561354c5761354c614a1c565b84606181111561355e5761355e614a1c565b604080519283526020830191909152810184905260600160405180910390a1600384601181111561359157613591614a1c565b146135ad578360118111156135a8576135a8614a1c565b612341565b612341826103e861499f565b6000808383116135d85760006135cf8486614a05565b91509150613510565b50600390506000613510565b6000670de0b6b3a76400006135fd848460000151614302565b6106e39190614a6c565b6000806136148484614344565b905061234181614375565b60008083830184811061363757600092509050613510565b600260009250925050613510565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c9061368290309088908890600401614a32565b6020604051808303816000875af11580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c59190614953565b905080156136e2576136da6003601083613517565b9150506106e6565b43600954146136f7576136da600a600c611d61565b60006137016119a3565b90508381101561372057613717600e600b611d61565b925050506106e6565b61374c604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa158015613795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b99190614953565b602082018190526137ca908661361f565b60408301819052828260038111156137e4576137e4614a1c565b60038111156137f5576137f5614a1c565b905250600090508151600381111561380f5761380f614a1c565b1461383b576138316009600e8360000151600381111561202857612028614a1c565b93505050506106e6565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa158015613894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b89190614953565b925082156138cd576138316003601085613517565b6138d9600b548661361f565b60608301819052828260038111156138f3576138f3614a1c565b600381111561390457613904614a1c565b905250600090508151600381111561391e5761391e614a1c565b14613940576138316009600d8360000151600381111561202857612028614a1c565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b5561397c868661155a565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7a9190614953565b90508015613a9b57613a8f6003601483613517565b60009250925050613e94565b4360095414613ab057613a8f600a6018611d61565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b139190614953565b14613b2457613a8f600a6013611d61565b866001600160a01b0316866001600160a01b03161415613b4a57613a8f60066019611d61565b84613b5b57613a8f60076017611d61565b600019851415613b7157613a8f60076016611d61565b600080613b7f89898961253b565b90925090508115613bb457613ba6826011811115613b9f57613b9f614a1c565b601a611d61565b600094509450505050613e94565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b90613bf19030908c908890600401614a32565b6040805180830381865afa158015613c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c319190614a80565b90925090508115613ca05760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161053e565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0d9190614953565b1015613d5b5760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000604482015260640161053e565b60006001600160a01b038916301415613d8157613d7a308d8d85611e5e565b9050613df7565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613db1908f908f908790600401614a32565b6020604051808303816000875af1158015613dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df49190614953565b90505b8015613e2e5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b604482015260640161053e565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b600080600080613ead868661438d565b90925090506000826003811115613ec657613ec6614a1c565b14613ed75750915060009050613510565b6000613ee282614375565b9350935050509250929050565b600081613f0484670de0b6b3a7640000614aa4565b613f0e9190614a6c565b9050613f1a8284614ac3565b156106e6576106e360018261499f565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81613f66846149e8565b93508360ff1681518110613f7c57613f7c6149b7565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81613fa7846149e8565b93508360ff1681518110613fbd57613fbd6149b7565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81613fe8846149e8565b93508360ff1681518110613ffe57613ffe6149b7565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b81614029846149e8565b93508360ff168151811061403f5761403f6149b7565b6001600160e01b03199092166020928302919091019091015263073a938160e11b8161406a846149e8565b93508360ff1681518110614080576140806149b7565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b816140ab846149e8565b93508360ff16815181106140c1576140c16149b7565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b816140ec846149e8565b93508360ff1681518110614102576141026149b7565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b8161412d846149e8565b93508360ff1681518110614143576141436149b7565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b8161416e846149e8565b93508360ff1681518110614184576141846149b7565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816141af846149e8565b93508360ff16815181106141c5576141c56149b7565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816141f0846149e8565b93508360ff1681518110614206576142066149b7565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b81614231846149e8565b93508360ff1681518110614247576142476149b7565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b81614272846149e8565b93508360ff1681518110614288576142886149b7565b6001600160e01b03199092166020928302919091019091015260ff8216156106e65760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161053e565b600080600080613ead8686614409565b60006106e383836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061447c565b604080516020810190915260008152604051806020016040528061436c856000015185614302565b90529392505050565b80516000906106e690670de0b6b3a764000090614a6c565b60006143a56040518060200160405280600081525090565b6000806143b68660000151866144cf565b909250905060008260038111156143cf576143cf614a1c565b146143ee57506040805160208101909152600081529092509050613510565b60408051602081019091529081526000969095509350505050565b60006144216040518060200160405280600081525090565b600080614436670de0b6b3a7640000876144cf565b9092509050600082600381111561444f5761444f614a1c565b1461446e57506040805160208101909152600081529092509050613510565b613ee281866000015161450e565b6000831580614489575082155b1561449657506000611553565b60006144a28486614aa4565b9050836144af8683614a6c565b148390610b005760405162461bcd60e51b815260040161053e9190614645565b600080836144e257506000905080613510565b838302836144f08683614a6c565b1461450357600260009250925050613510565b600092509050613510565b60006145266040518060200160405280600081525090565b60008061453b86670de0b6b3a76400006144cf565b9092509050600082600381111561455457614554614a1c565b1461457357506040805160208101909152600081529092509050613510565b60008061458083886145d9565b9092509050600082600381111561459957614599614a1c565b146145bc5781604051806020016040528060008152509550955050505050613510565b604080516020810190915290815260009890975095505050505050565b600080826145ed5750600190506000613510565b60006145f98486614a6c565b915091509250929050565b6001600160a01b0381168114611e5b57600080fd5b6000806040838503121561462c57600080fd5b823561463781614604565b946020939093013593505050565b600060208083528351808285015260005b8181101561467257858101830151858201604001528201614656565b81811115614684576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156146ac57600080fd5b5035919050565b6000602082840312156146c557600080fd5b813561155381614604565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156146f857600080fd5b813567ffffffffffffffff8082111561471057600080fd5b818401915084601f83011261472457600080fd5b813581811115614736576147366146d0565b604051601f8201601f19908116603f0116810190838211818310171561475e5761475e6146d0565b8160405282815287602084870101111561477757600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156147aa57600080fd5b82356147b581614604565b915060208301356147c581614604565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156148125783516001600160e01b031916835292840192918401916001016147ec565b50909695505050505050565b60008060006060848603121561483357600080fd5b833561483e81614604565b9250602084013561484e81614604565b929592945050506040919091013590565b60008060006060848603121561487457600080fd5b833561487f81614604565b925060208401359150604084013561489681614604565b809150509250925092565b600181811c908216806148b557607f821691505b6020821081141561121457634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561491b57600080fd5b8151801515811461155357600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60006020828403121561496557600080fd5b5051919050565b60006020828403121561497e57600080fd5b815161155381614604565b634e487b7160e01b600052601160045260246000fd5b600082198211156149b2576149b2614989565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156149e1576149e1614989565b5060010190565b600060ff8216806149fb576149fb614989565b6000190192915050565b600082821015614a1757614a17614989565b500390565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082614a7b57614a7b614a56565b500490565b60008060408385031215614a9357600080fd5b505080516020909101519092909150565b6000816000190483118215151615614abe57614abe614989565b500290565b600082614ad257614ad2614a56565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "103:1387:8:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106102485760003560e01c8063852a12e31161013b578063b2a02ff1116100b8578063cb2ef6f71161007c578063cb2ef6f714610486578063db006a75146104bf578063ef01df4f146104d2578063f3fdb15a146104e5578063f5e3c462146104f857600080fd5b8063b2a02ff114610435578063be99f11914610448578063c3bf11cd14610457578063c5ebeaec14610460578063c91a424f1461047357600080fd5b80639826394b116100ff5780639826394b146103ea578063a0712d68146103f3578063a7b820df14610406578063aa5af0fd14610419578063b0d58e491461042257600080fd5b8063852a12e3146103a857806389f8132e146103bb5780638d02d9a1146103d05780638f840ddd146103d957806395d89b41146103e257600080fd5b80633b1d21a2116101c957806361feacff1161018d57806361feacff146103625780636752e7021461036b5780636c540baf146103795780636f307dc3146103825780637e5465ba1461039557600080fd5b80633b1d21a21461030e57806347bd3718146103165780634e71d92d1461026057806356e677281461031f5780635fe3b5671461033257600080fd5b806318160ddd1161021057806318160ddd146102bd57806319f496c8146102c65780632608f818146102d95780632c436e5b146102ec578063313ce5671461030157600080fd5b8063067db1b31461024d57806306fdde03146102625780630e75270214610280578063135f1334146102a1578063173b9904146102b4575b600080fd5b61026061025b366004614619565b61050b565b005b61026a610555565b6040516102779190614645565b60405180910390f35b61029361028e36600461469a565b6105e3565b604051908152602001610277565b6102936102af366004614619565b6106a0565b61029360085481565b610293600f5481565b6102606102d43660046146b3565b6106ec565b6102936102e7366004614619565b610a4a565b60045b60405160ff9091168152602001610277565b6003546102ef9060ff1681565b610293610b09565b610293600b5481565b61026061032d3660046146e6565b610b18565b60035461034a9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610277565b610293600d5481565b610293666379da05b6000081565b61029360095481565b60135461034a906001600160a01b031681565b6102606103a3366004614797565b610c76565b6102936103b636600461469a565b610d8d565b6103c3610e40565b60405161027791906147d0565b61029360065481565b610293600c5481565b61026a610ffa565b610293600e5481565b61029361040136600461469a565b611007565b61029361041436600461469a565b6110bc565b610293600a5481565b61029361043036600461469a565b61121a565b61029361044336600461481e565b61130d565b61029367016345785d8a000081565b61029360075481565b61029361046e36600461469a565b611331565b60005461034a906001600160a01b031681565b60408051808201909152601b81527f434572633230506c7567696e5265776172647344656c65676174650000000000602082015261026a565b6102936104cd36600461469a565b6113e4565b60145461034a906001600160a01b031681565b60045461034a906001600160a01b031681565b61029361050636600461485f565b611497565b3330146105475760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b610551828261155a565b5050565b60018054610562906148a1565b80601f016020809104026020016040519081016040528092919081815260200182805461058e906148a1565b80156105db5780601f106105b0576101008083540402835291602001916105db565b820191906000526020600020905b8154815290600101906020018083116105be57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106309261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190614909565b61068d5760405162461bcd60e51b815260040161053e9061492b565b6000610698836115d7565b509392505050565b60003330146106d95760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b604482015260640161053e565b6106e38383611668565b90505b92915050565b333014806106fd57506106fd61171e565b61075d5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f7560448201526a383230ba32a8363ab3b4b760a91b606482015260840161053e565b6014546000906001600160a01b03166107765781610783565b6014546001600160a01b03165b6014549091506001600160a01b03161580159061080a57506014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108079190614953565b15155b156108f4576014546040516370a0823160e01b81523060048201526001600160a01b039091169063ba0876529082906370a0823190602401602060405180830381865afa15801561085f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108839190614953565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190614953565b505b601480546001600160a01b0319166001600160a01b0384811691821790925560135460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b3906044016020604051808303816000875af115801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190614909565b506013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f19190614953565b90508015610a0257610a028161189b565b604080516001600160a01b038085168252851660208201527fb32957d2794aaec3ea2c8852833af2192fe9fb518777de1f883e9e821781da75910160405180910390a1505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610a979261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015610ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad89190614909565b610af45760405162461bcd60e51b815260040161053e9061492b565b6000610b008484611910565b50949350505050565b6000610b136119a3565b905090565b33301480610b295750610b2961171e565b610b915760405162461bcd60e51b815260206004820152603360248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f6260448201527232b1b7b6b2a4b6b83632b6b2b73a30ba34b7b760691b606482015260840161053e565b600081806020019051810190610ba7919061496c565b90506001600160a01b038116158015610bca57506014546001600160a01b031615155b15610c42576000546014546040516381218ea960e01b81526001600160a01b0391821660048201529116906381218ea990602401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f919061496c565b90505b6001600160a01b03811615801590610c6857506014546001600160a01b03828116911614155b1561055157610551816106ec565b610c7e61171e565b610cb35760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b604482015260640161053e565b6013546001600160a01b03838116911614801590610cdf57506014546001600160a01b03838116911614155b610d145760405162461bcd60e51b815260206004820152600660248201526510ba37b5b2b760d11b604482015260640161053e565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af1158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614909565b505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610dda9261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190614909565b610e375760405162461bcd60e51b815260040161053e9061492b565b6106e682611a77565b606060026000610e4e611af4565b90508160ff168151610e60919061499f565b67ffffffffffffffff811115610e7857610e786146d0565b604051908082528060200260200182016040528015610ea1578160200160208202803683370190505b50925060005b8151811015610f0757818181518110610ec257610ec26149b7565b6020026020010151848281518110610edc57610edc6149b7565b6001600160e01b03199092166020928302919091019091015280610eff816149cd565b915050610ea7565b508051634e71d92d60e01b908490610f1e856149e8565b9450610f2d9060ff861661499f565b81518110610f3d57610f3d6149b7565b6001600160e01b0319909216602092830291909101909101528051633f2a32dd60e11b908490610f6c856149e8565b9450610f7b9060ff861661499f565b81518110610f8b57610f8b6149b7565b6001600160e01b03199092166020928302919091019091015260ff821615610ff55760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161053e565b505090565b60028054610562906148a1565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926110549261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015611071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110959190614909565b6110b15760405162461bcd60e51b815260040161053e9061492b565b600061069883611c20565b6000806110c881611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112c9190614953565b50436009541461114957611142600a6039611d61565b915061120b565b826111526119a3565b101561116457611142600e6038611d61565b600d5483111561117a576111426002603a611d61565b82600d546111889190614a05565b600d55600354604080516303e1469160e61b815290516112059261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff919061496c565b8461155a565b60005b91505b61121481611dda565b50919050565b60008061122681611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190614953565b5043600954146112a057611142600a6035611d61565b826112a96119a3565b10156112bb57611142600e6034611d61565b600e548311156112d15761114260026036611d61565b600083600e546112e19190614a05565b600e8190556000549091506112ff906001600160a01b03168561155a565b600092505061121481611dda565b6000600161131a81611c9d565b61132633868686611e5e565b915061069881611dda565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261137e9261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561139b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bf9190614909565b6113db5760405162461bcd60e51b815260040161053e9061492b565b6106e682612349565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926114319261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561144e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114729190614909565b61148e5760405162461bcd60e51b815260040161053e9061492b565b6106e6826123c4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926114e49261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190614909565b6115415760405162461bcd60e51b815260040161053e9061492b565b600061154e858585612441565b509150505b9392505050565b601454604051632d182be560e21b8152600481018390526001600160a01b0384811660248301523060448301529091169063b460af94906064016020604051808303816000875af11580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614953565b60008060006115e581611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116499190614953565b5061165533338661253b565b9250925061166281611dda565b50915091565b6013546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061169d90869030908790600401614a32565b6020604051808303816000875af11580156116bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e09190614909565b6117155760405162461bcd60e51b815260040161053e906020808252600490820152631cd95b9960e21b604082015260600190565b6112148261189b565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b919061496c565b6001600160a01b0316336001600160a01b03161480156118185750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118189190614909565b8061189557506000546001600160a01b0316331480156118955750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118959190614909565b91505090565b601454604051636e553f6560e01b8152600481018390523060248201526001600160a01b0390911690636e553f65906044016020604051808303816000875af11580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105519190614953565b600080600061191e81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561195e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119829190614953565b5061198e33868661253b565b9250925061199b81611dda565b509250929050565b6014546040516370a0823160e01b81523060048201526000916001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa1580156119f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a189190614953565b6040518263ffffffff1660e01b8152600401611a3691815260200190565b602060405180830381865afa158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b139190614953565b600080611a8381611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190614953565b506112083360008561294a565b606060026000611b02612f92565b90508160ff168151611b14919061499f565b67ffffffffffffffff811115611b2c57611b2c6146d0565b604051908082528060200260200182016040528015611b55578160200160208202803683370190505b50925060005b8151811015611bbb57818181518110611b7657611b766149b7565b6020026020010151848281518110611b9057611b906149b7565b6001600160e01b03199092166020928302919091019091015280611bb3816149cd565b915050611b5b565b50805163ef01df4f60e01b908490611bd2856149e8565b9450611be19060ff861661499f565b81518110611bf157611bf16149b7565b6001600160e01b031990921660209283029190910190910152805163033e92d960e31b908490610f6c856149e8565b6000806000611c2e81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190614953565b50611655338561310c565b600054600160a01b900460ff16611ce35760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015260640161053e565b80611d5157600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611d9657611d96614a1c565b836061811115611da857611da8614a1c565b60408051928352602083019190915260009082015260600160405180910390a18260118111156106e3576106e3614a1c565b6000805460ff60a01b1916600160a01b17905580611e5b57600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4257600080fd5b505af1158015611e56573d6000803e3d6000fd5b505050505b50565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef69190614953565b90508015611f1357611f0b6003601d83613517565b915050612341565b846001600160a01b0316846001600160a01b03161415611f3957611f0b6006601e611d61565b611f9e604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611fc190856135b9565b6020830181905282826003811115611fdb57611fdb614a1c565b6003811115611fec57611fec614a1c565b905250600090508151600381111561200657612006614a1c565b146120365761202d6009601c8360000151600381111561202857612028614a1c565b613517565b92505050612341565b612055846040518060200160405280666379da05b600008152506135e4565b6080820152604080516020810190915267016345785d8a0000815261207b9085906135e4565b610140820181905260808201516120929086614a05565b61209c9190614a05565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121039190614953565b60c0820190815260408051602081019091529051815260808201516121289190613607565b60a0820152604080516020810190915260c0820151815261014082015161214f9190613607565b61016082015260a0810151600c54612167919061499f565b60e08201526101408101516080820151600f546121849190614a05565b61218e9190614a05565b610120820152610160810151600e546121a7919061499f565b6101008201526001600160a01b03861660009081526010602052604090205460608201516121d5919061361f565b60408301819052828260038111156121ef576121ef614a1c565b600381111561220057612200614a1c565b905250600090508151600381111561221a5761221a614a1c565b1461223c5761202d6009601b8360000151600381111561202857612028614a1c565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b1680825290849020929092556060850151925192835290929091600080516020614ad8833981519152910160405180910390a3306001600160a01b0316856001600160a01b0316600080516020614ad883398151915283608001516040516122e991815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061235581611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b99190614953565b506112083384613645565b6000806123d081611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124349190614953565b506112083384600061294a565b600080600061244f81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561248f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b39190614953565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156124f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125189190614953565b50612525338787876139e0565b9250925061253281611dda565b50935093915050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af11580156125a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cd9190614953565b905080156125ee576125e26003604383613517565b60009250925050612942565b4360095414612603576125e2600a6044611d61565b61264c6040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da9190614953565b60808201526000198514156126f85760808101516040820152612700565b604081018590525b61270e878260400151611668565b60e082018190526080820151612723916135b9565b60a083018190526020830182600381111561274057612740614a1c565b600381111561275157612751614a1c565b905250600090508160200151600381111561276e5761276e614a1c565b146127e15760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c4544000000000000606482015260840161053e565b6127f1600b548260e001516135b9565b60c083018190526020830182600381111561280e5761280e614a1c565b600381111561281f5761281f614a1c565b905250600090508160200151600381111561283c5761283c614a1c565b146128a35760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b606482015260840161053e565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b6000821580612957575081155b6129a35760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e740000000000000000604482015260640161053e565b6129e46040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a469190614953565b60408201528315612b095761138884600f54612a629190614a05565b1015612a6e57600f5493505b6060810184905260408051602081018252908201518152612a8f9085613e9d565b6080830181905260208301826003811115612aac57612aac614a1c565b6003811115612abd57612abd614a1c565b9052506000905081602001516003811115612ada57612ada614a1c565b14612b0457612afc6009602c8360200151600381111561202857612028614a1c565b915050611553565b612c51565b600019831415612b9757600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b949190614953565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfb9190614953565b90506103e8612c0a8583614a05565b1015612c14578093505b612c22848360400151613eef565b60608301819052600f546103e891612c3991614a05565b1015612c4857600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612c8f9130918b9190600401614a32565b6020604051808303816000875af1158015612cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd29190614953565b90508015612cf057612ce76003602b83613517565b92505050611553565b4360095414612d0557612ce7600a602f611d61565b612d15600f5483606001516135b9565b60a0840181905260208401826003811115612d3257612d32614a1c565b6003811115612d4357612d43614a1c565b9052506000905082602001516003811115612d6057612d60614a1c565b14612d8257612ce7600960318460200151600381111561202857612028614a1c565b6001600160a01b0386166000908152601060205260409020546060830151612daa91906135b9565b60c0840181905260208401826003811115612dc757612dc7614a1c565b6003811115612dd857612dd8614a1c565b9052506000905082602001516003811115612df557612df5614a1c565b14612e1757612ce7600960308460200151600381111561202857612028614a1c565b8160800151612e246119a3565b1015612e3657612ce7600e6032611d61565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612e6c90879061155a565b306001600160a01b0316866001600160a01b0316600080516020614ad88339815191528460600151604051612ea391815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612f6757600080fd5b505af1158015612f7b573d6000803e3d6000fd5b5060009250612f88915050565b9695505050505050565b606060036000612fa0613f2a565b90508160ff168151612fb2919061499f565b67ffffffffffffffff811115612fca57612fca6146d0565b604051908082528060200260200182016040528015612ff3578160200160208202803683370190505b50925060005b815181101561305957818181518110613014576130146149b7565b602002602001015184828151811061302e5761302e6149b7565b6001600160e01b03199092166020928302919091019091015280613051816149cd565b915050612ff9565b50805163cb2ef6f760e01b908490613070856149e8565b945061307f9060ff861661499f565b8151811061308f5761308f6149b7565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b9084906130be856149e8565b94506130cd9060ff861661499f565b815181106130dd576130dd6149b7565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610f6c856149e8565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e19061314a90309089908990600401614a32565b6020604051808303816000875af1158015613169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318d9190614953565b905080156131ae576131a26003602183613517565b60009250925050613510565b43600954146131c3576131a2600a6024611d61565b6132046040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132669190614953565b60408201526132758686611668565b60c082018190526040805160208101825290830151815261329691906142f2565b60608301819052602083018260038111156132b3576132b3614a1c565b60038111156132c4576132c4614a1c565b90525060009050816020015160038111156132e1576132e1614a1c565b1461332e5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c4544604482015260640161053e565b60008160600151116133825760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a4543544544000000000000604482015260640161053e565b8060600151600f54613394919061499f565b608082015260608101516001600160a01b0387166000908152601060205260409020546133c1919061499f565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b0316600080516020614ad8833981519152836060015160405161347091815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b1580156134e357600080fd5b505af11580156134f7573d6000803e3d6000fd5b5060009250613504915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561354c5761354c614a1c565b84606181111561355e5761355e614a1c565b604080519283526020830191909152810184905260600160405180910390a1600384601181111561359157613591614a1c565b146135ad578360118111156135a8576135a8614a1c565b612341565b612341826103e861499f565b6000808383116135d85760006135cf8486614a05565b91509150613510565b50600390506000613510565b6000670de0b6b3a76400006135fd848460000151614302565b6106e39190614a6c565b6000806136148484614344565b905061234181614375565b60008083830184811061363757600092509050613510565b600260009250925050613510565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c9061368290309088908890600401614a32565b6020604051808303816000875af11580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c59190614953565b905080156136e2576136da6003601083613517565b9150506106e6565b43600954146136f7576136da600a600c611d61565b60006137016119a3565b90508381101561372057613717600e600b611d61565b925050506106e6565b61374c604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa158015613795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b99190614953565b602082018190526137ca908661361f565b60408301819052828260038111156137e4576137e4614a1c565b60038111156137f5576137f5614a1c565b905250600090508151600381111561380f5761380f614a1c565b1461383b576138316009600e8360000151600381111561202857612028614a1c565b93505050506106e6565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa158015613894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b89190614953565b925082156138cd576138316003601085613517565b6138d9600b548661361f565b60608301819052828260038111156138f3576138f3614a1c565b600381111561390457613904614a1c565b905250600090508151600381111561391e5761391e614a1c565b14613940576138316009600d8360000151600381111561202857612028614a1c565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b5561397c868661155a565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7a9190614953565b90508015613a9b57613a8f6003601483613517565b60009250925050613e94565b4360095414613ab057613a8f600a6018611d61565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b139190614953565b14613b2457613a8f600a6013611d61565b866001600160a01b0316866001600160a01b03161415613b4a57613a8f60066019611d61565b84613b5b57613a8f60076017611d61565b600019851415613b7157613a8f60076016611d61565b600080613b7f89898961253b565b90925090508115613bb457613ba6826011811115613b9f57613b9f614a1c565b601a611d61565b600094509450505050613e94565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b90613bf19030908c908890600401614a32565b6040805180830381865afa158015613c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c319190614a80565b90925090508115613ca05760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161053e565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0d9190614953565b1015613d5b5760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000604482015260640161053e565b60006001600160a01b038916301415613d8157613d7a308d8d85611e5e565b9050613df7565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613db1908f908f908790600401614a32565b6020604051808303816000875af1158015613dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df49190614953565b90505b8015613e2e5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b604482015260640161053e565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b600080600080613ead868661438d565b90925090506000826003811115613ec657613ec6614a1c565b14613ed75750915060009050613510565b6000613ee282614375565b9350935050509250929050565b600081613f0484670de0b6b3a7640000614aa4565b613f0e9190614a6c565b9050613f1a8284614ac3565b156106e6576106e360018261499f565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81613f66846149e8565b93508360ff1681518110613f7c57613f7c6149b7565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81613fa7846149e8565b93508360ff1681518110613fbd57613fbd6149b7565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81613fe8846149e8565b93508360ff1681518110613ffe57613ffe6149b7565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b81614029846149e8565b93508360ff168151811061403f5761403f6149b7565b6001600160e01b03199092166020928302919091019091015263073a938160e11b8161406a846149e8565b93508360ff1681518110614080576140806149b7565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b816140ab846149e8565b93508360ff16815181106140c1576140c16149b7565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b816140ec846149e8565b93508360ff1681518110614102576141026149b7565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b8161412d846149e8565b93508360ff1681518110614143576141436149b7565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b8161416e846149e8565b93508360ff1681518110614184576141846149b7565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816141af846149e8565b93508360ff16815181106141c5576141c56149b7565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816141f0846149e8565b93508360ff1681518110614206576142066149b7565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b81614231846149e8565b93508360ff1681518110614247576142476149b7565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b81614272846149e8565b93508360ff1681518110614288576142886149b7565b6001600160e01b03199092166020928302919091019091015260ff8216156106e65760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161053e565b600080600080613ead8686614409565b60006106e383836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061447c565b604080516020810190915260008152604051806020016040528061436c856000015185614302565b90529392505050565b80516000906106e690670de0b6b3a764000090614a6c565b60006143a56040518060200160405280600081525090565b6000806143b68660000151866144cf565b909250905060008260038111156143cf576143cf614a1c565b146143ee57506040805160208101909152600081529092509050613510565b60408051602081019091529081526000969095509350505050565b60006144216040518060200160405280600081525090565b600080614436670de0b6b3a7640000876144cf565b9092509050600082600381111561444f5761444f614a1c565b1461446e57506040805160208101909152600081529092509050613510565b613ee281866000015161450e565b6000831580614489575082155b1561449657506000611553565b60006144a28486614aa4565b9050836144af8683614a6c565b148390610b005760405162461bcd60e51b815260040161053e9190614645565b600080836144e257506000905080613510565b838302836144f08683614a6c565b1461450357600260009250925050613510565b600092509050613510565b60006145266040518060200160405280600081525090565b60008061453b86670de0b6b3a76400006144cf565b9092509050600082600381111561455457614554614a1c565b1461457357506040805160208101909152600081529092509050613510565b60008061458083886145d9565b9092509050600082600381111561459957614599614a1c565b146145bc5781604051806020016040528060008152509550955050505050613510565b604080516020810190915290815260009890975095505050505050565b600080826145ed5750600190506000613510565b60006145f98486614a6c565b915091509250929050565b6001600160a01b0381168114611e5b57600080fd5b6000806040838503121561462c57600080fd5b823561463781614604565b946020939093013593505050565b600060208083528351808285015260005b8181101561467257858101830151858201604001528201614656565b81811115614684576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156146ac57600080fd5b5035919050565b6000602082840312156146c557600080fd5b813561155381614604565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156146f857600080fd5b813567ffffffffffffffff8082111561471057600080fd5b818401915084601f83011261472457600080fd5b813581811115614736576147366146d0565b604051601f8201601f19908116603f0116810190838211818310171561475e5761475e6146d0565b8160405282815287602084870101111561477757600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156147aa57600080fd5b82356147b581614604565b915060208301356147c581614604565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156148125783516001600160e01b031916835292840192918401916001016147ec565b50909695505050505050565b60008060006060848603121561483357600080fd5b833561483e81614604565b9250602084013561484e81614604565b929592945050506040919091013590565b60008060006060848603121561487457600080fd5b833561487f81614604565b925060208401359150604084013561489681614604565b809150509250925092565b600181811c908216806148b557607f821691505b6020821081141561121457634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561491b57600080fd5b8151801515811461155357600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60006020828403121561496557600080fd5b5051919050565b60006020828403121561497e57600080fd5b815161155381614604565b634e487b7160e01b600052601160045260246000fd5b600082198211156149b2576149b2614989565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156149e1576149e1614989565b5060010190565b600060ff8216806149fb576149fb614989565b6000190192915050565b600082821015614a1757614a17614989565b500390565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082614a7b57614a7b614a56565b500490565b60008060408385031215614a9357600080fd5b505080516020909101519092909150565b6000816000190483118215151615614abe57614abe614989565b500290565b600082614ad257614ad2614a56565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "103:1387:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6703:158:10;;;;;;:::i;:::-;;:::i;:::-;;580:18:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4337:168:10;;;;;;:::i;:::-;;:::i;:::-;;;1403:25:486;;;1391:2;1376:18;4337:168:10;1257:177:486;6865:185:10;;;;;;:::i;:::-;;:::i;1783:36:12:-;;;;;;2626:26;;;;;;2228:717:7;;;;;;:::i;:::-;;:::i;4771:208:10:-;;;;;;:::i;:::-;;:::i;1278:88:8:-;1360:1;1278:88;;;1863:4:486;1851:17;;;1833:36;;1821:2;1806:18;1278:88:8;1691:184:486;750:21:12;;;;;;;;;5851:95:10;;;:::i;2162:27:12:-;;;;;;1482:584:7;;;;;;:::i;:::-;;:::i;1148:35:12:-;;;;;;;;-1:-1:-1;;;;;1148:35:12;;;;;;-1:-1:-1;;;;;3128:32:486;;;3110:51;;3098:2;3083:18;1148:35:12;2938:229:486;2405:29:12;;;;;;3491:59;;3544:6;3491:59;;1896:33;;;;;;3740:25;;;;;-1:-1:-1;;;;;3740:25:12;;;1028:246:8;;;;;;:::i;:::-;;:::i;3617:153:10:-;;;;;;:::i;:::-;;:::i;168:665:8:-;;;:::i;:::-;;;;;;;:::i;1551:31:12:-;;;;;;2282:28;;;;;;663:20;;;:::i;2529:29::-;;;;;;2669:152:10;;;;;;:::i;:::-;;:::i;8504:1035::-;;;;;;:::i;:::-;;:::i;2037:26:12:-;;;;;;7283:988:10;;;;;;:::i;:::-;;:::i;6476:223::-;;;;;;:::i;:::-;;:::i;3619:52:12:-;;3667:4;3619:52;;1668:31;;;;;;4015:133:10;;;;;;:::i;:::-;;:::i;336:33:12:-;;;;;-1:-1:-1;;;;;336:33:12;;;1370:118:8;1447:36;;;;;;;;;;;;;;;;;1370:118;;3150:133:10;;;;;;:::i;:::-;;:::i;654:22:7:-;;;;;-1:-1:-1;;;;;654:22:7;;;1272:42:12;;;;;-1:-1:-1;;;;;1272:42:12;;;5433:264:10;;;;;;:::i;:::-;;:::i;6703:158::-;6788:10;6810:4;6788:27;6780:45;;;;-1:-1:-1;;;6780:45:10;;6244:2:486;6780:45:10;;;6226:21:486;6283:1;6263:18;;;6256:29;-1:-1:-1;;;6301:18:486;;;6294:35;6346:18;;6780:45:10;;;;;;;;;6831:25;6845:2;6849:6;6831:13;:25::i;:::-;6703:158;;:::o;580:18:12:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4337:168:10:-;4419:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4435:11:::1;4452:32;4472:11;4452:19;:32::i;:::-;-1:-1:-1::0;4434:50:10;4337:168;-1:-1:-1;;;4337:168:10:o;6865:185::-;6946:7;6969:10;6991:4;6969:27;6961:45;;;;-1:-1:-1;;;6961:45:10;;6244:2:486;6961:45:10;;;6226:21:486;6283:1;6263:18;;;6256:29;-1:-1:-1;;;6301:18:486;;;6294:35;6346:18;;6961:45:10;6042:328:486;6961:45:10;7019:26;7032:4;7038:6;7019:12;:26::i;:::-;7012:33;;6865:185;;;;;:::o;2228:717:7:-;2289:10;2311:4;2289:27;;:47;;;2320:16;:14;:16::i;:::-;2281:103;;;;-1:-1:-1;;;2281:103:7;;8073:2:486;2281:103:7;;;8055:21:486;8112:2;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;-1:-1:-1;;;8202:18:486;;;8195:41;8253:19;;2281:103:7;7871:407:486;2281:103:7;2427:6;;2391:25;;-1:-1:-1;;;;;2427:6:7;2419:57;;2469:7;2419:57;;;2459:6;;-1:-1:-1;;;;;2459:6:7;2419:57;2495:6;;2391:85;;-1:-1:-1;;;;;;2495:6:7;2487:29;;;;:69;;-1:-1:-1;2520:6:7;;:31;;-1:-1:-1;;;2520:31:7;;2545:4;2520:31;;;3110:51:486;-1:-1:-1;;;;;2520:6:7;;;;:16;;3083:18:486;;2520:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;2487:69;2483:166;;;2566:6;;2580:31;;-1:-1:-1;;;2580:31:7;;2605:4;2580:31;;;3110:51:486;-1:-1:-1;;;;;2566:6:7;;;;:13;;:6;;2580:16;;3083:18:486;;2580:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2566:76;;-1:-1:-1;;;;;;2566:76:7;;;;;;;;;;8674:25:486;;;;2621:4:7;8753:18:486;;;8746:43;;;8805:18;;;8798:43;8647:18;;2566:76:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2483:166;2655:6;:26;;-1:-1:-1;;;;;;2655:26:7;-1:-1:-1;;;;;2655:26:7;;;;;;;;;2703:10;;2688:62;;-1:-1:-1;;;2688:62:7;;;;;9026:51:486;;;;-1:-1:-1;;9093:18:486;;;9086:34;2703:10:7;;;;2688:34;;8999:18:486;;2688:62:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2789:10:7;;2774:51;;-1:-1:-1;;;2774:51:7;;2819:4;2774:51;;;3110::486;2757:14:7;;-1:-1:-1;;;;;2789:10:7;;2774:36;;3083:18:486;;2774:51:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2757:68;-1:-1:-1;2835:11:7;;2831:47;;2856:15;2864:6;2856:7;:15::i;:::-;2889:51;;;-1:-1:-1;;;;;9361:15:486;;;9343:34;;9413:15;;9408:2;9393:18;;9386:43;2889:51:7;;9278:18:486;2889:51:7;;;;;;;2275:670;;2228:717;:::o;4771:208:10:-;4877:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4893:11:::1;4910:48;4936:8;4946:11;4910:25;:48::i;:::-;-1:-1:-1::0;4892:66:10;4771:208;-1:-1:-1;;;;4771:208:10:o;5851:95::-;5902:7;5924:17;:15;:17::i;:::-;5917:24;;5851:95;:::o;1482:584:7:-;1570:10;1592:4;1570:27;;:47;;;1601:16;:14;:16::i;:::-;1562:111;;;;-1:-1:-1;;;1562:111:7;;9642:2:486;1562:111:7;;;9624:21:486;9681:2;9661:18;;;9654:30;9720:34;9700:18;;;9693:62;-1:-1:-1;;;9771:18:486;;;9764:49;9830:19;;1562:111:7;9440:415:486;1562:111:7;1680:15;1709:4;1698:27;;;;;;;;;;;;:::i;:::-;1680:45;-1:-1:-1;;;;;;1736:21:7;;;:54;;;;-1:-1:-1;1769:6:7;;-1:-1:-1;;;;;1769:6:7;1761:29;;1736:54;1732:230;;;1900:10;;1947:6;;1884:71;;-1:-1:-1;;;1884:71:7;;-1:-1:-1;;;;;1947:6:7;;;1884:71;;;3110:51:486;1900:10:7;;;1884:54;;3083:18:486;;1884:71:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1874:81;;1732:230;-1:-1:-1;;;;;1972:21:7;;;;;;:51;;-1:-1:-1;2016:6:7;;-1:-1:-1;;;;;1997:26:7;;;2016:6;;1997:26;;1972:51;1968:94;;;2033:22;2047:7;2033:13;:22::i;1028:246:8:-;1102:16;:14;:16::i;:::-;1094:35;;;;-1:-1:-1;;;1094:35:8;;10582:2:486;1094:35:8;;;10564:21:486;10621:1;10601:18;;;10594:29;-1:-1:-1;;;10639:18:486;;;10632:36;10685:18;;1094:35:8;10380:329:486;1094:35:8;1153:10;;-1:-1:-1;;;;;1143:20:8;;;1153:10;;1143:20;;;;:49;;-1:-1:-1;1185:6:8;;-1:-1:-1;;;;;1167:25:8;;;1185:6;;1167:25;;1143:49;1135:68;;;;-1:-1:-1;;;1135:68:8;;10916:2:486;1135:68:8;;;10898:21:486;10955:1;10935:18;;;10928:29;-1:-1:-1;;;10973:18:486;;;10966:36;11019:18;;1135:68:8;10714:329:486;1135:68:8;1210:59;;-1:-1:-1;;;1210:59:8;;-1:-1:-1;;;;;9044:32:486;;;1210:59:8;;;9026:51:486;-1:-1:-1;;9093:18:486;;;9086:34;1210:30:8;;;;;8999:18:486;;1210:59:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1028:246;;:::o;3617:153:10:-;3705:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;3727:38:::1;3752:12;3727:24;:38::i;168:665:8:-:0;240:33;298:1;281:14;347:30;:28;:30::i;:::-;306:71;;448:8;416:40;;:22;:29;:40;;;;:::i;:::-;403:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;403:54:8;;383:74;;469:9;464:123;488:22;:29;484:1;:33;464:123;;;555:22;578:1;555:25;;;;;;;;:::i;:::-;;;;;;;532:17;550:1;532:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;532:48:8;;;:20;;;;;;;;;;;:48;519:3;;;;:::i;:::-;;;;464:123;;;-1:-1:-1;624:29:8;;-1:-1:-1;;;657:19:8;593:17;;611:10;;;:::i;:::-;;-1:-1:-1;611:42:8;;;;;;:::i;:::-;593:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;593:83:8;;;:61;;;;;;;;;;;:83;713:29;;-1:-1:-1;;;746:21:8;682:17;;700:10;;;:::i;:::-;;-1:-1:-1;700:42:8;;;;;;:::i;:::-;682:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;682:85:8;;;:61;;;;;;;;;;;:85;782:13;;;;774:54;;;;-1:-1:-1;;;774:54:8;;11970:2:486;774:54:8;;;11952:21:486;12009:2;11989:18;;;11982:30;12048;12028:18;;;12021:58;12096:18;;774:54:8;11768:352:486;774:54:8;275:558;;168:665;:::o;663:20:12:-;;;;;;;:::i;2669:152:10:-;2743:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;2759:11:::1;2776:24;2789:10;2776:12;:24::i;8504:1035::-:0;8603:7;8587:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;8618:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8687:12;8665:18;;:34;8661:135;;8716:73;8721:22;8745:43;8716:4;:73::i;:::-;8709:80;;;;8661:135;8894:14;8874:17;:15;:17::i;:::-;:34;8870:149;;;8925:87;8930:29;8961:50;8925:4;:87::i;8870:149::-;9046:14;;9029;:31;9025:124;;;9077:65;9082:15;9099:42;9077:4;:65::i;9025:124::-;9293:14;9276;;:31;;;;:::i;:::-;9259:14;:48:::0;9459:11:::1;::::0;9430:50:::1;::::0;;-1:-1:-1;;;9430:50:10;;;;9416:81:::1;::::0;9459:11:::1;::::0;::::1;-1:-1:-1::0;;;;;9459:11:10::1;::::0;9430:48:::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;9459:11;9430:50:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9482:14;9416:13;:81::i;:::-;9519:14;9511:23;9504:30;;41731:1;41738:29:::0;41757:9;41738:18;:29::i;:::-;8504:1035;;;;:::o;7283:988::-;7382:7;7366:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;7397:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7466:12;7444:18;;:34;7440:135;;7495:73;7500:22;7524:43;7495:4;:73::i;7440:135::-;7605:14;7585:17;:15;:17::i;:::-;:34;7581:149;;;7636:87;7641:29;7672:50;7636:4;:87::i;7581:149::-;7757:14;;7740;:31;7736:124;;;7788:65;7793:15;7810:42;7788:4;:65::i;7736:124::-;7971:25;8016:14;7999;;:31;;;;:::i;:::-;8036:14;:34:::0;;;8201:10:::1;::::0;7971:59;;-1:-1:-1;8179:50:10::1;::::0;-1:-1:-1;;;;;8201:10:10::1;8214:14:::0;8179:13:::1;:50::i;:::-;8251:14;8236:30;;;41738:29:::0;41757:9;41738:18;:29::i;6476:223::-;6612:7;6597:4;41695:30;41715:9;41695:19;:30::i;:::-;6634:60:::1;6648:10;6660;6672:8;6682:11;6634:13;:60::i;:::-;6627:67;;41738:29:::0;41757:9;41738:18;:29::i;4015:133::-;4093:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4115:28:::1;4130:12;4115:14;:28::i;3150:133::-:0;3228:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;3250:28:::1;3265:12;3250:14;:28::i;5433:264::-:0;5579:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;5595:11:::1;5612:64;5636:8;5646:11;5659:16;5612:23;:64::i;:::-;-1:-1:-1::0;5594:82:10;-1:-1:-1;;1193:1:10::1;5433:264:::0;;;;;:::o;4064:122:7:-;4139:6;;:42;;-1:-1:-1;;;4139:42:7;;;;;8674:25:486;;;-1:-1:-1;;;;;8773:15:486;;;8753:18;;;8746:43;4175:4:7;8805:18:486;;;8798:43;4139:6:7;;;;:15;;8647:18:486;;4139:42:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27701:307:10:-;27789:7;27798;27773:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;27813:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27950:53;27967:10;27979;27991:11;27950:16;:53::i;:::-;27943:60;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;27701:307;;;;:::o;3531:263:7:-;3686:10;;3671:68;;-1:-1:-1;;;3671:68:7;;3610:7;;-1:-1:-1;;;;;3686:10:7;;3671:39;;:68;;3711:4;;3725;;3732:6;;3671:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3663:85;;;;-1:-1:-1;;;3663:85:7;;;;;;12969:2:486;12951:21;;;13008:1;12988:18;;;12981:29;-1:-1:-1;;;13041:2:486;13026:18;;13019:34;13085:2;13070:18;;12767:327;3663:85:7;3755:15;3763:6;3755:7;:15::i;10605:339:12:-;10654:4;10666:39;10737:11;;;;;;;;;-1:-1:-1;;;;;10737:11:12;10666:84;;10784:18;-1:-1:-1;;;;;10784:24:12;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10770:40:12;:10;-1:-1:-1;;;;;10770:40:12;;:79;;;;;10814:18;-1:-1:-1;;;;;10814:33:12;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10769:170;;;-1:-1:-1;10883:10:12;;-1:-1:-1;;;;;10883:10:12;10861;:33;:77;;;;;10898:18;-1:-1:-1;;;;;10898:38:12;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10756:183;;;10605:339;:::o;3798:90:7:-;3846:6;;:37;;-1:-1:-1;;;3846:37:7;;;;;13273:25:486;;;3877:4:7;13314:18:486;;;13307:60;-1:-1:-1;;;;;3846:6:7;;;;:14;;13246:18:486;;3846:37:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28319:343:10:-;28443:7;28452;28423:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;28469:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28606:51;28623:10;28635:8;28645:11;28606:16;:51::i;:::-;28599:58;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;28319:343;;;;;;:::o;3152:139:7:-;3233:6;;3254:31;;-1:-1:-1;;;3254:31:7;;3279:4;3254:31;;;3110:51:486;3211:7:7;;-1:-1:-1;;;;;3233:6:7;;:20;;:6;;3254:16;;3083:18:486;;3254:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3233:53;;;;;;;;;;;;;1403:25:486;;1391:2;1376:18;;1257:177;3233:53:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17924:280:10:-;18018:7;18002:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;18033:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:40;18171:10;18183:1;18186:12;18159:11;:40::i;681:672:7:-:0;753:33;811:1;794:14;860:30;:28;:30::i;:::-;819:71;;961:8;929:40;;:22;:29;:40;;;;:::i;:::-;916:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;916:54:7;;896:74;;982:9;977:123;1001:22;:29;997:1;:33;977:123;;;1068:22;1091:1;1068:25;;;;;;;;:::i;:::-;;;;;;;1045:17;1063:1;1045:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1045:48:7;;;:20;;;;;;;;;;;:48;1032:3;;;;:::i;:::-;;;;977:123;;;-1:-1:-1;1137:29:7;;-1:-1:-1;;;1170:20:7;1106:17;;1124:10;;;:::i;:::-;;-1:-1:-1;1124:42:7;;;;;;:::i;:::-;1106:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1106:84:7;;;:61;;;;;;;;;;;:84;1227:29;;-1:-1:-1;;;1260:27:7;1196:17;;1214:10;;;:::i;13048:290:10:-;13128:7;13137;13112:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;13152:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13300:33;13310:10;13322;13300:9;:33::i;42073:178::-:0;42140:11;;-1:-1:-1;;;42140:11:10;;;;42132:34;;;;-1:-1:-1;;;42132:34:10;;13580:2:486;42132:34:10;;;13562:21:486;13619:2;13599:18;;;13592:30;-1:-1:-1;;;13638:18:486;;;13631:40;13688:18;;42132:34:10;13378:334:486;42132:34:10;42177:9;42172:49;;42188:11;;;;;;;;;-1:-1:-1;;;;;42188:11:10;-1:-1:-1;;;;;42188:31:10;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:49;-1:-1:-1;42241:5:10;42227:19;;-1:-1:-1;;;;42227:19:10;;;42073:178::o;7757:151:20:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;13927:25:486;;;13983:2;13968:18;;13961:34;;;;7875:1:20;14011:18:486;;;14004:34;13915:2;13900:18;7838:39:20;;;;;;;7899:3;7891:12;;;;;;;;:::i;42551:169:10:-;42609:11;:18;;-1:-1:-1;;;;42609:18:10;-1:-1:-1;;;42609:18:10;;;42672:9;42667:48;;42683:11;;;;;;;;;-1:-1:-1;;;;;42683:11:10;-1:-1:-1;;;;;42683:30:10;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42667:48;42551:169;:::o;38262:3163::-;38472:11;;:87;;-1:-1:-1;;;38472:87:10;;38505:4;38472:87;;;14346:34:486;-1:-1:-1;;;;;14416:15:486;;;14396:18;;;14389:43;14468:15;;;14448:18;;;14441:43;14520:15;;;14500:18;;;14493:43;14552:19;;;14545:35;;;38403:7:10;;;;38472:11;;;;;;;;:24;;14280:19:486;;38472:87:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38454:105;-1:-1:-1;38569:12:10;;38565:139;;38598:99;38609:27;38638:49;38689:7;38598:10;:99::i;:::-;38591:106;;;;;38565:139;38766:10;-1:-1:-1;;;;;38754:22:10;:8;-1:-1:-1;;;;;38754:22:10;;38750:134;;;38793:84;38798:26;38826:50;38793:4;:84::i;38750:134::-;38890:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38890:34:10;-1:-1:-1;;;;;39230:23:10;;;;;;:13;:23;;;;;;39222:45;;39255:11;39222:7;:45::i;:::-;39196:22;;;39181:86;;;39182:4;39181:86;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;39293:18:10;;-1:-1:-1;39277:12:10;;:34;;;;;;;;:::i;:::-;;39273:167;;39328:105;39339:16;39357:52;39419:4;:12;;;39411:21;;;;;;;;:::i;:::-;39328:10;:105::i;:::-;39321:112;;;;;;39273:167;39473:64;39478:11;39491:45;;;;;;;;3544:6:12;39491:45:10;;;39473:4;:64::i;:::-;39446:24;;;:91;39583:40;;;;;;;;;3667:4:12;39583:40:10;;39565:59;;39570:11;;39565:4;:59::i;:::-;39543:19;;;:81;;;39673:24;;;;39659:38;;:11;:38;:::i;:::-;:60;;;;:::i;:::-;39630:26;;;:89;41519:4;-1:-1:-1;;;;;39754:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39726:25;;;:69;;;39855:44;;;;;;;;;39871:25;;39855:44;;-1:-1:-1;;;39907:24:10;39829:108;;39855:44;39829:18;:108::i;:::-;39802:24;;;:135;39984:44;;;;;;;;;40000:25;;;;39984:44;;40030:19;;;;39965:85;;39984:44;39965:18;:85::i;:::-;39943:19;;;:107;40097:24;;;;40081:13;;:40;;40097:24;40081:40;:::i;:::-;40057:21;;;:64;40190:19;;;;40163:24;;;;40149:11;;:38;;40163:24;40149:38;:::i;:::-;:60;;;;:::i;:::-;40127:19;;;:82;40256:19;;;;40239:14;;:36;;40256:19;40239:36;:::i;:::-;40215:21;;;:60;-1:-1:-1;;;;;40333:25:10;;;;;;:13;:25;;;;;;40360:26;;;;40325:62;;40333:25;40325:7;:62::i;:::-;40297:24;;;40282:105;;;40283:4;40282:105;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;40413:18:10;;-1:-1:-1;40397:12:10;;:34;;;;;;;;:::i;:::-;;40393:167;;40448:105;40459:16;40477:52;40539:4;:12;;;40531:21;;;;;;;;:::i;40393:167::-;40752:21;;;;40736:13;:37;40793:19;;;;40779:11;:33;40835:21;;;;40818:14;:38;40889:22;;;;;-1:-1:-1;;;;;40863:23:10;;;-1:-1:-1;40863:23:10;;;:13;:23;;;;;;:48;;;;40945:24;;;;40917:25;;;;;;;;;;:52;;;;41044:26;;;;41013:58;;1403:25:486;;;40917::10;;40863:23;;-1:-1:-1;;;;;;;;;;;41013:58:10;1376:18:486;41013:58:10;;;;;;;41109:4;-1:-1:-1;;;;;41082:59:10;41091:8;-1:-1:-1;;;;;41082:59:10;-1:-1:-1;;;;;;;;;;;41116:4:10;:24;;;41082:59;;;;1403:25:486;;1391:2;1376:18;;1257:177;41082:59:10;;;;;;;;41181:24;;;;41207:21;;;;41152:77;;;41174:4;14793:51:486;;14875:2;14860:18;;14853:34;;;;14903:18;;14896:34;41152:77:10;;14781:2:486;14766:18;41152:77:10;;;;;;;41405:14;41390:30;;;;38262:3163;;;;;;;:::o;23833:267::-;23917:7;23901:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;23932:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24058:37;24070:10;24082:12;24058:11;:37::i;17296:270::-:0;17380:7;17364:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;17395:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17521:40;17533:10;17545:12;17559:1;17521:11;:40::i;32809:437::-:0;32961:7;32970;32945:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;32985:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33035:16;-1:-1:-1::0;;;;;33027:40:10::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33168:73;33189:10;33201:8;33211:11;33224:16;33168:20;:73::i;:::-;33161:80;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;32809:437;;;;;;;:::o;29313:2997::-;29511:11;;:75;;-1:-1:-1;;;29511:75:10;;29550:4;29511:75;;;15210:34:486;-1:-1:-1;;;;;15280:15:486;;;15260:18;;;15253:43;15332:15;;;15312:18;;;15305:43;15364:18;;;15357:34;;;29427:7:10;;;;;;29511:11;;;;;;;;:30;;15144:19:486;;29511:75:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29493:93;-1:-1:-1;29596:12:10;;29592:141;;29626:96;29637:27;29666:46;29714:7;29626:10;:96::i;:::-;29724:1;29618:108;;;;;;;29592:141;29832:12;29810:18;;:34;29806:137;;29862:70;29867:22;29891:40;29862:4;:70::i;29806:137::-;29949:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:32:10;-1:-1:-1;;;;;30084:24:10;;;;;;:14;:24;;;;;:38;;;30063:18;;;:59;41519:4;30226:50;;-1:-1:-1;;;30226:50:10;;-1:-1:-1;;;;;3128:32:486;;;30226:50:10;;;3110:51:486;30226:40:10;;;;;;;3083:18:486;;30226:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30204:19;;;:72;-1:-1:-1;;30348:32:10;;30344:142;;;30409:19;;;;30390:16;;;:38;30344:142;;;30449:16;;;:30;;;30344:142;31027:37;31040:5;31047:4;:16;;;31027:12;:37::i;:::-;31002:22;;;:62;;;31343:19;;;;31335:52;;:7;:52::i;:::-;31309:22;;;31294:93;;;31295:12;;;31294:93;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31417:18:10;;-1:-1:-1;31401:4:10;:12;;;:34;;;;;;;;:::i;:::-;;31393:105;;;;-1:-1:-1;;;31393:105:10;;15604:2:486;31393:105:10;;;15586:21:486;15643:2;15623:18;;;15616:30;15682:34;15662:18;;;15655:62;15753:28;15733:18;;;15726:56;15799:19;;31393:105:10;15402:422:486;31393:105:10;31544:45;31552:12;;31566:4;:22;;;31544:7;:45::i;:::-;31520:20;;;31505:84;;;31506:12;;;31505:84;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31619:18:10;;-1:-1:-1;31603:4:10;:12;;;:34;;;;;;;;:::i;:::-;;31595:96;;;;-1:-1:-1;;;31595:96:10;;16031:2:486;31595:96:10;;;16013:21:486;16070:2;16050:18;;;16043:30;16109:34;16089:18;;;16082:62;-1:-1:-1;;;16160:18:486;;;16153:47;16217:19;;31595:96:10;15829:413:486;31595:96:10;31800:22;;;;;;-1:-1:-1;;;;;31763:24:10;;;;;;;:14;:24;;;;;;;;;:59;;;31869:11;;31828:38;;;;:52;;;;31901:20;;;;31886:12;:35;;;32000:22;;;;32024;;31971:98;;16562:15:486;;;16544:34;;16594:18;;;16587:43;;;;16646:18;;16639:34;;;;16704:2;16689:18;;16682:34;;;;16747:3;16732:19;;16725:35;;;;31971:98:10;;16478:19:486;31971:98:10;;;;;;;32282:22;;;32265:14;;-1:-1:-1;32282:22:10;-1:-1:-1;;29313:2997:10;;;;;;;:::o;19181:4407::-;19302:7;19325:19;;;:42;;-1:-1:-1;19348:19:10;;19325:42;19317:79;;;;-1:-1:-1;;;19317:79:10;;16973:2:486;19317:79:10;;;16955:21:486;17012:2;16992:18;;;16985:30;17051:26;17031:18;;;17024:54;17095:18;;19317:79:10;16771:348:486;19317:79:10;19403:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19403:27:10;41519:4;-1:-1:-1;;;;;19465:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19437:25;;;:69;19517:18;;19513:1634;;19637:4;19620:14;19606:11;;:28;;;;:::i;:::-;:35;19602:69;;;19660:11;;19643:28;;19602:69;19886:17;;;:34;;;19992:44;;;;;;;;20008:25;;;;19992:44;;19965:103;;19906:14;19965:17;:103::i;:::-;19944:17;;;19929:139;;;19930:12;;;19929:139;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;20096:18:10;;-1:-1:-1;20080:4:10;:12;;;:34;;;;;;;;:::i;:::-;;20076:182;;20143:106;20154:16;20172:53;20235:4;:12;;;20227:21;;;;;;;;:::i;20143:106::-;20126:123;;;;;20076:182;19513:1634;;;-1:-1:-1;;20282:14:10;:35;20278:150;;;20346:11;;:73;;-1:-1:-1;;;20346:73:10;;-1:-1:-1;;;;;17393:15:486;;;20346:73:10;;;17375:34:486;20405:4:10;17425:18:486;;;17418:43;20413:5:10;17477:18:486;;;17470:50;20346:11:10;;;;;;;;:32;;17310:18:486;;20346:73:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20329:90;;20278:150;20493:31;41519:4;-1:-1:-1;;;;;20527:46:10;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20493:82;-1:-1:-1;20630:4:10;20587:40;20613:14;20493:82;20587:40;:::i;:::-;:47;20583:93;;;20653:23;20636:40;;20583:93;20903:53;20914:14;20930:4;:25;;;20903:10;:53::i;:::-;20883:17;;;:73;;;21026:11;;21060:4;;21026:31;;;:::i;:::-;:38;21022:75;;;21086:11;;21066:17;;;:31;21022:75;-1:-1:-1;21106:17:10;;;:34;;;19513:1634;21208:11;;21259:17;;;;21208:69;;-1:-1:-1;;;21208:69:10;;21190:15;;21208:11;;;-1:-1:-1;;;;;21208:11:10;;:25;;:69;;21242:4;;21249:8;;21259:17;21208:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21190:87;-1:-1:-1;21287:12:10;;21283:130;;21316:90;21327:27;21356:40;21398:7;21316:10;:90::i;:::-;21309:97;;;;;;21283:130;21512:12;21490:18;;:34;21486:126;;21541:64;21546:22;21570:34;21541:4;:64::i;21486:126::-;21876:39;21884:11;;21897:4;:17;;;21876:7;:39::i;:::-;21853:19;;;21838:77;;;21839:12;;;21838:77;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;21941:18:10;;-1:-1:-1;21925:4:10;:12;;;:34;;;;;;;;:::i;:::-;;21921:177;;21984:107;21995:16;22013:54;22077:4;:12;;;22069:21;;;;;;;;:::i;21921:177::-;-1:-1:-1;;;;;22152:23:10;;;;;;:13;:23;;;;;;22177:17;;;;22144:51;;22152:23;22144:7;:51::i;:::-;22119:21;;;22104:91;;;22105:12;;;22104:91;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;22221:18:10;;-1:-1:-1;22205:4:10;:12;;;:34;;;;;;;;:::i;:::-;;22201:180;;22264:110;22275:16;22293:57;22360:4;:12;;;22352:21;;;;;;;;:::i;22201:180::-;22471:4;:17;;;22451;:15;:17::i;:::-;:37;22447:146;;;22505:81;22510:29;22541:44;22505:4;:81::i;22447:146::-;22779:19;;;;22765:11;:33;22830:21;;;;-1:-1:-1;;;;;22804:23:10;;;;;;:13;:23;;;;;:47;23215:17;;;;23191:42;;22818:8;;23191:13;:42::i;:::-;23327:4;-1:-1:-1;;;;;23300:52:10;23309:8;-1:-1:-1;;;;;23300:52:10;-1:-1:-1;;;;;;;;;;;23334:4:10;:17;;;23300:52;;;;1403:25:486;;1391:2;1376:18;;1257:177;23300:52:10;;;;;;;;23380:17;;;;23399;;;;;23363:54;;;-1:-1:-1;;;;;14811:32:486;;14793:51;;14875:2;14860:18;;14853:34;;;;14903:18;;14896:34;23363:54:10;;14766:18:486;23363:54:10;;;;;;;23459:11;;23509:17;;;;23528;;;;23459:87;;-1:-1:-1;;;23459:87:10;;23492:4;23459:87;;;17800:34:486;-1:-1:-1;;;;;17870:15:486;;;17850:18;;;17843:43;17902:18;;;17895:34;;;;17945:18;;;17938:34;;;;23459:11:10;;;;;;:24;;17734:19:486;;23459:87:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23568:14:10;;-1:-1:-1;23560:23:10;;-1:-1:-1;;23560:23:10;;23553:30;19181:4407;-1:-1:-1;;;;;;19181:4407:10:o;272:782:5:-;344:33;402:1;385:14;451:30;:28;:30::i;:::-;410:71;;552:8;520:40;;:22;:29;:40;;;;:::i;:::-;507:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:54:5;;487:74;;573:9;568:123;592:22;:29;588:1;:33;568:123;;;659:22;682:1;659:25;;;;;;;;:::i;:::-;;;;;;;636:17;654:1;636:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;636:48:5;;;:20;;;;;;;;;;;:48;623:3;;;;:::i;:::-;;;;568:123;;;-1:-1:-1;728:29:5;;-1:-1:-1;;;761:26:5;697:17;;715:10;;;:::i;:::-;;-1:-1:-1;715:42:5;;;;;;:::i;:::-;697:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;697:90:5;;;:61;;;;;;;;;;;:90;824:29;;-1:-1:-1;;;857:26:5;793:17;;811:10;;;:::i;:::-;;-1:-1:-1;811:42:5;;;;;;:::i;:::-;793:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;793:90:5;;;:61;;;;;;;;;;;:90;920:29;;-1:-1:-1;;;953:35:5;889:17;;907:10;;;:::i;13996:2971:10:-;14146:11;;:58;;-1:-1:-1;;;14146:58:10;;14069:7;;;;;;14146:11;;;-1:-1:-1;;;;;14146:11:10;;:23;;:58;;14178:4;;14185:6;;14193:10;;14146:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14128:76;-1:-1:-1;14214:12:10;;14210:133;;14244:88;14255:27;14284:38;14324:7;14244:10;:88::i;:::-;14334:1;14236:100;;;;;;;14210:133;14442:12;14420:18;;:34;14416:129;;14472:62;14477:22;14501:32;14472:4;:62::i;14416:129::-;14551:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14551:25:10;41519:4;-1:-1:-1;;;;;14611:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14583:25;;;:69;15550:32;15563:6;15571:10;15550:12;:32::i;:::-;15526:21;;;:56;;;15890:44;;;;;;;;15906:25;;;;15890:44;;15831:109;;15526:56;15831:22;:109::i;:::-;15812:15;;;15797:143;;;15798:12;;;15797:143;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;15970:18:10;;-1:-1:-1;15954:4:10;:12;;;:34;;;;;;;;:::i;:::-;;15946:79;;;;-1:-1:-1;;;15946:79:10;;18185:2:486;15946:79:10;;;18167:21:486;;;18204:18;;;18197:30;18263:34;18243:18;;;18236:62;18315:18;;15946:79:10;17983:356:486;15946:79:10;16057:1;16039:4;:15;;;:19;16031:58;;;;-1:-1:-1;;;16031:58:10;;18546:2:486;16031:58:10;;;18528:21:486;18585:2;18565:18;;;18558:30;18624:28;18604:18;;;18597:56;18670:18;;16031:58:10;18344:350:486;16031:58:10;16360:4;:15;;;16346:11;;:29;;;;:::i;:::-;16324:19;;;:51;16430:15;;;;-1:-1:-1;;;;;16406:21:10;;;;;;:13;:21;;;;;;:39;;16430:15;16406:39;:::i;:::-;16382:21;;;:63;;;16527:19;;;;16513:11;:33;-1:-1:-1;;;;;16552:21:10;;;;;;:13;:21;;;;;;;;;:45;;;;16675:21;;;;16698:15;;;;;16662:52;;14793:51:486;;;14860:18;;;14853:34;;;;14903:18;;;14896:34;;;;16662:52:10;;14766:18:486;16662:52:10;;;;;;;16749:6;-1:-1:-1;;;;;16725:48:10;16742:4;-1:-1:-1;;;;;16725:48:10;-1:-1:-1;;;;;;;;;;;16757:4:10;:15;;;16725:48;;;;1403:25:486;;1391:2;1376:18;;1257:177;16725:48:10;;;;;;;;16815:11;;16861:21;;;;16884:15;;;;16815:85;;-1:-1:-1;;;16815:85:10;;16846:4;16815:85;;;17800:34:486;-1:-1:-1;;;;;17870:15:486;;;17850:18;;;17843:43;17902:18;;;17895:34;;;;17945:18;;;17938:34;;;;16815:11:10;;;;;;:22;;17734:19:486;;16815:85:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16923:14:10;;-1:-1:-1;16915:23:10;;-1:-1:-1;;16915:23:10;;16940:4;:21;;;16907:55;;;;;;13996:2971;;;;;;:::o;8016:262:20:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;13927:25:486;;;13983:2;13968:18;;13961:34;;;;14011:18;;14004:34;;;13915:2;13900:18;8140:49:20;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1280:213:13:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:13;;-1:-1:-1;1480:1:13;1443:39;;4229:119:22;4291:7;450:4;4313:19;4318:1;4321;:10;;;4313:4;:19::i;:::-;:30;;;;:::i;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1567:263:13:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:13;-1:-1:-1;1730:30:13;;1710:116;1789:26;1817:1;1781:38;;;;;;;24486:2981:10;24635:11;;:64;;-1:-1:-1;;;24635:64:10;;24565:7;;;;24635:11;;;;-1:-1:-1;;;;;24635:11:10;;:25;;:64;;24669:4;;24676:8;;24686:12;;24635:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24617:82;-1:-1:-1;24709:12:10;;24705:130;;24738:90;24749:27;24778:40;24820:7;24738:10;:90::i;:::-;24731:97;;;;;24705:130;24934:12;24912:18;;:34;24908:126;;24963:64;24968:22;24992:34;24963:4;:64::i;24908:126::-;25111:17;25131;:15;:17::i;:::-;25111:37;;25171:12;25159:9;:24;25155:126;;;25200:74;25205:29;25236:37;25200:4;:74::i;:::-;25193:81;;;;;;25155:126;25287:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:27:10;41519:4;25555:50;;-1:-1:-1;;;25555:50:10;;-1:-1:-1;;;;;3128:32:486;;;25555:50:10;;;3110:51:486;25555:40:10;;;;;;;3083:18:486;;25555:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25533:19;;;:72;;;25653:42;;25682:12;25653:7;:42::i;:::-;25627:22;;;25612:83;;;25613:4;25612:83;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;25721:18:10;;-1:-1:-1;25705:12:10;;:34;;;;;;;;:::i;:::-;;25701:227;;25764:157;25786:16;25814:64;25898:4;:12;;;25890:21;;;;;;;;:::i;25764:157::-;25749:172;;;;;;;25701:227;25997:11;;26043:22;;;;;25997:69;;-1:-1:-1;;;25997:69:10;;26036:4;25997:69;;;9026:51:486;9093:18;;;9086:34;;;;25997:11:10;;;;-1:-1:-1;;;;;25997:11:10;;:30;;8999:18:486;;25997:69:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25987:79;-1:-1:-1;26076:12:10;;26072:130;;26105:90;26116:27;26145:40;26187:7;26105:10;:90::i;26072:130::-;26247:35;26255:12;;26269;26247:7;:35::i;:::-;26223:20;;;26208:74;;;26209:4;26208:74;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;26308:18:10;;-1:-1:-1;26292:12:10;;:34;;;;;;;;:::i;:::-;;26288:178;;26351:108;26362:16;26380:55;26445:4;:12;;;26437:21;;;;;;;;:::i;26288:178::-;26679:22;;;;;-1:-1:-1;;;;;26642:24:10;;;;;;:14;:24;;;;;;:59;;;26748:11;;26707:38;;;;:52;26780:20;;;;26765:12;:35;27136:37;26657:8;27160:12;27136:13;:37::i;:::-;27249:22;;;;;27273:20;;;;;27218:76;;-1:-1:-1;;;;;19529:32:486;;19511:51;;19593:2;19578:18;;19571:34;;;19621:18;;;19614:34;;;;19664:18;;19657:34;27218:76:10;;19498:3:486;19483:19;27218:76:10;;;;;;;27447:14;27432:30;24486:2981;-1:-1:-1;;;;;;24486:2981:10:o;33827:3389::-;34062:11;;:138;;-1:-1:-1;;;34062:138:10;;34112:4;34062:138;;;14346:34:486;-1:-1:-1;;;;;14416:15:486;;;14396:18;;;14389:43;14468:15;;;14448:18;;;14441:43;14520:15;;;14500:18;;;14493:43;14552:19;;;14545:35;;;33980:7:10;;;;;;34062:11;;;;;;;;:34;;14280:19:486;;34062:138:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34044:156;-1:-1:-1;34210:12:10;;34206:138;;34240:93;34251:27;34280:43;34325:7;34240:10;:93::i;:::-;34335:1;34232:105;;;;;;;34206:138;34443:12;34421:18;;:34;34417:134;;34473:67;34478:22;34502:37;34473:4;:67::i;34417:134::-;34694:12;34652:16;-1:-1:-1;;;;;34645:43:10;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;34641:172;;34724:78;34729:22;34753:48;34724:4;:78::i;34641:172::-;34875:10;-1:-1:-1;;;;;34863:22:10;:8;-1:-1:-1;;;;;34863:22:10;;34859:133;;;34903:78;34908:26;34936:44;34903:4;:78::i;34859:133::-;35036:16;35032:135;;35070:86;35075:36;35113:42;35070:4;:86::i;35032:135::-;-1:-1:-1;;35212:11:10;:32;35208:155;;;35262:90;35267:36;35305:46;35262:4;:90::i;35208:155::-;35406:24;35432:25;35461:51;35478:10;35490:8;35500:11;35461:16;:51::i;:::-;35405:107;;-1:-1:-1;35405:107:10;-1:-1:-1;35522:43:10;;35518:154;;35583:78;35594:16;35588:23;;;;;;;;:::i;:::-;35613:47;35583:4;:78::i;:::-;35663:1;35575:90;;;;;;;;;35518:154;35908:11;;:117;;-1:-1:-1;;;35908:117:10;;35859:24;;;;35908:11;;;;-1:-1:-1;;;;;35908:11:10;;:41;;:117;;35965:4;;35978:16;;36002:17;;35908:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35858:167;;-1:-1:-1;35858:167:10;-1:-1:-1;36039:43:10;;36031:107;;;;-1:-1:-1;;;36031:107:10;;20154:2:486;36031:107:10;;;20136:21:486;20193:2;20173:18;;;20166:30;20232:34;20212:18;;;20205:62;-1:-1:-1;;;20283:18:486;;;20276:49;20342:19;;36031:107:10;19952:415:486;36031:107:10;36221:45;;-1:-1:-1;;;36221:45:10;;-1:-1:-1;;;;;3128:32:486;;;36221:45:10;;;3110:51:486;36270:11:10;;36221:35;;;;;;3083:18:486;;36221:45:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;36213:97;;;;-1:-1:-1;;;36213:97:10;;20574:2:486;36213:97:10;;;20556:21:486;20613:2;20593:18;;;20586:30;20652:26;20632:18;;;20625:54;20696:18;;36213:97:10;20372:348:486;36213:97:10;36428:18;-1:-1:-1;;;;;36456:33:10;;36484:4;36456:33;36452:229;;;36512:63;36534:4;36541:10;36553:8;36563:11;36512:13;:63::i;:::-;36499:76;;36452:229;;;36609:65;;-1:-1:-1;;;36609:65:10;;-1:-1:-1;;;;;36609:30:10;;;;;:65;;36640:10;;36652:8;;36662:11;;36609:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36596:78;;36452:229;36776:37;;36768:56;;;;-1:-1:-1;;;36768:56:10;;20927:2:486;36768:56:10;;;20909:21:486;20966:1;20946:18;;;20939:29;-1:-1:-1;;;20984:18:486;;;20977:36;21030:18;;36768:56:10;20725:329:486;36768:56:10;36878:87;;;-1:-1:-1;;;;;21374:15:486;;;21356:34;;21426:15;;;21421:2;21406:18;;21399:43;21458:18;;;21451:34;;;21521:15;;21516:2;21501:18;;21494:43;21568:3;21553:19;;21546:35;;;36878:87:10;;;;;;;21305:3:486;36878:87:10;;;37176:14;37160:51;-1:-1:-1;37193:17:10;;-1:-1:-1;;;;;;33827:3389:10;;;;;;;;:::o;2379:288:21:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:21;-1:-1:-1;2560:18:21;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:21;-1:-1:-1;2601:1:21;;-1:-1:-1;2588:15:21;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;18422:139:10:-;18487:11;18525:1;18513:8;:1;18517:4;18513:8;:::i;:::-;18512:14;;;;:::i;:::-;18506:20;-1:-1:-1;18536:5:10;18540:1;18536;:5;:::i;:::-;:10;18532:24;;18548:8;18555:1;18548:8;;:::i;1203:1102::-;1359:22;;;1315:2;1359:22;;;;;;;;;1275:15;;1315:2;1298:14;;1315:2;1359:22;;;;;;;;;;-1:-1:-1;;1323:58:10;-1:-1:-1;;;;1323:58:10;1405:10;;;:::i;:::-;;;;1387:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1387:50:10;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;1443:17:10;1461:10;;;:::i;:::-;;;;1443:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1443:52:10;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1501:17:10;1519:10;;;:::i;:::-;;;;1501:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1501:62:10;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;1569:17:10;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:52:10;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1627:17:10;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:57:10;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;1690:17:10;1708:10;;;:::i;:::-;;;;1690:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1690:63:10;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1759:17:10;1777:10;;;:::i;:::-;;;;1759:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1759:61:10;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;1826:17:10;1844:10;;;:::i;:::-;;;;1826:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1826:53:10;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1885:17:10;1903:10;;;:::i;:::-;;;;1885:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1885:51:10;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;1942:17:10;1960:10;;;:::i;:::-;;;;1942:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1942:61:10;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2009:17:10;2027:10;;;:::i;:::-;;;;2009:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2009:60:10;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2075:17:10;2093:10;;;:::i;:::-;;;;2075:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2075:64:10;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2145:17:10;2163:10;;;:::i;:::-;;;;2145:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2145:64:10;;;:29;;;;;;;;;;;:64;2224:13;;;;2216:54;;;;-1:-1:-1;;;2216:54:10;;11970:2:486;2216:54:10;;;11952:21:486;12009:2;11989:18;;;11982:30;12048;12028:18;;;12021:58;12096:18;;2216:54:10;11768:352:486;3834:312:21;3925:9;3936:7;3952:13;3967:19;3990:31;4005:6;4013:7;3990:14;:31::i;4796:123:22:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:22;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:22:o;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:21:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:21;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:21;-1:-1:-1;2136:18:21;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:21;;;;;;;;;-1:-1:-1;2178:20:21;;2172:4;;-1:-1:-1;2178:20:21;-1:-1:-1;2164:35:21;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:21;;-1:-1:-1;1947:332:21;-1:-1:-1;;;;1947:332:21:o;3151:585::-;3234:9;3245:10;-1:-1:-1;;;;;;;;;;;;;;3245:10:21;3534:14;3550:17;3571:25;450:4:22;3589:6:21;3571:7;:25::i;:::-;3533:63;;-1:-1:-1;3533:63:21;-1:-1:-1;3614:18:21;3606:4;:26;;;;;;;;:::i;:::-;;3602:82;;-1:-1:-1;3656:20:21;;;;;;;;;-1:-1:-1;3656:20:21;;3650:4;;-1:-1:-1;3656:20:21;-1:-1:-1;3642:35:21;;3602:82;3696:35;3703:9;3714:7;:16;;;3696:6;:35::i;4923:243:22:-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:22;;5045:16;5041:45;;;-1:-1:-1;5078:1:22;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:22;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:22;;;;;;;;:::i;544:330:13:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:13;;-1:-1:-1;660:18:13;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:13;-1:-1:-1;833:30:13;;799:479:21;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:21;896:14;912:23;939:22;947:3;450:4:22;939:7:21;:22::i;:::-;895:66;;-1:-1:-1;895:66:21;-1:-1:-1;979:18:21;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:21;;;;;;;;;-1:-1:-1;1021:20:21;;1015:4;;-1:-1:-1;1021:20:21;-1:-1:-1;1007:35:21;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:21;-1:-1:-1;1141:18:21;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:21;;-1:-1:-1;799:479:21;-1:-1:-1;;;;;;799:479:21:o;958:198:13:-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:13;;-1:-1:-1;1102:1:13;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;14:131:486:-;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:486:o;470:597::-;582:4;611:2;640;629:9;622:21;672:6;666:13;715:6;710:2;699:9;695:18;688:34;740:1;750:140;764:6;761:1;758:13;750:140;;;859:14;;;855:23;;849:30;825:17;;;844:2;821:26;814:66;779:10;;750:140;;;908:6;905:1;902:13;899:91;;;978:1;973:2;964:6;953:9;949:22;945:31;938:42;899:91;-1:-1:-1;1051:2:486;1030:15;-1:-1:-1;;1026:29:486;1011:45;;;;1058:2;1007:54;;470:597;-1:-1:-1;;;470:597:486:o;1072:180::-;1131:6;1184:2;1172:9;1163:7;1159:23;1155:32;1152:52;;;1200:1;1197;1190:12;1152:52;-1:-1:-1;1223:23:486;;1072:180;-1:-1:-1;1072:180:486:o;1439:247::-;1498:6;1551:2;1539:9;1530:7;1526:23;1522:32;1519:52;;;1567:1;1564;1557:12;1519:52;1606:9;1593:23;1625:31;1650:5;1625:31;:::i;1880:127::-;1941:10;1936:3;1932:20;1929:1;1922:31;1972:4;1969:1;1962:15;1996:4;1993:1;1986:15;2012:921;2080:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:52;;;2149:1;2146;2139:12;2101:52;2189:9;2176:23;2218:18;2259:2;2251:6;2248:14;2245:34;;;2275:1;2272;2265:12;2245:34;2313:6;2302:9;2298:22;2288:32;;2358:7;2351:4;2347:2;2343:13;2339:27;2329:55;;2380:1;2377;2370:12;2329:55;2416:2;2403:16;2438:2;2434;2431:10;2428:36;;;2444:18;;:::i;:::-;2519:2;2513:9;2487:2;2573:13;;-1:-1:-1;;2569:22:486;;;2593:2;2565:31;2561:40;2549:53;;;2617:18;;;2637:22;;;2614:46;2611:72;;;2663:18;;:::i;:::-;2703:10;2699:2;2692:22;2738:2;2730:6;2723:18;2778:7;2773:2;2768;2764;2760:11;2756:20;2753:33;2750:53;;;2799:1;2796;2789:12;2750:53;2855:2;2850;2846;2842:11;2837:2;2829:6;2825:15;2812:46;2900:1;2878:15;;;2895:2;2874:24;2867:35;;;;-1:-1:-1;2882:6:486;2012:921;-1:-1:-1;;;;;2012:921:486:o;3380:388::-;3448:6;3456;3509:2;3497:9;3488:7;3484:23;3480:32;3477:52;;;3525:1;3522;3515:12;3477:52;3564:9;3551:23;3583:31;3608:5;3583:31;:::i;:::-;3633:5;-1:-1:-1;3690:2:486;3675:18;;3662:32;3703:33;3662:32;3703:33;:::i;:::-;3755:7;3745:17;;;3380:388;;;;;:::o;3773:657::-;3942:2;3994:21;;;4064:13;;3967:18;;;4086:22;;;3913:4;;3942:2;4165:15;;;;4139:2;4124:18;;;3913:4;4208:196;4222:6;4219:1;4216:13;4208:196;;;4287:13;;-1:-1:-1;;;;;;4283:40:486;4271:53;;4379:15;;;;4344:12;;;;4244:1;4237:9;4208:196;;;-1:-1:-1;4421:3:486;;3773:657;-1:-1:-1;;;;;;3773:657:486:o;4435:456::-;4512:6;4520;4528;4581:2;4569:9;4560:7;4556:23;4552:32;4549:52;;;4597:1;4594;4587:12;4549:52;4636:9;4623:23;4655:31;4680:5;4655:31;:::i;:::-;4705:5;-1:-1:-1;4762:2:486;4747:18;;4734:32;4775:33;4734:32;4775:33;:::i;:::-;4435:456;;4827:7;;-1:-1:-1;;;4881:2:486;4866:18;;;;4853:32;;4435:456::o;5581:::-;5658:6;5666;5674;5727:2;5715:9;5706:7;5702:23;5698:32;5695:52;;;5743:1;5740;5733:12;5695:52;5782:9;5769:23;5801:31;5826:5;5801:31;:::i;:::-;5851:5;-1:-1:-1;5903:2:486;5888:18;;5875:32;;-1:-1:-1;5959:2:486;5944:18;;5931:32;5972:33;5931:32;5972:33;:::i;:::-;6024:7;6014:17;;;5581:456;;;;;:::o;6375:380::-;6454:1;6450:12;;;;6497;;;6518:61;;6572:4;6564:6;6560:17;6550:27;;6518:61;6625:2;6617:6;6614:14;6594:18;6591:38;6588:161;;;6671:10;6666:3;6662:20;6659:1;6652:31;6706:4;6703:1;6696:15;6734:4;6731:1;6724:15;6760:481;-1:-1:-1;;;;;7045:15:486;;;7027:34;;7097:15;;;7092:2;7077:18;;7070:43;7149:15;;7144:2;7129:18;;7122:43;-1:-1:-1;;;;;;7201:33:486;;;7196:2;7181:18;;7174:61;6976:3;6961:19;;6760:481::o;7246:277::-;7313:6;7366:2;7354:9;7345:7;7341:23;7337:32;7334:52;;;7382:1;7379;7372:12;7334:52;7414:9;7408:16;7467:5;7460:13;7453:21;7446:5;7443:32;7433:60;;7489:1;7486;7479:12;7528:338;7730:2;7712:21;;;7769:2;7749:18;;;7742:30;-1:-1:-1;;;7803:2:486;7788:18;;7781:44;7857:2;7842:18;;7528:338::o;8283:184::-;8353:6;8406:2;8394:9;8385:7;8381:23;8377:32;8374:52;;;8422:1;8419;8412:12;8374:52;-1:-1:-1;8445:16:486;;8283:184;-1:-1:-1;8283:184:486:o;9860:259::-;9938:6;9991:2;9979:9;9970:7;9966:23;9962:32;9959:52;;;10007:1;10004;9997:12;9959:52;10039:9;10033:16;10058:31;10083:5;10058:31;:::i;11048:127::-;11109:10;11104:3;11100:20;11097:1;11090:31;11140:4;11137:1;11130:15;11164:4;11161:1;11154:15;11180:128;11220:3;11251:1;11247:6;11244:1;11241:13;11238:39;;;11257:18;;:::i;:::-;-1:-1:-1;11293:9:486;;11180:128::o;11313:127::-;11374:10;11369:3;11365:20;11362:1;11355:31;11405:4;11402:1;11395:15;11429:4;11426:1;11419:15;11445:135;11484:3;-1:-1:-1;;11505:17:486;;11502:43;;;11525:18;;:::i;:::-;-1:-1:-1;11572:1:486;11561:13;;11445:135::o;11585:178::-;11622:3;11666:4;11659:5;11655:16;11690:7;11680:41;;11701:18;;:::i;:::-;-1:-1:-1;;11737:20:486;;11585:178;-1:-1:-1;;11585:178:486:o;12125:125::-;12165:4;12193:1;12190;12187:8;12184:34;;;12198:18;;:::i;:::-;-1:-1:-1;12235:9:486;;12125:125::o;12255:127::-;12316:10;12311:3;12307:20;12304:1;12297:31;12347:4;12344:1;12337:15;12371:4;12368:1;12361:15;12387:375;-1:-1:-1;;;;;12645:15:486;;;12627:34;;12697:15;;;;12692:2;12677:18;;12670:43;12744:2;12729:18;;12722:34;;;;12577:2;12562:18;;12387:375::o;19023:127::-;19084:10;19079:3;19075:20;19072:1;19065:31;19115:4;19112:1;19105:15;19139:4;19136:1;19129:15;19155:120;19195:1;19221;19211:35;;19226:18;;:::i;:::-;-1:-1:-1;19260:9:486;;19155:120::o;19702:245::-;19781:6;19789;19842:2;19830:9;19821:7;19817:23;19813:32;19810:52;;;19858:1;19855;19848:12;19810:52;-1:-1:-1;;19881:16:486;;19937:2;19922:18;;;19916:25;19881:16;;19916:25;;-1:-1:-1;19702:245:486:o;21592:168::-;21632:7;21698:1;21694;21690:6;21686:14;21683:1;21680:21;21675:1;21668:9;21661:17;21657:45;21654:71;;;21705:18;;:::i;:::-;-1:-1:-1;21745:9:486;;21592:168::o;21765:112::-;21797:1;21823;21813:35;;21828:18;;:::i;:::-;-1:-1:-1;21862:9:486;;21765:112::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_becomeImplementation(bytes)": "56e67728", + "_getExtensionFunctions()": "89f8132e", + "_updatePlugin(address)": "19f496c8", + "_withdrawAdminFees(uint256)": "a7b820df", + "_withdrawIonicFees(uint256)": "b0d58e49", + "accrualBlockNumber()": "6c540baf", + "adminFeeMantissa()": "8d02d9a1", + "approve(address,address)": "7e5465ba", + "borrow(uint256)": "c5ebeaec", + "borrowIndex()": "aa5af0fd", + "claim()": "4e71d92d", + "comptroller()": "5fe3b567", + "contractType()": "cb2ef6f7", + "decimals()": "313ce567", + "delegateType()": "2c436e5b", + "feeSeizeShareMantissa()": "be99f119", + "getCash()": "3b1d21a2", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "liquidateBorrow(address,uint256,address)": "f5e3c462", + "mint(uint256)": "a0712d68", + "name()": "06fdde03", + "plugin()": "ef01df4f", + "protocolSeizeShareMantissa()": "6752e702", + "redeem(uint256)": "db006a75", + "redeemUnderlying(uint256)": "852a12e3", + "repayBorrow(uint256)": "0e752702", + "repayBorrowBehalf(address,uint256)": "2608f818", + "reserveFactorMantissa()": "173b9904", + "seize(address,address,uint256)": "b2a02ff1", + "selfTransferIn(address,uint256)": "135f1334", + "selfTransferOut(address,uint256)": "067db1b3", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/CErc20RewardsDelegate.json b/packages/sdk/deployments/mode/CErc20RewardsDelegate.json new file mode 100644 index 0000000000..f6f27459de --- /dev/null +++ b/packages/sdk/deployments/mode/CErc20RewardsDelegate.json @@ -0,0 +1,2538 @@ +{ + "address": "0x6352b5231de62be60c7ADB8250b08CA9CCF7a9A5", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "AccrueInterest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "Borrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "LiquidateBorrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256" + } + ], + "name": "NewIonicFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "NewMarketInterestRateModel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "NewReserveFactor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "Redeem", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "RepayBorrow", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "benefactor", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "addAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256" + } + ], + "name": "ReservesReduced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "_becomeImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "selfTransferOut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x5c40caa61b0da648b6b16aed7d55be2d93a17caefe8a94988b30040e79b51b25", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x6352b5231de62be60c7ADB8250b08CA9CCF7a9A5", + "transactionIndex": 1, + "gasUsed": "3874842", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc26a717bb90baf6b0b737dc2513f9f9c2af5cb1fa2e33221f67d6fc219f8947b", + "transactionHash": "0x5c40caa61b0da648b6b16aed7d55be2d93a17caefe8a94988b30040e79b51b25", + "logs": [], + "blockNumber": 2067110, + "cumulativeGasUsed": "3921755", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Borrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "LiquidateBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "redeemer", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Redeem", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "RepayBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "benefactor", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesReduced", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "approve" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "claim" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferOut" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_withdrawAdminFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_withdrawIonicFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrow(uint256)": { + "params": { + "borrowAmount": "The amount of the underlying asset to borrow" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "getCash()": { + "returns": { + "_0": "The quantity of underlying asset owned by this contract" + } + }, + "liquidateBorrow(address,uint256,address)": { + "params": { + "borrower": "The borrower of this cToken to be liquidated", + "cTokenCollateral": "The market in which to seize collateral from the borrower", + "repayAmount": "The amount of the underlying borrowed asset to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "mint(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "mintAmount": "The amount of the underlying asset to supply" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeem(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemTokens": "The number of cTokens to redeem into underlying" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeemUnderlying(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemAmount": "The amount of underlying to redeem" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrow(uint256)": { + "params": { + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrowBehalf(address,uint256)": { + "params": { + "borrower": "the account with the debt being payed off", + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "seize(address,address,uint256)": { + "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.", + "params": { + "borrower": "The account having collateral seized", + "liquidator": "The account receiving seized collateral", + "seizeTokens": "The number of cTokens to seize" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_becomeImplementation(bytes)": { + "notice": "Called by the delegator on a delegate to initialize it for duty" + }, + "_withdrawAdminFees(uint256)": { + "notice": "Accrues interest and reduces admin fees by transferring to admin" + }, + "_withdrawIonicFees(uint256)": { + "notice": "Accrues interest and reduces Ionic fees by transferring to Ionic" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "approve(address,address)": { + "notice": "token approval function" + }, + "borrow(uint256)": { + "notice": "Sender borrows assets from the protocol to their own address" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "claim()": { + "notice": "A reward token claim function to be overridden for use cases where rewardToken needs to be pulled in" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "getCash()": { + "notice": "Get cash balance of this cToken in the underlying asset" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "liquidateBorrow(address,uint256,address)": { + "notice": "The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator." + }, + "mint(uint256)": { + "notice": "Sender supplies assets into the market and receives cTokens in exchange" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "redeem(uint256)": { + "notice": "Sender redeems cTokens in exchange for the underlying asset" + }, + "redeemUnderlying(uint256)": { + "notice": "Sender redeems cTokens in exchange for a specified amount of underlying asset" + }, + "repayBorrow(uint256)": { + "notice": "Sender repays their own borrow" + }, + "repayBorrowBehalf(address,uint256)": { + "notice": "Sender repays a borrow belonging to borrower" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "seize(address,address,uint256)": { + "notice": "Transfers collateral tokens (this market) to the liquidator." + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CErc20RewardsDelegate.sol": "CErc20RewardsDelegate" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20RewardsDelegate.sol": { + "keccak256": "0xf816a22a4d0855cd55c6ae69158efa6d20591594945d7352ca5f14ace93c4f3a", + "urls": [ + "bzz-raw://1815aa20ab9079bae895ee19597146a87c3f65a622536aeb50ee3df3e43d0f57", + "dweb:/ipfs/QmamrGVtXFgC2SvQaQ6hGGE12cgiiAKZgUk8sRtNxzXTAV" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50614526806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063852a12e311610130578063b0d58e49116100b8578063c91a424f1161007c578063c91a424f1461044a578063cb2ef6f71461045d578063db006a751461048e578063f3fdb15a146104a1578063f5e3c462146104b457600080fd5b8063b0d58e49146103f9578063b2a02ff11461040c578063be99f1191461041f578063c3bf11cd1461042e578063c5ebeaec1461043757600080fd5b806395d89b41116100ff57806395d89b41146103b95780639826394b146103c1578063a0712d68146103ca578063a7b820df146103dd578063aa5af0fd146103f057600080fd5b8063852a12e31461037f57806389f8132e146103925780638d02d9a1146103a75780638f840ddd146103b057600080fd5b80633b1d21a2116101be57806361feacff1161018257806361feacff146103395780636752e702146103425780636c540baf146103505780636f307dc3146103595780637e5465ba1461036c57600080fd5b80633b1d21a2146102e557806347bd3718146102ed5780634e71d92d1461024a57806356e67728146102f65780635fe3b5671461030957600080fd5b8063173b990411610205578063173b99041461029e57806318160ddd146102a75780632608f818146102b05780632c436e5b146102c3578063313ce567146102d857600080fd5b8063067db1b31461023757806306fdde031461024c5780630e7527021461026a578063135f13341461028b575b600080fd5b61024a610245366004614032565b6104c7565b005b610254610511565b604051610261919061408a565b60405180910390f35b61027d6102783660046140bd565b61059f565b604051908152602001610261565b61027d610299366004614032565b61065c565b61027d60085481565b61027d600f5481565b61027d6102be366004614032565b6106a8565b60035b60405160ff9091168152602001610261565b6003546102c69060ff1681565b61027d610767565b61027d600b5481565b61024a6103043660046140ec565b610776565b6003546103219061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610261565b61027d600d5481565b61027d666379da05b6000081565b61027d60095481565b601354610321906001600160a01b031681565b61024a61037a36600461419d565b6107c8565b61027d61038d3660046140bd565b6108ca565b61039a61097d565b60405161026191906141d6565b61027d60065481565b61027d600c5481565b610254610b85565b61027d600e5481565b61027d6103d83660046140bd565b610b92565b61027d6103eb3660046140bd565b610c47565b61027d600a5481565b61027d6104073660046140bd565b610da5565b61027d61041a366004614224565b610e98565b61027d67016345785d8a000081565b61027d60075481565b61027d6104453660046140bd565b610ebc565b600054610321906001600160a01b031681565b6040805180820190915260158152744345726332305265776172647344656c656761746560581b6020820152610254565b61027d61049c3660046140bd565b610f6f565b600454610321906001600160a01b031681565b61027d6104c2366004614265565b611022565b3330146105035760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b61050d82826110e5565b5050565b6001805461051e906142a7565b80601f016020809104026020016040519081016040528092919081815260200182805461054a906142a7565b80156105975780601f1061056c57610100808354040283529160200191610597565b820191906000526020600020905b81548152906001019060200180831161057a57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105ec9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062d919061430f565b6106495760405162461bcd60e51b81526004016104fa90614331565b600061065483611166565b509392505050565b60003330146106955760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104fa565b61069f83836111f7565b90505b92915050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106f59261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610712573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610736919061430f565b6107525760405162461bcd60e51b81526004016104fa90614331565b600061075e84846113ca565b50949350505050565b600061077161145d565b905090565b3330148061078757506107876114ca565b6107c55760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b60448201526064016104fa565b50565b6107d06114ca565b6108055760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016104fa565b6013546001600160a01b03838116911614156108515760405162461bcd60e51b815260206004820152600b60248201526a21756e6465726c79696e6760a81b60448201526064016104fa565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af11580156108a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c5919061430f565b505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926109179261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610958919061430f565b6109745760405162461bcd60e51b81526004016104fa90614331565b6106a282611647565b60606003600061098b6116c4565b90508160ff16815161099d919061436f565b67ffffffffffffffff8111156109b5576109b56140d6565b6040519080825280602002602001820160405280156109de578160200160208202803683370190505b50925060005b8151811015610a44578181815181106109ff576109ff614387565b6020026020010151848281518110610a1957610a19614387565b6001600160e01b03199092166020928302919091019091015280610a3c8161439d565b9150506109e4565b50805163cb2ef6f760e01b908490610a5b856143b8565b9450610a6a9060ff861661436f565b81518110610a7a57610a7a614387565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b908490610aa9856143b8565b9450610ab89060ff861661436f565b81518110610ac857610ac8614387565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610af7856143b8565b9450610b069060ff861661436f565b81518110610b1657610b16614387565b6001600160e01b03199092166020928302919091019091015260ff821615610b805760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104fa565b505090565b6002805461051e906142a7565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610bdf9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c20919061430f565b610c3c5760405162461bcd60e51b81526004016104fa90614331565b600061065483611a8c565b600080610c5381611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906143d5565b504360095414610cd457610ccd600a6039611bcd565b9150610d96565b82610cdd61145d565b1015610cef57610ccd600e6038611bcd565b600d54831115610d0557610ccd6002603a611bcd565b82600d54610d1391906143ee565b600d55600354604080516303e1469160e61b81529051610d909261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8a9190614405565b846110e5565b60005b91505b610d9f81611c46565b50919050565b600080610db181611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1591906143d5565b504360095414610e2b57610ccd600a6035611bcd565b82610e3461145d565b1015610e4657610ccd600e6034611bcd565b600e54831115610e5c57610ccd60026036611bcd565b600083600e54610e6c91906143ee565b600e819055600054909150610e8a906001600160a01b0316856110e5565b6000925050610d9f81611c46565b60006001610ea581611b09565b610eb133868686611cc9565b915061065481611c46565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f099261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a919061430f565b610f665760405162461bcd60e51b81526004016104fa90614331565b6106a2826121b4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610fbc9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd919061430f565b6110195760405162461bcd60e51b81526004016104fa90614331565b6106a28261222f565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261106f9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa15801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b0919061430f565b6110cc5760405162461bcd60e51b81526004016104fa90614331565b60006110d98585856122ac565b509150505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091018252602080820180516001600160e01b031663a9059cbb60e01b1790528251808401909352601983527f544f4b454e5f5452414e534645525f4f55545f4641494c4544000000000000009083015261050d916123a6565b600080600061117481611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d891906143d5565b506111e4333386612403565b925092506111f181611c46565b50915091565b6013546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126891906143d5565b90506112f86323b872dd60e01b85308660405160240161128a93929190614438565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280601881526020017f544f4b454e5f5452414e534645525f494e5f4641494c454400000000000000008152506123a6565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136591906143d5565b9050818110156113b75760405162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f5700000000000060448201526064016104fa565b6113c182826143ee565b95945050505050565b60008060006113d881611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c91906143d5565b50611448338686612403565b9250925061145581611c46565b509250929050565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077191906143d5565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614405565b6001600160a01b0316336001600160a01b03161480156115c45750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c4919061430f565b8061164157506000546001600160a01b0316331480156116415750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611641919061430f565b91505090565b60008061165381611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b791906143d5565b50610d9333600085612812565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81611700846143b8565b93508360ff168151811061171657611716614387565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81611741846143b8565b93508360ff168151811061175757611757614387565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81611782846143b8565b93508360ff168151811061179857611798614387565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b816117c3846143b8565b93508360ff16815181106117d9576117d9614387565b6001600160e01b03199092166020928302919091019091015263073a938160e11b81611804846143b8565b93508360ff168151811061181a5761181a614387565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b81611845846143b8565b93508360ff168151811061185b5761185b614387565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b81611886846143b8565b93508360ff168151811061189c5761189c614387565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b816118c7846143b8565b93508360ff16815181106118dd576118dd614387565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b81611908846143b8565b93508360ff168151811061191e5761191e614387565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b81611949846143b8565b93508360ff168151811061195f5761195f614387565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b8161198a846143b8565b93508360ff16815181106119a0576119a0614387565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816119cb846143b8565b93508360ff16815181106119e1576119e1614387565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b81611a0c846143b8565b93508360ff1681518110611a2257611a22614387565b6001600160e01b03199092166020928302919091019091015260ff8216156106a25760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104fa565b6000806000611a9a81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe91906143d5565b506111e43385612e5a565b600054600160a01b900460ff16611b4f5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016104fa565b80611bbd57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611c0257611c02614422565b836061811115611c1457611c14614422565b60408051928352602083019190915260009082015260600160405180910390a182601181111561069f5761069f614422565b6000805460ff60a01b1916600160a01b179055806107c557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cae57600080fd5b505af1158015611cc2573d6000803e3d6000fd5b5050505050565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6191906143d5565b90508015611d7e57611d766003601d83613265565b9150506121ac565b846001600160a01b0316846001600160a01b03161415611da457611d766006601e611bcd565b611e09604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611e2c9085613307565b6020830181905282826003811115611e4657611e46614422565b6003811115611e5757611e57614422565b9052506000905081516003811115611e7157611e71614422565b14611ea157611e986009601c83600001516003811115611e9357611e93614422565b613265565b925050506121ac565b611ec0846040518060200160405280666379da05b60000815250613332565b6080820152604080516020810190915267016345785d8a00008152611ee6908590613332565b61014082018190526080820151611efd90866143ee565b611f0791906143ee565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6e91906143d5565b60c082019081526040805160208101909152905181526080820151611f939190613355565b60a0820152604080516020810190915260c08201518152610140820151611fba9190613355565b61016082015260a0810151600c54611fd2919061436f565b60e08201526101408101516080820151600f54611fef91906143ee565b611ff991906143ee565b610120820152610160810151600e54612012919061436f565b6101008201526001600160a01b0386166000908152601060205260409020546060820151612040919061336d565b604083018190528282600381111561205a5761205a614422565b600381111561206b5761206b614422565b905250600090508151600381111561208557612085614422565b146120a757611e986009601b83600001516003811115611e9357611e93614422565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b16808252908490209290925560608501519251928352909290916000805160206144fa833981519152910160405180910390a3306001600160a01b0316856001600160a01b03166000805160206144fa833981519152836080015160405161215491815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b6000806121c081611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222491906143d5565b50610d933384613393565b60008061223b81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f91906143d5565b50610d9333846000612812565b60008060006122ba81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156122fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231e91906143d5565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561235f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238391906143d5565b506123903387878761372e565b9250925061239d81611c46565b50935093915050565b6013546000906123c0906001600160a01b03168484613beb565b8051909150156108c557808060200190518101906123de919061430f565b82906123fd5760405162461bcd60e51b81526004016104fa919061408a565b50505050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af1158015612471573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249591906143d5565b905080156124b6576124aa6003604383613265565b6000925092505061280a565b43600954146124cb576124aa600a6044611bcd565b6125146040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa15801561257e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a291906143d5565b60808201526000198514156125c057608081015160408201526125c8565b604081018590525b6125d68782604001516111f7565b60e0820181905260808201516125eb91613307565b60a083018190526020830182600381111561260857612608614422565b600381111561261957612619614422565b905250600090508160200151600381111561263657612636614422565b146126a95760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c454400000000000060648201526084016104fa565b6126b9600b548260e00151613307565b60c08301819052602083018260038111156126d6576126d6614422565b60038111156126e7576126e7614422565b905250600090508160200151600381111561270457612704614422565b1461276b5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b60648201526084016104fa565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b600082158061281f575081155b61286b5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e74000000000000000060448201526064016104fa565b6128ac6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290e91906143d5565b604082015283156129d15761138884600f5461292a91906143ee565b101561293657600f5493505b60608101849052604080516020810182529082015181526129579085613c7e565b608083018190526020830182600381111561297457612974614422565b600381111561298557612985614422565b90525060009050816020015160038111156129a2576129a2614422565b146129cc576129c46009602c83602001516003811115611e9357611e93614422565b9150506110de565b612b19565b600019831415612a5f57600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5c91906143d5565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac391906143d5565b90506103e8612ad285836143ee565b1015612adc578093505b612aea848360400151613cd0565b60608301819052600f546103e891612b01916143ee565b1015612b1057600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612b579130918b9190600401614438565b6020604051808303816000875af1158015612b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9a91906143d5565b90508015612bb857612baf6003602b83613265565b925050506110de565b4360095414612bcd57612baf600a602f611bcd565b612bdd600f548360600151613307565b60a0840181905260208401826003811115612bfa57612bfa614422565b6003811115612c0b57612c0b614422565b9052506000905082602001516003811115612c2857612c28614422565b14612c4a57612baf6009603184602001516003811115611e9357611e93614422565b6001600160a01b0386166000908152601060205260409020546060830151612c729190613307565b60c0840181905260208401826003811115612c8f57612c8f614422565b6003811115612ca057612ca0614422565b9052506000905082602001516003811115612cbd57612cbd614422565b14612cdf57612baf6009603084602001516003811115611e9357611e93614422565b8160800151612cec61145d565b1015612cfe57612baf600e6032611bcd565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612d349087906110e5565b306001600160a01b0316866001600160a01b03166000805160206144fa8339815191528460600151604051612d6b91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b5060009250612e50915050565b9695505050505050565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e190612e9890309089908990600401614438565b6020604051808303816000875af1158015612eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edb91906143d5565b90508015612efc57612ef06003602183613265565b6000925092505061325e565b4360095414612f1157612ef0600a6024611bcd565b612f526040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb491906143d5565b6040820152612fc386866111f7565b60c0820181905260408051602081018252908301518152612fe49190613d0b565b606083018190526020830182600381111561300157613001614422565b600381111561301257613012614422565b905250600090508160200151600381111561302f5761302f614422565b1461307c5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c454460448201526064016104fa565b60008160600151116130d05760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a454354454400000000000060448201526064016104fa565b8060600151600f546130e2919061436f565b608082015260608101516001600160a01b03871660009081526010602052604090205461310f919061436f565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b03166000805160206144fa83398151915283606001516040516131be91815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561323157600080fd5b505af1158015613245573d6000803e3d6000fd5b5060009250613252915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561329a5761329a614422565b8460618111156132ac576132ac614422565b604080519283526020830191909152810184905260600160405180910390a160038460118111156132df576132df614422565b146132fb578360118111156132f6576132f6614422565b6121ac565b6121ac826103e861436f565b60008083831161332657600061331d84866143ee565b9150915061325e565b5060039050600061325e565b6000670de0b6b3a764000061334b848460000151613d1b565b61069f9190614472565b6000806133628484613d5d565b90506121ac81613d8e565b6000808383018481106133855760009250905061325e565b60026000925092505061325e565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c906133d090309088908890600401614438565b6020604051808303816000875af11580156133ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341391906143d5565b90508015613430576134286003601083613265565b9150506106a2565b436009541461344557613428600a600c611bcd565b600061344f61145d565b90508381101561346e57613465600e600b611bcd565b925050506106a2565b61349a604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156134e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350791906143d5565b60208201819052613518908661336d565b604083018190528282600381111561353257613532614422565b600381111561354357613543614422565b905250600090508151600381111561355d5761355d614422565b146135895761357f6009600e83600001516003811115611e9357611e93614422565b93505050506106a2565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156135e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360691906143d5565b9250821561361b5761357f6003601085613265565b613627600b548661336d565b606083018190528282600381111561364157613641614422565b600381111561365257613652614422565b905250600090508151600381111561366c5761366c614422565b1461368e5761357f6009600d83600001516003811115611e9357611e93614422565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b556136ca86866110e5565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af11580156137a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c891906143d5565b905080156137e9576137dd6003601483613265565b60009250925050613be2565b43600954146137fe576137dd600a6018611bcd565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386191906143d5565b14613872576137dd600a6013611bcd565b866001600160a01b0316866001600160a01b03161415613898576137dd60066019611bcd565b846138a9576137dd60076017611bcd565b6000198514156138bf576137dd60076016611bcd565b6000806138cd898989612403565b90925090508115613902576138f48260118111156138ed576138ed614422565b601a611bcd565b600094509450505050613be2565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b9061393f9030908c908890600401614438565b6040805180830381865afa15801561395b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397f9190614486565b909250905081156139ee5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016104fa565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5b91906143d5565b1015613aa95760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016104fa565b60006001600160a01b038916301415613acf57613ac8308d8d85611cc9565b9050613b45565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613aff908f908f908790600401614438565b6020604051808303816000875af1158015613b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4291906143d5565b90505b8015613b7c5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b60448201526064016104fa565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b6060600080856001600160a01b031685604051613c0891906144aa565b6000604051808303816000865af19150503d8060008114613c45576040519150601f19603f3d011682016040523d82523d6000602084013e613c4a565b606091505b5091509150816113c157805115613c645780518082602001fd5b8360405162461bcd60e51b81526004016104fa919061408a565b600080600080613c8e8686613da6565b90925090506000826003811115613ca757613ca7614422565b14613cb8575091506000905061325e565b6000613cc382613d8e565b9350935050509250929050565b600081613ce584670de0b6b3a76400006144c6565b613cef9190614472565b9050613cfb82846144e5565b156106a25761069f60018261436f565b600080600080613c8e8686613e22565b600061069f83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613e95565b6040805160208101909152600081526040518060200160405280613d85856000015185613d1b565b90529392505050565b80516000906106a290670de0b6b3a764000090614472565b6000613dbe6040518060200160405280600081525090565b600080613dcf866000015186613ee8565b90925090506000826003811115613de857613de8614422565b14613e075750604080516020810190915260008152909250905061325e565b60408051602081019091529081526000969095509350505050565b6000613e3a6040518060200160405280600081525090565b600080613e4f670de0b6b3a764000087613ee8565b90925090506000826003811115613e6857613e68614422565b14613e875750604080516020810190915260008152909250905061325e565b613cc3818660000151613f27565b6000831580613ea2575082155b15613eaf575060006110de565b6000613ebb84866144c6565b905083613ec88683614472565b14839061075e5760405162461bcd60e51b81526004016104fa919061408a565b60008083613efb5750600090508061325e565b83830283613f098683614472565b14613f1c5760026000925092505061325e565b60009250905061325e565b6000613f3f6040518060200160405280600081525090565b600080613f5486670de0b6b3a7640000613ee8565b90925090506000826003811115613f6d57613f6d614422565b14613f8c5750604080516020810190915260008152909250905061325e565b600080613f998388613ff2565b90925090506000826003811115613fb257613fb2614422565b14613fd5578160405180602001604052806000815250955095505050505061325e565b604080516020810190915290815260009890975095505050505050565b60008082614006575060019050600061325e565b60006140128486614472565b915091509250929050565b6001600160a01b03811681146107c557600080fd5b6000806040838503121561404557600080fd5b82356140508161401d565b946020939093013593505050565b60005b83811015614079578181015183820152602001614061565b838111156123fd5750506000910152565b60208152600082518060208401526140a981604085016020870161405e565b601f01601f19169190910160400192915050565b6000602082840312156140cf57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156140fe57600080fd5b813567ffffffffffffffff8082111561411657600080fd5b818401915084601f83011261412a57600080fd5b81358181111561413c5761413c6140d6565b604051601f8201601f19908116603f01168101908382118183101715614164576141646140d6565b8160405282815287602084870101111561417d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156141b057600080fd5b82356141bb8161401d565b915060208301356141cb8161401d565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156142185783516001600160e01b031916835292840192918401916001016141f2565b50909695505050505050565b60008060006060848603121561423957600080fd5b83356142448161401d565b925060208401356142548161401d565b929592945050506040919091013590565b60008060006060848603121561427a57600080fd5b83356142858161401d565b925060208401359150604084013561429c8161401d565b809150509250925092565b600181811c908216806142bb57607f821691505b60208210811415610d9f57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561432157600080fd5b815180151581146110de57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561438257614382614359565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156143b1576143b1614359565b5060010190565b600060ff8216806143cb576143cb614359565b6000190192915050565b6000602082840312156143e757600080fd5b5051919050565b60008282101561440057614400614359565b500390565b60006020828403121561441757600080fd5b81516110de8161401d565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b6000826144815761448161445c565b500490565b6000806040838503121561449957600080fd5b505080516020909101519092909150565b600082516144bc81846020870161405e565b9190910192915050565b60008160001904831182151516156144e0576144e0614359565b500290565b6000826144f4576144f461445c565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "128:676:9:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063852a12e311610130578063b0d58e49116100b8578063c91a424f1161007c578063c91a424f1461044a578063cb2ef6f71461045d578063db006a751461048e578063f3fdb15a146104a1578063f5e3c462146104b457600080fd5b8063b0d58e49146103f9578063b2a02ff11461040c578063be99f1191461041f578063c3bf11cd1461042e578063c5ebeaec1461043757600080fd5b806395d89b41116100ff57806395d89b41146103b95780639826394b146103c1578063a0712d68146103ca578063a7b820df146103dd578063aa5af0fd146103f057600080fd5b8063852a12e31461037f57806389f8132e146103925780638d02d9a1146103a75780638f840ddd146103b057600080fd5b80633b1d21a2116101be57806361feacff1161018257806361feacff146103395780636752e702146103425780636c540baf146103505780636f307dc3146103595780637e5465ba1461036c57600080fd5b80633b1d21a2146102e557806347bd3718146102ed5780634e71d92d1461024a57806356e67728146102f65780635fe3b5671461030957600080fd5b8063173b990411610205578063173b99041461029e57806318160ddd146102a75780632608f818146102b05780632c436e5b146102c3578063313ce567146102d857600080fd5b8063067db1b31461023757806306fdde031461024c5780630e7527021461026a578063135f13341461028b575b600080fd5b61024a610245366004614032565b6104c7565b005b610254610511565b604051610261919061408a565b60405180910390f35b61027d6102783660046140bd565b61059f565b604051908152602001610261565b61027d610299366004614032565b61065c565b61027d60085481565b61027d600f5481565b61027d6102be366004614032565b6106a8565b60035b60405160ff9091168152602001610261565b6003546102c69060ff1681565b61027d610767565b61027d600b5481565b61024a6103043660046140ec565b610776565b6003546103219061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610261565b61027d600d5481565b61027d666379da05b6000081565b61027d60095481565b601354610321906001600160a01b031681565b61024a61037a36600461419d565b6107c8565b61027d61038d3660046140bd565b6108ca565b61039a61097d565b60405161026191906141d6565b61027d60065481565b61027d600c5481565b610254610b85565b61027d600e5481565b61027d6103d83660046140bd565b610b92565b61027d6103eb3660046140bd565b610c47565b61027d600a5481565b61027d6104073660046140bd565b610da5565b61027d61041a366004614224565b610e98565b61027d67016345785d8a000081565b61027d60075481565b61027d6104453660046140bd565b610ebc565b600054610321906001600160a01b031681565b6040805180820190915260158152744345726332305265776172647344656c656761746560581b6020820152610254565b61027d61049c3660046140bd565b610f6f565b600454610321906001600160a01b031681565b61027d6104c2366004614265565b611022565b3330146105035760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b61050d82826110e5565b5050565b6001805461051e906142a7565b80601f016020809104026020016040519081016040528092919081815260200182805461054a906142a7565b80156105975780601f1061056c57610100808354040283529160200191610597565b820191906000526020600020905b81548152906001019060200180831161057a57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105ec9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062d919061430f565b6106495760405162461bcd60e51b81526004016104fa90614331565b600061065483611166565b509392505050565b60003330146106955760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104fa565b61069f83836111f7565b90505b92915050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106f59261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610712573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610736919061430f565b6107525760405162461bcd60e51b81526004016104fa90614331565b600061075e84846113ca565b50949350505050565b600061077161145d565b905090565b3330148061078757506107876114ca565b6107c55760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b60448201526064016104fa565b50565b6107d06114ca565b6108055760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016104fa565b6013546001600160a01b03838116911614156108515760405162461bcd60e51b815260206004820152600b60248201526a21756e6465726c79696e6760a81b60448201526064016104fa565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af11580156108a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c5919061430f565b505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926109179261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610958919061430f565b6109745760405162461bcd60e51b81526004016104fa90614331565b6106a282611647565b60606003600061098b6116c4565b90508160ff16815161099d919061436f565b67ffffffffffffffff8111156109b5576109b56140d6565b6040519080825280602002602001820160405280156109de578160200160208202803683370190505b50925060005b8151811015610a44578181815181106109ff576109ff614387565b6020026020010151848281518110610a1957610a19614387565b6001600160e01b03199092166020928302919091019091015280610a3c8161439d565b9150506109e4565b50805163cb2ef6f760e01b908490610a5b856143b8565b9450610a6a9060ff861661436f565b81518110610a7a57610a7a614387565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b908490610aa9856143b8565b9450610ab89060ff861661436f565b81518110610ac857610ac8614387565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610af7856143b8565b9450610b069060ff861661436f565b81518110610b1657610b16614387565b6001600160e01b03199092166020928302919091019091015260ff821615610b805760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104fa565b505090565b6002805461051e906142a7565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610bdf9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c20919061430f565b610c3c5760405162461bcd60e51b81526004016104fa90614331565b600061065483611a8c565b600080610c5381611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906143d5565b504360095414610cd457610ccd600a6039611bcd565b9150610d96565b82610cdd61145d565b1015610cef57610ccd600e6038611bcd565b600d54831115610d0557610ccd6002603a611bcd565b82600d54610d1391906143ee565b600d55600354604080516303e1469160e61b81529051610d909261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8a9190614405565b846110e5565b60005b91505b610d9f81611c46565b50919050565b600080610db181611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1591906143d5565b504360095414610e2b57610ccd600a6035611bcd565b82610e3461145d565b1015610e4657610ccd600e6034611bcd565b600e54831115610e5c57610ccd60026036611bcd565b600083600e54610e6c91906143ee565b600e819055600054909150610e8a906001600160a01b0316856110e5565b6000925050610d9f81611c46565b60006001610ea581611b09565b610eb133868686611cc9565b915061065481611c46565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f099261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a919061430f565b610f665760405162461bcd60e51b81526004016104fa90614331565b6106a2826121b4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610fbc9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd919061430f565b6110195760405162461bcd60e51b81526004016104fa90614331565b6106a28261222f565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261106f9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa15801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b0919061430f565b6110cc5760405162461bcd60e51b81526004016104fa90614331565b60006110d98585856122ac565b509150505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091018252602080820180516001600160e01b031663a9059cbb60e01b1790528251808401909352601983527f544f4b454e5f5452414e534645525f4f55545f4641494c4544000000000000009083015261050d916123a6565b600080600061117481611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d891906143d5565b506111e4333386612403565b925092506111f181611c46565b50915091565b6013546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126891906143d5565b90506112f86323b872dd60e01b85308660405160240161128a93929190614438565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280601881526020017f544f4b454e5f5452414e534645525f494e5f4641494c454400000000000000008152506123a6565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136591906143d5565b9050818110156113b75760405162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f5700000000000060448201526064016104fa565b6113c182826143ee565b95945050505050565b60008060006113d881611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c91906143d5565b50611448338686612403565b9250925061145581611c46565b509250929050565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077191906143d5565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614405565b6001600160a01b0316336001600160a01b03161480156115c45750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c4919061430f565b8061164157506000546001600160a01b0316331480156116415750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611641919061430f565b91505090565b60008061165381611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b791906143d5565b50610d9333600085612812565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81611700846143b8565b93508360ff168151811061171657611716614387565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81611741846143b8565b93508360ff168151811061175757611757614387565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81611782846143b8565b93508360ff168151811061179857611798614387565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b816117c3846143b8565b93508360ff16815181106117d9576117d9614387565b6001600160e01b03199092166020928302919091019091015263073a938160e11b81611804846143b8565b93508360ff168151811061181a5761181a614387565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b81611845846143b8565b93508360ff168151811061185b5761185b614387565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b81611886846143b8565b93508360ff168151811061189c5761189c614387565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b816118c7846143b8565b93508360ff16815181106118dd576118dd614387565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b81611908846143b8565b93508360ff168151811061191e5761191e614387565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b81611949846143b8565b93508360ff168151811061195f5761195f614387565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b8161198a846143b8565b93508360ff16815181106119a0576119a0614387565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816119cb846143b8565b93508360ff16815181106119e1576119e1614387565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b81611a0c846143b8565b93508360ff1681518110611a2257611a22614387565b6001600160e01b03199092166020928302919091019091015260ff8216156106a25760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104fa565b6000806000611a9a81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe91906143d5565b506111e43385612e5a565b600054600160a01b900460ff16611b4f5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016104fa565b80611bbd57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611c0257611c02614422565b836061811115611c1457611c14614422565b60408051928352602083019190915260009082015260600160405180910390a182601181111561069f5761069f614422565b6000805460ff60a01b1916600160a01b179055806107c557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cae57600080fd5b505af1158015611cc2573d6000803e3d6000fd5b5050505050565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6191906143d5565b90508015611d7e57611d766003601d83613265565b9150506121ac565b846001600160a01b0316846001600160a01b03161415611da457611d766006601e611bcd565b611e09604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611e2c9085613307565b6020830181905282826003811115611e4657611e46614422565b6003811115611e5757611e57614422565b9052506000905081516003811115611e7157611e71614422565b14611ea157611e986009601c83600001516003811115611e9357611e93614422565b613265565b925050506121ac565b611ec0846040518060200160405280666379da05b60000815250613332565b6080820152604080516020810190915267016345785d8a00008152611ee6908590613332565b61014082018190526080820151611efd90866143ee565b611f0791906143ee565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6e91906143d5565b60c082019081526040805160208101909152905181526080820151611f939190613355565b60a0820152604080516020810190915260c08201518152610140820151611fba9190613355565b61016082015260a0810151600c54611fd2919061436f565b60e08201526101408101516080820151600f54611fef91906143ee565b611ff991906143ee565b610120820152610160810151600e54612012919061436f565b6101008201526001600160a01b0386166000908152601060205260409020546060820151612040919061336d565b604083018190528282600381111561205a5761205a614422565b600381111561206b5761206b614422565b905250600090508151600381111561208557612085614422565b146120a757611e986009601b83600001516003811115611e9357611e93614422565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b16808252908490209290925560608501519251928352909290916000805160206144fa833981519152910160405180910390a3306001600160a01b0316856001600160a01b03166000805160206144fa833981519152836080015160405161215491815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b6000806121c081611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222491906143d5565b50610d933384613393565b60008061223b81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f91906143d5565b50610d9333846000612812565b60008060006122ba81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156122fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231e91906143d5565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561235f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238391906143d5565b506123903387878761372e565b9250925061239d81611c46565b50935093915050565b6013546000906123c0906001600160a01b03168484613beb565b8051909150156108c557808060200190518101906123de919061430f565b82906123fd5760405162461bcd60e51b81526004016104fa919061408a565b50505050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af1158015612471573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249591906143d5565b905080156124b6576124aa6003604383613265565b6000925092505061280a565b43600954146124cb576124aa600a6044611bcd565b6125146040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa15801561257e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a291906143d5565b60808201526000198514156125c057608081015160408201526125c8565b604081018590525b6125d68782604001516111f7565b60e0820181905260808201516125eb91613307565b60a083018190526020830182600381111561260857612608614422565b600381111561261957612619614422565b905250600090508160200151600381111561263657612636614422565b146126a95760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c454400000000000060648201526084016104fa565b6126b9600b548260e00151613307565b60c08301819052602083018260038111156126d6576126d6614422565b60038111156126e7576126e7614422565b905250600090508160200151600381111561270457612704614422565b1461276b5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b60648201526084016104fa565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b600082158061281f575081155b61286b5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e74000000000000000060448201526064016104fa565b6128ac6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290e91906143d5565b604082015283156129d15761138884600f5461292a91906143ee565b101561293657600f5493505b60608101849052604080516020810182529082015181526129579085613c7e565b608083018190526020830182600381111561297457612974614422565b600381111561298557612985614422565b90525060009050816020015160038111156129a2576129a2614422565b146129cc576129c46009602c83602001516003811115611e9357611e93614422565b9150506110de565b612b19565b600019831415612a5f57600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5c91906143d5565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac391906143d5565b90506103e8612ad285836143ee565b1015612adc578093505b612aea848360400151613cd0565b60608301819052600f546103e891612b01916143ee565b1015612b1057600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612b579130918b9190600401614438565b6020604051808303816000875af1158015612b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9a91906143d5565b90508015612bb857612baf6003602b83613265565b925050506110de565b4360095414612bcd57612baf600a602f611bcd565b612bdd600f548360600151613307565b60a0840181905260208401826003811115612bfa57612bfa614422565b6003811115612c0b57612c0b614422565b9052506000905082602001516003811115612c2857612c28614422565b14612c4a57612baf6009603184602001516003811115611e9357611e93614422565b6001600160a01b0386166000908152601060205260409020546060830151612c729190613307565b60c0840181905260208401826003811115612c8f57612c8f614422565b6003811115612ca057612ca0614422565b9052506000905082602001516003811115612cbd57612cbd614422565b14612cdf57612baf6009603084602001516003811115611e9357611e93614422565b8160800151612cec61145d565b1015612cfe57612baf600e6032611bcd565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612d349087906110e5565b306001600160a01b0316866001600160a01b03166000805160206144fa8339815191528460600151604051612d6b91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b5060009250612e50915050565b9695505050505050565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e190612e9890309089908990600401614438565b6020604051808303816000875af1158015612eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edb91906143d5565b90508015612efc57612ef06003602183613265565b6000925092505061325e565b4360095414612f1157612ef0600a6024611bcd565b612f526040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb491906143d5565b6040820152612fc386866111f7565b60c0820181905260408051602081018252908301518152612fe49190613d0b565b606083018190526020830182600381111561300157613001614422565b600381111561301257613012614422565b905250600090508160200151600381111561302f5761302f614422565b1461307c5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c454460448201526064016104fa565b60008160600151116130d05760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a454354454400000000000060448201526064016104fa565b8060600151600f546130e2919061436f565b608082015260608101516001600160a01b03871660009081526010602052604090205461310f919061436f565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b03166000805160206144fa83398151915283606001516040516131be91815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561323157600080fd5b505af1158015613245573d6000803e3d6000fd5b5060009250613252915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561329a5761329a614422565b8460618111156132ac576132ac614422565b604080519283526020830191909152810184905260600160405180910390a160038460118111156132df576132df614422565b146132fb578360118111156132f6576132f6614422565b6121ac565b6121ac826103e861436f565b60008083831161332657600061331d84866143ee565b9150915061325e565b5060039050600061325e565b6000670de0b6b3a764000061334b848460000151613d1b565b61069f9190614472565b6000806133628484613d5d565b90506121ac81613d8e565b6000808383018481106133855760009250905061325e565b60026000925092505061325e565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c906133d090309088908890600401614438565b6020604051808303816000875af11580156133ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341391906143d5565b90508015613430576134286003601083613265565b9150506106a2565b436009541461344557613428600a600c611bcd565b600061344f61145d565b90508381101561346e57613465600e600b611bcd565b925050506106a2565b61349a604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156134e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350791906143d5565b60208201819052613518908661336d565b604083018190528282600381111561353257613532614422565b600381111561354357613543614422565b905250600090508151600381111561355d5761355d614422565b146135895761357f6009600e83600001516003811115611e9357611e93614422565b93505050506106a2565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156135e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360691906143d5565b9250821561361b5761357f6003601085613265565b613627600b548661336d565b606083018190528282600381111561364157613641614422565b600381111561365257613652614422565b905250600090508151600381111561366c5761366c614422565b1461368e5761357f6009600d83600001516003811115611e9357611e93614422565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b556136ca86866110e5565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af11580156137a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c891906143d5565b905080156137e9576137dd6003601483613265565b60009250925050613be2565b43600954146137fe576137dd600a6018611bcd565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386191906143d5565b14613872576137dd600a6013611bcd565b866001600160a01b0316866001600160a01b03161415613898576137dd60066019611bcd565b846138a9576137dd60076017611bcd565b6000198514156138bf576137dd60076016611bcd565b6000806138cd898989612403565b90925090508115613902576138f48260118111156138ed576138ed614422565b601a611bcd565b600094509450505050613be2565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b9061393f9030908c908890600401614438565b6040805180830381865afa15801561395b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397f9190614486565b909250905081156139ee5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016104fa565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5b91906143d5565b1015613aa95760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016104fa565b60006001600160a01b038916301415613acf57613ac8308d8d85611cc9565b9050613b45565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613aff908f908f908790600401614438565b6020604051808303816000875af1158015613b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4291906143d5565b90505b8015613b7c5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b60448201526064016104fa565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b6060600080856001600160a01b031685604051613c0891906144aa565b6000604051808303816000865af19150503d8060008114613c45576040519150601f19603f3d011682016040523d82523d6000602084013e613c4a565b606091505b5091509150816113c157805115613c645780518082602001fd5b8360405162461bcd60e51b81526004016104fa919061408a565b600080600080613c8e8686613da6565b90925090506000826003811115613ca757613ca7614422565b14613cb8575091506000905061325e565b6000613cc382613d8e565b9350935050509250929050565b600081613ce584670de0b6b3a76400006144c6565b613cef9190614472565b9050613cfb82846144e5565b156106a25761069f60018261436f565b600080600080613c8e8686613e22565b600061069f83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613e95565b6040805160208101909152600081526040518060200160405280613d85856000015185613d1b565b90529392505050565b80516000906106a290670de0b6b3a764000090614472565b6000613dbe6040518060200160405280600081525090565b600080613dcf866000015186613ee8565b90925090506000826003811115613de857613de8614422565b14613e075750604080516020810190915260008152909250905061325e565b60408051602081019091529081526000969095509350505050565b6000613e3a6040518060200160405280600081525090565b600080613e4f670de0b6b3a764000087613ee8565b90925090506000826003811115613e6857613e68614422565b14613e875750604080516020810190915260008152909250905061325e565b613cc3818660000151613f27565b6000831580613ea2575082155b15613eaf575060006110de565b6000613ebb84866144c6565b905083613ec88683614472565b14839061075e5760405162461bcd60e51b81526004016104fa919061408a565b60008083613efb5750600090508061325e565b83830283613f098683614472565b14613f1c5760026000925092505061325e565b60009250905061325e565b6000613f3f6040518060200160405280600081525090565b600080613f5486670de0b6b3a7640000613ee8565b90925090506000826003811115613f6d57613f6d614422565b14613f8c5750604080516020810190915260008152909250905061325e565b600080613f998388613ff2565b90925090506000826003811115613fb257613fb2614422565b14613fd5578160405180602001604052806000815250955095505050505061325e565b604080516020810190915290815260009890975095505050505050565b60008082614006575060019050600061325e565b60006140128486614472565b915091509250929050565b6001600160a01b03811681146107c557600080fd5b6000806040838503121561404557600080fd5b82356140508161401d565b946020939093013593505050565b60005b83811015614079578181015183820152602001614061565b838111156123fd5750506000910152565b60208152600082518060208401526140a981604085016020870161405e565b601f01601f19169190910160400192915050565b6000602082840312156140cf57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156140fe57600080fd5b813567ffffffffffffffff8082111561411657600080fd5b818401915084601f83011261412a57600080fd5b81358181111561413c5761413c6140d6565b604051601f8201601f19908116603f01168101908382118183101715614164576141646140d6565b8160405282815287602084870101111561417d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156141b057600080fd5b82356141bb8161401d565b915060208301356141cb8161401d565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156142185783516001600160e01b031916835292840192918401916001016141f2565b50909695505050505050565b60008060006060848603121561423957600080fd5b83356142448161401d565b925060208401356142548161401d565b929592945050506040919091013590565b60008060006060848603121561427a57600080fd5b83356142858161401d565b925060208401359150604084013561429c8161401d565b809150509250925092565b600181811c908216806142bb57607f821691505b60208210811415610d9f57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561432157600080fd5b815180151581146110de57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561438257614382614359565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156143b1576143b1614359565b5060010190565b600060ff8216806143cb576143cb614359565b6000190192915050565b6000602082840312156143e757600080fd5b5051919050565b60008282101561440057614400614359565b500390565b60006020828403121561441757600080fd5b81516110de8161401d565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b6000826144815761448161445c565b500490565b6000806040838503121561449957600080fd5b505080516020909101519092909150565b600082516144bc81846020870161405e565b9190910192915050565b60008160001904831182151516156144e0576144e0614359565b500290565b6000826144f4576144f461445c565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "128:676:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6703:158:10;;;;;;:::i;:::-;;:::i;:::-;;580:18:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4337:168:10;;;;;;:::i;:::-;;:::i;:::-;;;1452:25:486;;;1440:2;1425:18;4337:168:10;1306:177:486;6865:185:10;;;;;;:::i;:::-;;:::i;1783:36:12:-;;;;;;2626:26;;;;;;4771:208:10;;;;;;:::i;:::-;;:::i;598:88:9:-;680:1;598:88;;;1660:4:486;1648:17;;;1630:36;;1618:2;1603:18;598:88:9;1488:184:486;750:21:12;;;;;;;;;5851:95:10;;;:::i;2162:27:12:-;;;;;;1147:155:5;;;;;;:::i;:::-;;:::i;1148:35:12:-;;;;;;;;-1:-1:-1;;;;;1148:35:12;;;;;;-1:-1:-1;;;;;2925:32:486;;;2907:51;;2895:2;2880:18;1148:35:12;2735:229:486;2405:29:12;;;;;;3491:59;;3544:6;3491:59;;1896:33;;;;;;3740:25;;;;;-1:-1:-1;;;;;3740:25:12;;;372:222:9;;;;;;:::i;:::-;;:::i;3617:153:10:-;;;;;;:::i;:::-;;:::i;272:782:5:-;;;:::i;:::-;;;;;;;:::i;1551:31:12:-;;;;;;2282:28;;;;;;663:20;;;:::i;2529:29::-;;;;;;2669:152:10;;;;;;:::i;:::-;;:::i;8504:1035::-;;;;;;:::i;:::-;;:::i;2037:26:12:-;;;;;;7283:988:10;;;;;;:::i;:::-;;:::i;6476:223::-;;;;;;:::i;:::-;;:::i;3619:52:12:-;;3667:4;3619:52;;1668:31;;;;;;4015:133:10;;;;;;:::i;:::-;;:::i;336:33:12:-;;;;;-1:-1:-1;;;;;336:33:12;;;690:112:9;767:30;;;;;;;;;;;;-1:-1:-1;;;767:30:9;;;;690:112;;3150:133:10;;;;;;:::i;:::-;;:::i;1272:42:12:-;;;;;-1:-1:-1;;;;;1272:42:12;;;5433:264:10;;;;;;:::i;:::-;;:::i;6703:158::-;6788:10;6810:4;6788:27;6780:45;;;;-1:-1:-1;;;6780:45:10;;5815:2:486;6780:45:10;;;5797:21:486;5854:1;5834:18;;;5827:29;-1:-1:-1;;;5872:18:486;;;5865:35;5917:18;;6780:45:10;;;;;;;;;6831:25;6845:2;6849:6;6831:13;:25::i;:::-;6703:158;;:::o;580:18:12:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4337:168:10:-;4419:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4435:11:::1;4452:32;4472:11;4452:19;:32::i;:::-;-1:-1:-1::0;4434:50:10;4337:168;-1:-1:-1;;;4337:168:10:o;6865:185::-;6946:7;6969:10;6991:4;6969:27;6961:45;;;;-1:-1:-1;;;6961:45:10;;5815:2:486;6961:45:10;;;5797:21:486;5854:1;5834:18;;;5827:29;-1:-1:-1;;;5872:18:486;;;5865:35;5917:18;;6961:45:10;5613:328:486;6961:45:10;7019:26;7032:4;7038:6;7019:12;:26::i;:::-;7012:33;;6865:185;;;;;:::o;4771:208::-;4877:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4893:11:::1;4910:48;4936:8;4946:11;4910:25;:48::i;:::-;-1:-1:-1::0;4892:66:10;4771:208;-1:-1:-1;;;;4771:208:10:o;5851:95::-;5902:7;5924:17;:15;:17::i;:::-;5917:24;;5851:95;:::o;1147:155:5:-;1230:10;1252:4;1230:27;;:47;;;1261:16;:14;:16::i;:::-;1222:75;;;;-1:-1:-1;;;1222:75:5;;7644:2:486;1222:75:5;;;7626:21:486;7683:2;7663:18;;;7656:30;-1:-1:-1;;;7702:18:486;;;7695:45;7757:18;;1222:75:5;7442:339:486;1222:75:5;1147:155;:::o;372:222:9:-;446:16;:14;:16::i;:::-;438:35;;;;-1:-1:-1;;;438:35:9;;7988:2:486;438:35:9;;;7970:21:486;8027:1;8007:18;;;8000:29;-1:-1:-1;;;8045:18:486;;;8038:36;8091:18;;438:35:9;7786:329:486;438:35:9;497:10;;-1:-1:-1;;;;;487:20:9;;;497:10;;487:20;;479:44;;;;-1:-1:-1;;;479:44:9;;8322:2:486;479:44:9;;;8304:21:486;8361:2;8341:18;;;8334:30;-1:-1:-1;;;8380:18:486;;;8373:41;8431:18;;479:44:9;8120:335:486;479:44:9;530:59;;-1:-1:-1;;;530:59:9;;-1:-1:-1;;;;;8652:32:486;;;530:59:9;;;8634:51:486;-1:-1:-1;;8701:18:486;;;8694:34;530:30:9;;;;;8607:18:486;;530:59:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;372:222;;:::o;3617:153:10:-;3705:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;3727:38:::1;3752:12;3727:24;:38::i;272:782:5:-:0;344:33;402:1;385:14;451:30;:28;:30::i;:::-;410:71;;552:8;520:40;;:22;:29;:40;;;;:::i;:::-;507:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:54:5;;487:74;;573:9;568:123;592:22;:29;588:1;:33;568:123;;;659:22;682:1;659:25;;;;;;;;:::i;:::-;;;;;;;636:17;654:1;636:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;636:48:5;;;:20;;;;;;;;;;;:48;623:3;;;;:::i;:::-;;;;568:123;;;-1:-1:-1;728:29:5;;-1:-1:-1;;;761:26:5;697:17;;715:10;;;:::i;:::-;;-1:-1:-1;715:42:5;;;;;;:::i;:::-;697:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;697:90:5;;;:61;;;;;;;;;;;:90;824:29;;-1:-1:-1;;;857:26:5;793:17;;811:10;;;:::i;:::-;;-1:-1:-1;811:42:5;;;;;;:::i;:::-;793:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;793:90:5;;;:61;;;;;;;;;;;:90;920:29;;-1:-1:-1;;;953:35:5;889:17;;907:10;;;:::i;:::-;;-1:-1:-1;907:42:5;;;;;;:::i;:::-;889:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;889:99:5;;;:61;;;;;;;;;;;:99;1003:13;;;;995:54;;;;-1:-1:-1;;;995:54:5;;9661:2:486;995:54:5;;;9643:21:486;9700:2;9680:18;;;9673:30;9739;9719:18;;;9712:58;9787:18;;995:54:5;9459:352:486;995:54:5;379:675;;272:782;:::o;663:20:12:-;;;;;;;:::i;2669:152:10:-;2743:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;2759:11:::1;2776:24;2789:10;2776:12;:24::i;8504:1035::-:0;8603:7;8587:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;8618:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8687:12;8665:18;;:34;8661:135;;8716:73;8721:22;8745:43;8716:4;:73::i;:::-;8709:80;;;;8661:135;8894:14;8874:17;:15;:17::i;:::-;:34;8870:149;;;8925:87;8930:29;8961:50;8925:4;:87::i;8870:149::-;9046:14;;9029;:31;9025:124;;;9077:65;9082:15;9099:42;9077:4;:65::i;9025:124::-;9293:14;9276;;:31;;;;:::i;:::-;9259:14;:48:::0;9459:11:::1;::::0;9430:50:::1;::::0;;-1:-1:-1;;;9430:50:10;;;;9416:81:::1;::::0;9459:11:::1;::::0;::::1;-1:-1:-1::0;;;;;9459:11:10::1;::::0;9430:48:::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;9459:11;9430:50:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9482:14;9416:13;:81::i;:::-;9519:14;9511:23;9504:30;;41731:1;41738:29:::0;41757:9;41738:18;:29::i;:::-;8504:1035;;;;:::o;7283:988::-;7382:7;7366:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;7397:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7466:12;7444:18;;:34;7440:135;;7495:73;7500:22;7524:43;7495:4;:73::i;7440:135::-;7605:14;7585:17;:15;:17::i;:::-;:34;7581:149;;;7636:87;7641:29;7672:50;7636:4;:87::i;7581:149::-;7757:14;;7740;:31;7736:124;;;7788:65;7793:15;7810:42;7788:4;:65::i;7736:124::-;7971:25;8016:14;7999;;:31;;;;:::i;:::-;8036:14;:34:::0;;;8201:10:::1;::::0;7971:59;;-1:-1:-1;8179:50:10::1;::::0;-1:-1:-1;;;;;8201:10:10::1;8214:14:::0;8179:13:::1;:50::i;:::-;8251:14;8236:30;;;41738:29:::0;41757:9;41738:18;:29::i;6476:223::-;6612:7;6597:4;41695:30;41715:9;41695:19;:30::i;:::-;6634:60:::1;6648:10;6660;6672:8;6682:11;6634:13;:60::i;:::-;6627:67;;41738:29:::0;41757:9;41738:18;:29::i;4015:133::-;4093:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;4115:28:::1;4130:12;4115:14;:28::i;3150:133::-:0;3228:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;3250:28:::1;3265:12;3250:14;:28::i;5433:264::-:0;5579:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:10;;-1:-1:-1;;;;;1080:10:10;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:10;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:10;;;;;;;:::i;:::-;5595:11:::1;5612:64;5636:8;5646:11;5659:16;5612:23;:64::i;:::-;-1:-1:-1::0;5594:82:10;-1:-1:-1;;1193:1:10::1;5433:264:::0;;;;;:::o;11820:215::-;11921:68;;;-1:-1:-1;;;;;8652:32:486;;11921:68:10;;;8634:51:486;8701:18;;;;8694:34;;;11921:68:10;;;;;;;;;;8607:18:486;;;;11921:68:10;;;;;;;;-1:-1:-1;;;;;11921:68:10;-1:-1:-1;;;11921:68:10;;;11894:136;;;;;;;;;;;;;;;;;;:19;:136::i;27701:307::-;27789:7;27798;27773:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;27813:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27950:53;27967:10;27979;27991:11;27950:16;:53::i;:::-;27943:60;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;27701:307;;;;:::o;10506:641::-;10638:10;;10623:51;;-1:-1:-1;;;10623:51:10;;10668:4;10623:51;;;2907::486;10584:7:10;;;;-1:-1:-1;;;;;10638:10:10;;;;10623:36;;2880:18:486;;10623:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10599:75;;10680:156;10730:36;;;10768:4;10782;10789:6;10707:89;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;10707:89:10;;;;;;;-1:-1:-1;;;;;10707:89:10;;;;;;;;;;;10680:156;;;;;;;;;;;;;;;;;:19;:156::i;:::-;10941:10;;10926:51;;-1:-1:-1;;;10926:51:10;;10971:4;10926:51;;;2907::486;10903:20:10;;-1:-1:-1;;;;;10941:10:10;;10926:36;;2880:18:486;;10926:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10903:74;;11007:13;10991:12;:29;;10983:68;;;;-1:-1:-1;;;10983:68:10;;11105:2:486;10983:68:10;;;11087:21:486;11144:2;11124:18;;;11117:30;11183:28;11163:18;;;11156:56;11229:18;;10983:68:10;10903:350:486;10983:68:10;11064:28;11079:13;11064:12;:28;:::i;:::-;11057:35;10506:641;-1:-1:-1;;;;;10506:641:10:o;28319:343::-;28443:7;28452;28423:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;28469:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28606:51;28623:10;28635:8;28645:11;28606:16;:51::i;:::-;28599:58;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;28319:343;;;;;;:::o;9784:136::-;9879:10;;9864:51;;-1:-1:-1;;;9864:51:10;;9909:4;9864:51;;;2907::486;9842:7:10;;-1:-1:-1;;;;;9879:10:10;;9864:36;;2880:18:486;;9864:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10605:339:12:-;10654:4;10666:39;10737:11;;;;;;;;;-1:-1:-1;;;;;10737:11:12;10666:84;;10784:18;-1:-1:-1;;;;;10784:24:12;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10770:40:12;:10;-1:-1:-1;;;;;10770:40:12;;:79;;;;;10814:18;-1:-1:-1;;;;;10814:33:12;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10769:170;;;-1:-1:-1;10883:10:12;;-1:-1:-1;;;;;10883:10:12;10861;:33;:77;;;;;10898:18;-1:-1:-1;;;;;10898:38:12;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10756:183;;;10605:339;:::o;17924:280:10:-;18018:7;18002:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;18033:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:40;18171:10;18183:1;18186:12;18159:11;:40::i;1203:1102::-:0;1359:22;;;1315:2;1359:22;;;;;;;;;1275:15;;1315:2;1298:14;;1315:2;1359:22;;;;;;;;;;-1:-1:-1;;1323:58:10;-1:-1:-1;;;;1323:58:10;1405:10;;;:::i;:::-;;;;1387:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1387:50:10;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;1443:17:10;1461:10;;;:::i;:::-;;;;1443:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1443:52:10;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1501:17:10;1519:10;;;:::i;:::-;;;;1501:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1501:62:10;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;1569:17:10;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:52:10;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1627:17:10;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:57:10;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;1690:17:10;1708:10;;;:::i;:::-;;;;1690:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1690:63:10;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1759:17:10;1777:10;;;:::i;:::-;;;;1759:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1759:61:10;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;1826:17:10;1844:10;;;:::i;:::-;;;;1826:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1826:53:10;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1885:17:10;1903:10;;;:::i;:::-;;;;1885:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1885:51:10;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;1942:17:10;1960:10;;;:::i;:::-;;;;1942:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1942:61:10;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2009:17:10;2027:10;;;:::i;:::-;;;;2009:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2009:60:10;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2075:17:10;2093:10;;;:::i;:::-;;;;2075:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2075:64:10;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2145:17:10;2163:10;;;:::i;:::-;;;;2145:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2145:64:10;;;:29;;;;;;;;;;;:64;2224:13;;;;2216:54;;;;-1:-1:-1;;;2216:54:10;;9661:2:486;2216:54:10;;;9643:21:486;9700:2;9680:18;;;9673:30;9739;9719:18;;;9712:58;9787:18;;2216:54:10;9459:352:486;13048:290:10;13128:7;13137;13112:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;13152:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13300:33;13310:10;13322;13300:9;:33::i;42073:178::-:0;42140:11;;-1:-1:-1;;;42140:11:10;;;;42132:34;;;;-1:-1:-1;;;42132:34:10;;11460:2:486;42132:34:10;;;11442:21:486;11499:2;11479:18;;;11472:30;-1:-1:-1;;;11518:18:486;;;11511:40;11568:18;;42132:34:10;11258:334:486;42132:34:10;42177:9;42172:49;;42188:11;;;;;;;;;-1:-1:-1;;;;;42188:11:10;-1:-1:-1;;;;;42188:31:10;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:49;-1:-1:-1;42241:5:10;42227:19;;-1:-1:-1;;;;42227:19:10;;;42073:178::o;7757:151:20:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;11807:25:486;;;11863:2;11848:18;;11841:34;;;;7875:1:20;11891:18:486;;;11884:34;11795:2;11780:18;7838:39:20;;;;;;;7899:3;7891:12;;;;;;;;:::i;42551:169:10:-;42609:11;:18;;-1:-1:-1;;;;42609:18:10;-1:-1:-1;;;42609:18:10;;;42672:9;42667:48;;42683:11;;;;;;;;;-1:-1:-1;;;;;42683:11:10;-1:-1:-1;;;;;42683:30:10;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42551:169;:::o;38262:3163::-;38472:11;;:87;;-1:-1:-1;;;38472:87:10;;38505:4;38472:87;;;12226:34:486;-1:-1:-1;;;;;12296:15:486;;;12276:18;;;12269:43;12348:15;;;12328:18;;;12321:43;12400:15;;;12380:18;;;12373:43;12432:19;;;12425:35;;;38403:7:10;;;;38472:11;;;;;;;;:24;;12160:19:486;;38472:87:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38454:105;-1:-1:-1;38569:12:10;;38565:139;;38598:99;38609:27;38638:49;38689:7;38598:10;:99::i;:::-;38591:106;;;;;38565:139;38766:10;-1:-1:-1;;;;;38754:22:10;:8;-1:-1:-1;;;;;38754:22:10;;38750:134;;;38793:84;38798:26;38826:50;38793:4;:84::i;38750:134::-;38890:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38890:34:10;-1:-1:-1;;;;;39230:23:10;;;;;;:13;:23;;;;;;39222:45;;39255:11;39222:7;:45::i;:::-;39196:22;;;39181:86;;;39182:4;39181:86;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;39293:18:10;;-1:-1:-1;39277:12:10;;:34;;;;;;;;:::i;:::-;;39273:167;;39328:105;39339:16;39357:52;39419:4;:12;;;39411:21;;;;;;;;:::i;:::-;39328:10;:105::i;:::-;39321:112;;;;;;39273:167;39473:64;39478:11;39491:45;;;;;;;;3544:6:12;39491:45:10;;;39473:4;:64::i;:::-;39446:24;;;:91;39583:40;;;;;;;;;3667:4:12;39583:40:10;;39565:59;;39570:11;;39565:4;:59::i;:::-;39543:19;;;:81;;;39673:24;;;;39659:38;;:11;:38;:::i;:::-;:60;;;;:::i;:::-;39630:26;;;:89;41519:4;-1:-1:-1;;;;;39754:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39726:25;;;:69;;;39855:44;;;;;;;;;39871:25;;39855:44;;-1:-1:-1;;;39907:24:10;39829:108;;39855:44;39829:18;:108::i;:::-;39802:24;;;:135;39984:44;;;;;;;;;40000:25;;;;39984:44;;40030:19;;;;39965:85;;39984:44;39965:18;:85::i;:::-;39943:19;;;:107;40097:24;;;;40081:13;;:40;;40097:24;40081:40;:::i;:::-;40057:21;;;:64;40190:19;;;;40163:24;;;;40149:11;;:38;;40163:24;40149:38;:::i;:::-;:60;;;;:::i;:::-;40127:19;;;:82;40256:19;;;;40239:14;;:36;;40256:19;40239:36;:::i;:::-;40215:21;;;:60;-1:-1:-1;;;;;40333:25:10;;;;;;:13;:25;;;;;;40360:26;;;;40325:62;;40333:25;40325:7;:62::i;:::-;40297:24;;;40282:105;;;40283:4;40282:105;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;40413:18:10;;-1:-1:-1;40397:12:10;;:34;;;;;;;;:::i;:::-;;40393:167;;40448:105;40459:16;40477:52;40539:4;:12;;;40531:21;;;;;;;;:::i;40393:167::-;40752:21;;;;40736:13;:37;40793:19;;;;40779:11;:33;40835:21;;;;40818:14;:38;40889:22;;;;;-1:-1:-1;;;;;40863:23:10;;;-1:-1:-1;40863:23:10;;;:13;:23;;;;;;:48;;;;40945:24;;;;40917:25;;;;;;;;;;:52;;;;41044:26;;;;41013:58;;1452:25:486;;;40917::10;;40863:23;;-1:-1:-1;;;;;;;;;;;41013:58:10;1425:18:486;41013:58:10;;;;;;;41109:4;-1:-1:-1;;;;;41082:59:10;41091:8;-1:-1:-1;;;;;41082:59:10;-1:-1:-1;;;;;;;;;;;41116:4:10;:24;;;41082:59;;;;1452:25:486;;1440:2;1425:18;;1306:177;41082:59:10;;;;;;;;41181:24;;;;41207:21;;;;41152:77;;;41174:4;12673:51:486;;12755:2;12740:18;;12733:34;;;;12783:18;;12776:34;41152:77:10;;12661:2:486;12646:18;41152:77:10;;;;;;;41405:14;41390:30;;;;38262:3163;;;;;;;:::o;23833:267::-;23917:7;23901:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;23932:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24058:37;24070:10;24082:12;24058:11;:37::i;17296:270::-:0;17380:7;17364:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;17395:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17521:40;17533:10;17545:12;17559:1;17521:11;:40::i;32809:437::-:0;32961:7;32970;32945:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;32985:34:10::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33035:16;-1:-1:-1::0;;;;;33027:40:10::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33168:73;33189:10;33201:8;33211:11;33224:16;33168:20;:73::i;:::-;33161:80;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;32809:437;;;;;;;:::o;12419:253::-;12550:10;;12510:23;;12536:45;;-1:-1:-1;;;;;12550:10:10;12562:4;12568:12;12536:13;:45::i;:::-;12591:17;;12510:71;;-1:-1:-1;12591:21:10;12587:80;;12633:10;12622:30;;;;;;;;;;;;:::i;:::-;12654:12;12614:53;;;;;-1:-1:-1;;;12614:53:10;;;;;;;;:::i;:::-;;12504:168;12419:253;;:::o;29313:2997::-;29511:11;;:75;;-1:-1:-1;;;29511:75:10;;29550:4;29511:75;;;13090:34:486;-1:-1:-1;;;;;13160:15:486;;;13140:18;;;13133:43;13212:15;;;13192:18;;;13185:43;13244:18;;;13237:34;;;29427:7:10;;;;;;29511:11;;;;;;;;:30;;13024:19:486;;29511:75:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29493:93;-1:-1:-1;29596:12:10;;29592:141;;29626:96;29637:27;29666:46;29714:7;29626:10;:96::i;:::-;29724:1;29618:108;;;;;;;29592:141;29832:12;29810:18;;:34;29806:137;;29862:70;29867:22;29891:40;29862:4;:70::i;29806:137::-;29949:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:32:10;-1:-1:-1;;;;;30084:24:10;;;;;;:14;:24;;;;;:38;;;30063:18;;;:59;41519:4;30226:50;;-1:-1:-1;;;30226:50:10;;-1:-1:-1;;;;;2925:32:486;;;30226:50:10;;;2907:51:486;30226:40:10;;;;;;;2880:18:486;;30226:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30204:19;;;:72;-1:-1:-1;;30348:32:10;;30344:142;;;30409:19;;;;30390:16;;;:38;30344:142;;;30449:16;;;:30;;;30344:142;31027:37;31040:5;31047:4;:16;;;31027:12;:37::i;:::-;31002:22;;;:62;;;31343:19;;;;31335:52;;:7;:52::i;:::-;31309:22;;;31294:93;;;31295:12;;;31294:93;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31417:18:10;;-1:-1:-1;31401:4:10;:12;;;:34;;;;;;;;:::i;:::-;;31393:105;;;;-1:-1:-1;;;31393:105:10;;13484:2:486;31393:105:10;;;13466:21:486;13523:2;13503:18;;;13496:30;13562:34;13542:18;;;13535:62;13633:28;13613:18;;;13606:56;13679:19;;31393:105:10;13282:422:486;31393:105:10;31544:45;31552:12;;31566:4;:22;;;31544:7;:45::i;:::-;31520:20;;;31505:84;;;31506:12;;;31505:84;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31619:18:10;;-1:-1:-1;31603:4:10;:12;;;:34;;;;;;;;:::i;:::-;;31595:96;;;;-1:-1:-1;;;31595:96:10;;13911:2:486;31595:96:10;;;13893:21:486;13950:2;13930:18;;;13923:30;13989:34;13969:18;;;13962:62;-1:-1:-1;;;14040:18:486;;;14033:47;14097:19;;31595:96:10;13709:413:486;31595:96:10;31800:22;;;;;;-1:-1:-1;;;;;31763:24:10;;;;;;;:14;:24;;;;;;;;;:59;;;31869:11;;31828:38;;;;:52;;;;31901:20;;;;31886:12;:35;;;32000:22;;;;32024;;31971:98;;14442:15:486;;;14424:34;;14474:18;;;14467:43;;;;14526:18;;14519:34;;;;14584:2;14569:18;;14562:34;;;;14627:3;14612:19;;14605:35;;;;31971:98:10;;14358:19:486;31971:98:10;;;;;;;32282:22;;;32265:14;;-1:-1:-1;32282:22:10;-1:-1:-1;;29313:2997:10;;;;;;;:::o;19181:4407::-;19302:7;19325:19;;;:42;;-1:-1:-1;19348:19:10;;19325:42;19317:79;;;;-1:-1:-1;;;19317:79:10;;14853:2:486;19317:79:10;;;14835:21:486;14892:2;14872:18;;;14865:30;14931:26;14911:18;;;14904:54;14975:18;;19317:79:10;14651:348:486;19317:79:10;19403:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19403:27:10;41519:4;-1:-1:-1;;;;;19465:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19437:25;;;:69;19517:18;;19513:1634;;19637:4;19620:14;19606:11;;:28;;;;:::i;:::-;:35;19602:69;;;19660:11;;19643:28;;19602:69;19886:17;;;:34;;;19992:44;;;;;;;;20008:25;;;;19992:44;;19965:103;;19906:14;19965:17;:103::i;:::-;19944:17;;;19929:139;;;19930:12;;;19929:139;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;20096:18:10;;-1:-1:-1;20080:4:10;:12;;;:34;;;;;;;;:::i;:::-;;20076:182;;20143:106;20154:16;20172:53;20235:4;:12;;;20227:21;;;;;;;;:::i;20143:106::-;20126:123;;;;;20076:182;19513:1634;;;-1:-1:-1;;20282:14:10;:35;20278:150;;;20346:11;;:73;;-1:-1:-1;;;20346:73:10;;-1:-1:-1;;;;;15273:15:486;;;20346:73:10;;;15255:34:486;20405:4:10;15305:18:486;;;15298:43;20413:5:10;15357:18:486;;;15350:50;20346:11:10;;;;;;;;:32;;15190:18:486;;20346:73:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20329:90;;20278:150;20493:31;41519:4;-1:-1:-1;;;;;20527:46:10;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20493:82;-1:-1:-1;20630:4:10;20587:40;20613:14;20493:82;20587:40;:::i;:::-;:47;20583:93;;;20653:23;20636:40;;20583:93;20903:53;20914:14;20930:4;:25;;;20903:10;:53::i;:::-;20883:17;;;:73;;;21026:11;;21060:4;;21026:31;;;:::i;:::-;:38;21022:75;;;21086:11;;21066:17;;;:31;21022:75;-1:-1:-1;21106:17:10;;;:34;;;19513:1634;21208:11;;21259:17;;;;21208:69;;-1:-1:-1;;;21208:69:10;;21190:15;;21208:11;;;-1:-1:-1;;;;;21208:11:10;;:25;;:69;;21242:4;;21249:8;;21259:17;21208:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21190:87;-1:-1:-1;21287:12:10;;21283:130;;21316:90;21327:27;21356:40;21398:7;21316:10;:90::i;:::-;21309:97;;;;;;21283:130;21512:12;21490:18;;:34;21486:126;;21541:64;21546:22;21570:34;21541:4;:64::i;21486:126::-;21876:39;21884:11;;21897:4;:17;;;21876:7;:39::i;:::-;21853:19;;;21838:77;;;21839:12;;;21838:77;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;21941:18:10;;-1:-1:-1;21925:4:10;:12;;;:34;;;;;;;;:::i;:::-;;21921:177;;21984:107;21995:16;22013:54;22077:4;:12;;;22069:21;;;;;;;;:::i;21921:177::-;-1:-1:-1;;;;;22152:23:10;;;;;;:13;:23;;;;;;22177:17;;;;22144:51;;22152:23;22144:7;:51::i;:::-;22119:21;;;22104:91;;;22105:12;;;22104:91;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;22221:18:10;;-1:-1:-1;22205:4:10;:12;;;:34;;;;;;;;:::i;:::-;;22201:180;;22264:110;22275:16;22293:57;22360:4;:12;;;22352:21;;;;;;;;:::i;22201:180::-;22471:4;:17;;;22451;:15;:17::i;:::-;:37;22447:146;;;22505:81;22510:29;22541:44;22505:4;:81::i;22447:146::-;22779:19;;;;22765:11;:33;22830:21;;;;-1:-1:-1;;;;;22804:23:10;;;;;;:13;:23;;;;;:47;23215:17;;;;23191:42;;22818:8;;23191:13;:42::i;:::-;23327:4;-1:-1:-1;;;;;23300:52:10;23309:8;-1:-1:-1;;;;;23300:52:10;-1:-1:-1;;;;;;;;;;;23334:4:10;:17;;;23300:52;;;;1452:25:486;;1440:2;1425:18;;1306:177;23300:52:10;;;;;;;;23380:17;;;;23399;;;;;23363:54;;;-1:-1:-1;;;;;12691:32:486;;12673:51;;12755:2;12740:18;;12733:34;;;;12783:18;;12776:34;23363:54:10;;12646:18:486;23363:54:10;;;;;;;23459:11;;23509:17;;;;23528;;;;23459:87;;-1:-1:-1;;;23459:87:10;;23492:4;23459:87;;;15680:34:486;-1:-1:-1;;;;;15750:15:486;;;15730:18;;;15723:43;15782:18;;;15775:34;;;;15825:18;;;15818:34;;;;23459:11:10;;;;;;:24;;15614:19:486;;23459:87:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23568:14:10;;-1:-1:-1;23560:23:10;;-1:-1:-1;;23560:23:10;;23553:30;19181:4407;-1:-1:-1;;;;;;19181:4407:10:o;13996:2971::-;14146:11;;:58;;-1:-1:-1;;;14146:58:10;;14069:7;;;;;;14146:11;;;-1:-1:-1;;;;;14146:11:10;;:23;;:58;;14178:4;;14185:6;;14193:10;;14146:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14128:76;-1:-1:-1;14214:12:10;;14210:133;;14244:88;14255:27;14284:38;14324:7;14244:10;:88::i;:::-;14334:1;14236:100;;;;;;;14210:133;14442:12;14420:18;;:34;14416:129;;14472:62;14477:22;14501:32;14472:4;:62::i;14416:129::-;14551:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14551:25:10;41519:4;-1:-1:-1;;;;;14611:39:10;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14583:25;;;:69;15550:32;15563:6;15571:10;15550:12;:32::i;:::-;15526:21;;;:56;;;15890:44;;;;;;;;15906:25;;;;15890:44;;15831:109;;15526:56;15831:22;:109::i;:::-;15812:15;;;15797:143;;;15798:12;;;15797:143;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;15970:18:10;;-1:-1:-1;15954:4:10;:12;;;:34;;;;;;;;:::i;:::-;;15946:79;;;;-1:-1:-1;;;15946:79:10;;16065:2:486;15946:79:10;;;16047:21:486;;;16084:18;;;16077:30;16143:34;16123:18;;;16116:62;16195:18;;15946:79:10;15863:356:486;15946:79:10;16057:1;16039:4;:15;;;:19;16031:58;;;;-1:-1:-1;;;16031:58:10;;16426:2:486;16031:58:10;;;16408:21:486;16465:2;16445:18;;;16438:30;16504:28;16484:18;;;16477:56;16550:18;;16031:58:10;16224:350:486;16031:58:10;16360:4;:15;;;16346:11;;:29;;;;:::i;:::-;16324:19;;;:51;16430:15;;;;-1:-1:-1;;;;;16406:21:10;;;;;;:13;:21;;;;;;:39;;16430:15;16406:39;:::i;:::-;16382:21;;;:63;;;16527:19;;;;16513:11;:33;-1:-1:-1;;;;;16552:21:10;;;;;;:13;:21;;;;;;;;;:45;;;;16675:21;;;;16698:15;;;;;16662:52;;12673:51:486;;;12740:18;;;12733:34;;;;12783:18;;;12776:34;;;;16662:52:10;;12646:18:486;16662:52:10;;;;;;;16749:6;-1:-1:-1;;;;;16725:48:10;16742:4;-1:-1:-1;;;;;16725:48:10;-1:-1:-1;;;;;;;;;;;16757:4:10;:15;;;16725:48;;;;1452:25:486;;1440:2;1425:18;;1306:177;16725:48:10;;;;;;;;16815:11;;16861:21;;;;16884:15;;;;16815:85;;-1:-1:-1;;;16815:85:10;;16846:4;16815:85;;;15680:34:486;-1:-1:-1;;;;;15750:15:486;;;15730:18;;;15723:43;15782:18;;;15775:34;;;;15825:18;;;15818:34;;;;16815:11:10;;;;;;:22;;15614:19:486;;16815:85:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16923:14:10;;-1:-1:-1;16915:23:10;;-1:-1:-1;;16915:23:10;;16940:4;:21;;;16907:55;;;;;;13996:2971;;;;;;:::o;8016:262:20:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;11807:25:486;;;11863:2;11848:18;;11841:34;;;;11891:18;;11884:34;;;11795:2;11780:18;8140:49:20;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1280:213:13:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:13;;-1:-1:-1;1480:1:13;1443:39;;4229:119:22;4291:7;450:4;4313:19;4318:1;4321;:10;;;4313:4;:19::i;:::-;:30;;;;:::i;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1567:263:13:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:13;-1:-1:-1;1730:30:13;;1710:116;1789:26;1817:1;1781:38;;;;;;;24486:2981:10;24635:11;;:64;;-1:-1:-1;;;24635:64:10;;24565:7;;;;24635:11;;;;-1:-1:-1;;;;;24635:11:10;;:25;;:64;;24669:4;;24676:8;;24686:12;;24635:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24617:82;-1:-1:-1;24709:12:10;;24705:130;;24738:90;24749:27;24778:40;24820:7;24738:10;:90::i;:::-;24731:97;;;;;24705:130;24934:12;24912:18;;:34;24908:126;;24963:64;24968:22;24992:34;24963:4;:64::i;24908:126::-;25111:17;25131;:15;:17::i;:::-;25111:37;;25171:12;25159:9;:24;25155:126;;;25200:74;25205:29;25236:37;25200:4;:74::i;:::-;25193:81;;;;;;25155:126;25287:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:27:10;41519:4;25555:50;;-1:-1:-1;;;25555:50:10;;-1:-1:-1;;;;;2925:32:486;;;25555:50:10;;;2907:51:486;25555:40:10;;;;;;;2880:18:486;;25555:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25533:19;;;:72;;;25653:42;;25682:12;25653:7;:42::i;:::-;25627:22;;;25612:83;;;25613:4;25612:83;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;25721:18:10;;-1:-1:-1;25705:12:10;;:34;;;;;;;;:::i;:::-;;25701:227;;25764:157;25786:16;25814:64;25898:4;:12;;;25890:21;;;;;;;;:::i;25764:157::-;25749:172;;;;;;;25701:227;25997:11;;26043:22;;;;;25997:69;;-1:-1:-1;;;25997:69:10;;26036:4;25997:69;;;8634:51:486;8701:18;;;8694:34;;;;25997:11:10;;;;-1:-1:-1;;;;;25997:11:10;;:30;;8607:18:486;;25997:69:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25987:79;-1:-1:-1;26076:12:10;;26072:130;;26105:90;26116:27;26145:40;26187:7;26105:10;:90::i;26072:130::-;26247:35;26255:12;;26269;26247:7;:35::i;:::-;26223:20;;;26208:74;;;26209:4;26208:74;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;26308:18:10;;-1:-1:-1;26292:12:10;;:34;;;;;;;;:::i;:::-;;26288:178;;26351:108;26362:16;26380:55;26445:4;:12;;;26437:21;;;;;;;;:::i;26288:178::-;26679:22;;;;;-1:-1:-1;;;;;26642:24:10;;;;;;:14;:24;;;;;;:59;;;26748:11;;26707:38;;;;:52;26780:20;;;;26765:12;:35;27136:37;26657:8;27160:12;27136:13;:37::i;:::-;27249:22;;;;;27273:20;;;;;27218:76;;-1:-1:-1;;;;;17409:32:486;;17391:51;;17473:2;17458:18;;17451:34;;;17501:18;;;17494:34;;;;17544:18;;17537:34;27218:76:10;;17378:3:486;17363:19;27218:76:10;;;;;;;27447:14;27432:30;24486:2981;-1:-1:-1;;;;;;24486:2981:10:o;33827:3389::-;34062:11;;:138;;-1:-1:-1;;;34062:138:10;;34112:4;34062:138;;;12226:34:486;-1:-1:-1;;;;;12296:15:486;;;12276:18;;;12269:43;12348:15;;;12328:18;;;12321:43;12400:15;;;12380:18;;;12373:43;12432:19;;;12425:35;;;33980:7:10;;;;;;34062:11;;;;;;;;:34;;12160:19:486;;34062:138:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34044:156;-1:-1:-1;34210:12:10;;34206:138;;34240:93;34251:27;34280:43;34325:7;34240:10;:93::i;:::-;34335:1;34232:105;;;;;;;34206:138;34443:12;34421:18;;:34;34417:134;;34473:67;34478:22;34502:37;34473:4;:67::i;34417:134::-;34694:12;34652:16;-1:-1:-1;;;;;34645:43:10;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;34641:172;;34724:78;34729:22;34753:48;34724:4;:78::i;34641:172::-;34875:10;-1:-1:-1;;;;;34863:22:10;:8;-1:-1:-1;;;;;34863:22:10;;34859:133;;;34903:78;34908:26;34936:44;34903:4;:78::i;34859:133::-;35036:16;35032:135;;35070:86;35075:36;35113:42;35070:4;:86::i;35032:135::-;-1:-1:-1;;35212:11:10;:32;35208:155;;;35262:90;35267:36;35305:46;35262:4;:90::i;35208:155::-;35406:24;35432:25;35461:51;35478:10;35490:8;35500:11;35461:16;:51::i;:::-;35405:107;;-1:-1:-1;35405:107:10;-1:-1:-1;35522:43:10;;35518:154;;35583:78;35594:16;35588:23;;;;;;;;:::i;:::-;35613:47;35583:4;:78::i;:::-;35663:1;35575:90;;;;;;;;;35518:154;35908:11;;:117;;-1:-1:-1;;;35908:117:10;;35859:24;;;;35908:11;;;;-1:-1:-1;;;;;35908:11:10;;:41;;:117;;35965:4;;35978:16;;36002:17;;35908:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35858:167;;-1:-1:-1;35858:167:10;-1:-1:-1;36039:43:10;;36031:107;;;;-1:-1:-1;;;36031:107:10;;18034:2:486;36031:107:10;;;18016:21:486;18073:2;18053:18;;;18046:30;18112:34;18092:18;;;18085:62;-1:-1:-1;;;18163:18:486;;;18156:49;18222:19;;36031:107:10;17832:415:486;36031:107:10;36221:45;;-1:-1:-1;;;36221:45:10;;-1:-1:-1;;;;;2925:32:486;;;36221:45:10;;;2907:51:486;36270:11:10;;36221:35;;;;;;2880:18:486;;36221:45:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;36213:97;;;;-1:-1:-1;;;36213:97:10;;18454:2:486;36213:97:10;;;18436:21:486;18493:2;18473:18;;;18466:30;18532:26;18512:18;;;18505:54;18576:18;;36213:97:10;18252:348:486;36213:97:10;36428:18;-1:-1:-1;;;;;36456:33:10;;36484:4;36456:33;36452:229;;;36512:63;36534:4;36541:10;36553:8;36563:11;36512:13;:63::i;:::-;36499:76;;36452:229;;;36609:65;;-1:-1:-1;;;36609:65:10;;-1:-1:-1;;;;;36609:30:10;;;;;:65;;36640:10;;36652:8;;36662:11;;36609:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36596:78;;36452:229;36776:37;;36768:56;;;;-1:-1:-1;;;36768:56:10;;18807:2:486;36768:56:10;;;18789:21:486;18846:1;18826:18;;;18819:29;-1:-1:-1;;;18864:18:486;;;18857:36;18910:18;;36768:56:10;18605:329:486;36768:56:10;36878:87;;;-1:-1:-1;;;;;19254:15:486;;;19236:34;;19306:15;;;19301:2;19286:18;;19279:43;19338:18;;;19331:34;;;19401:15;;19396:2;19381:18;;19374:43;19448:3;19433:19;;19426:35;;;36878:87:10;;;;;;;19185:3:486;36878:87:10;;;37176:14;37160:51;-1:-1:-1;37193:17:10;;-1:-1:-1;;;;;;33827:3389:10;;;;;;;;:::o;43409:679::-;43529:12;43550;43564:23;43591:6;-1:-1:-1;;;;;43591:11:10;43603:4;43591:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43549:59;;;;43620:7;43615:445;;43701:17;;:21;43697:357;;43925:10;43919:17;43975:15;43962:10;43958:2;43954:19;43947:44;43697:357;44032:12;44025:20;;-1:-1:-1;;;44025:20:10;;;;;;;;:::i;2379:288:21:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:21;-1:-1:-1;2560:18:21;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:21;-1:-1:-1;2601:1:21;;-1:-1:-1;2588:15:21;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;18422:139:10:-;18487:11;18525:1;18513:8;:1;18517:4;18513:8;:::i;:::-;18512:14;;;;:::i;:::-;18506:20;-1:-1:-1;18536:5:10;18540:1;18536;:5;:::i;:::-;:10;18532:24;;18548:8;18555:1;18548:8;;:::i;3834:312:21:-;3925:9;3936:7;3952:13;3967:19;3990:31;4005:6;4013:7;3990:14;:31::i;4796:123:22:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:22;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:22:o;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:21:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:21;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:21;-1:-1:-1;2136:18:21;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:21;;;;;;;;;-1:-1:-1;2178:20:21;;2172:4;;-1:-1:-1;2178:20:21;-1:-1:-1;2164:35:21;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:21;;-1:-1:-1;1947:332:21;-1:-1:-1;;;;1947:332:21:o;3151:585::-;3234:9;3245:10;-1:-1:-1;;;;;;;;;;;;;;3245:10:21;3534:14;3550:17;3571:25;450:4:22;3589:6:21;3571:7;:25::i;:::-;3533:63;;-1:-1:-1;3533:63:21;-1:-1:-1;3614:18:21;3606:4;:26;;;;;;;;:::i;:::-;;3602:82;;-1:-1:-1;3656:20:21;;;;;;;;;-1:-1:-1;3656:20:21;;3650:4;;-1:-1:-1;3656:20:21;-1:-1:-1;3642:35:21;;3602:82;3696:35;3703:9;3714:7;:16;;;3696:6;:35::i;4923:243:22:-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:22;;5045:16;5041:45;;;-1:-1:-1;5078:1:22;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:22;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:22;;;;;;;;:::i;544:330:13:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:13;;-1:-1:-1;660:18:13;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:13;-1:-1:-1;833:30:13;;799:479:21;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:21;896:14;912:23;939:22;947:3;450:4:22;939:7:21;:22::i;:::-;895:66;;-1:-1:-1;895:66:21;-1:-1:-1;979:18:21;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:21;;;;;;;;;-1:-1:-1;1021:20:21;;1015:4;;-1:-1:-1;1021:20:21;-1:-1:-1;1007:35:21;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:21;-1:-1:-1;1141:18:21;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:21;;-1:-1:-1;799:479:21;-1:-1:-1;;;;;;799:479:21:o;958:198:13:-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:13;;-1:-1:-1;1102:1:13;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;14:131:486:-;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:486:o;470:258::-;542:1;552:113;566:6;563:1;560:13;552:113;;;642:11;;;636:18;623:11;;;616:39;588:2;581:10;552:113;;;683:6;680:1;677:13;674:48;;;-1:-1:-1;;718:1:486;700:16;;693:27;470:258::o;733:383::-;882:2;871:9;864:21;845:4;914:6;908:13;957:6;952:2;941:9;937:18;930:34;973:66;1032:6;1027:2;1016:9;1012:18;1007:2;999:6;995:15;973:66;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:486;1060:45;;;;1107:2;1056:54;;733:383;-1:-1:-1;;733:383:486:o;1121:180::-;1180:6;1233:2;1221:9;1212:7;1208:23;1204:32;1201:52;;;1249:1;1246;1239:12;1201:52;-1:-1:-1;1272:23:486;;1121:180;-1:-1:-1;1121:180:486:o;1677:127::-;1738:10;1733:3;1729:20;1726:1;1719:31;1769:4;1766:1;1759:15;1793:4;1790:1;1783:15;1809:921;1877:6;1930:2;1918:9;1909:7;1905:23;1901:32;1898:52;;;1946:1;1943;1936:12;1898:52;1986:9;1973:23;2015:18;2056:2;2048:6;2045:14;2042:34;;;2072:1;2069;2062:12;2042:34;2110:6;2099:9;2095:22;2085:32;;2155:7;2148:4;2144:2;2140:13;2136:27;2126:55;;2177:1;2174;2167:12;2126:55;2213:2;2200:16;2235:2;2231;2228:10;2225:36;;;2241:18;;:::i;:::-;2316:2;2310:9;2284:2;2370:13;;-1:-1:-1;;2366:22:486;;;2390:2;2362:31;2358:40;2346:53;;;2414:18;;;2434:22;;;2411:46;2408:72;;;2460:18;;:::i;:::-;2500:10;2496:2;2489:22;2535:2;2527:6;2520:18;2575:7;2570:2;2565;2561;2557:11;2553:20;2550:33;2547:53;;;2596:1;2593;2586:12;2547:53;2652:2;2647;2643;2639:11;2634:2;2626:6;2622:15;2609:46;2697:1;2675:15;;;2692:2;2671:24;2664:35;;;;-1:-1:-1;2679:6:486;1809:921;-1:-1:-1;;;;;1809:921:486:o;3177:388::-;3245:6;3253;3306:2;3294:9;3285:7;3281:23;3277:32;3274:52;;;3322:1;3319;3312:12;3274:52;3361:9;3348:23;3380:31;3405:5;3380:31;:::i;:::-;3430:5;-1:-1:-1;3487:2:486;3472:18;;3459:32;3500:33;3459:32;3500:33;:::i;:::-;3552:7;3542:17;;;3177:388;;;;;:::o;3570:657::-;3739:2;3791:21;;;3861:13;;3764:18;;;3883:22;;;3710:4;;3739:2;3962:15;;;;3936:2;3921:18;;;3710:4;4005:196;4019:6;4016:1;4013:13;4005:196;;;4084:13;;-1:-1:-1;;;;;;4080:40:486;4068:53;;4176:15;;;;4141:12;;;;4041:1;4034:9;4005:196;;;-1:-1:-1;4218:3:486;;3570:657;-1:-1:-1;;;;;;3570:657:486:o;4232:456::-;4309:6;4317;4325;4378:2;4366:9;4357:7;4353:23;4349:32;4346:52;;;4394:1;4391;4384:12;4346:52;4433:9;4420:23;4452:31;4477:5;4452:31;:::i;:::-;4502:5;-1:-1:-1;4559:2:486;4544:18;;4531:32;4572:33;4531:32;4572:33;:::i;:::-;4232:456;;4624:7;;-1:-1:-1;;;4678:2:486;4663:18;;;;4650:32;;4232:456::o;5152:::-;5229:6;5237;5245;5298:2;5286:9;5277:7;5273:23;5269:32;5266:52;;;5314:1;5311;5304:12;5266:52;5353:9;5340:23;5372:31;5397:5;5372:31;:::i;:::-;5422:5;-1:-1:-1;5474:2:486;5459:18;;5446:32;;-1:-1:-1;5530:2:486;5515:18;;5502:32;5543:33;5502:32;5543:33;:::i;:::-;5595:7;5585:17;;;5152:456;;;;;:::o;5946:380::-;6025:1;6021:12;;;;6068;;;6089:61;;6143:4;6135:6;6131:17;6121:27;;6089:61;6196:2;6188:6;6185:14;6165:18;6162:38;6159:161;;;6242:10;6237:3;6233:20;6230:1;6223:31;6277:4;6274:1;6267:15;6305:4;6302:1;6295:15;6331:481;-1:-1:-1;;;;;6616:15:486;;;6598:34;;6668:15;;;6663:2;6648:18;;6641:43;6720:15;;6715:2;6700:18;;6693:43;-1:-1:-1;;;;;;6772:33:486;;;6767:2;6752:18;;6745:61;6547:3;6532:19;;6331:481::o;6817:277::-;6884:6;6937:2;6925:9;6916:7;6912:23;6908:32;6905:52;;;6953:1;6950;6943:12;6905:52;6985:9;6979:16;7038:5;7031:13;7024:21;7017:5;7014:32;7004:60;;7060:1;7057;7050:12;7099:338;7301:2;7283:21;;;7340:2;7320:18;;;7313:30;-1:-1:-1;;;7374:2:486;7359:18;;7352:44;7428:2;7413:18;;7099:338::o;8739:127::-;8800:10;8795:3;8791:20;8788:1;8781:31;8831:4;8828:1;8821:15;8855:4;8852:1;8845:15;8871:128;8911:3;8942:1;8938:6;8935:1;8932:13;8929:39;;;8948:18;;:::i;:::-;-1:-1:-1;8984:9:486;;8871:128::o;9004:127::-;9065:10;9060:3;9056:20;9053:1;9046:31;9096:4;9093:1;9086:15;9120:4;9117:1;9110:15;9136:135;9175:3;-1:-1:-1;;9196:17:486;;9193:43;;;9216:18;;:::i;:::-;-1:-1:-1;9263:1:486;9252:13;;9136:135::o;9276:178::-;9313:3;9357:4;9350:5;9346:16;9381:7;9371:41;;9392:18;;:::i;:::-;-1:-1:-1;;9428:20:486;;9276:178;-1:-1:-1;;9276:178:486:o;9816:184::-;9886:6;9939:2;9927:9;9918:7;9914:23;9910:32;9907:52;;;9955:1;9952;9945:12;9907:52;-1:-1:-1;9978:16:486;;9816:184;-1:-1:-1;9816:184:486:o;10005:125::-;10045:4;10073:1;10070;10067:8;10064:34;;;10078:18;;:::i;:::-;-1:-1:-1;10115:9:486;;10005:125::o;10135:251::-;10205:6;10258:2;10246:9;10237:7;10233:23;10229:32;10226:52;;;10274:1;10271;10264:12;10226:52;10306:9;10300:16;10325:31;10350:5;10325:31;:::i;10391:127::-;10452:10;10447:3;10443:20;10440:1;10433:31;10483:4;10480:1;10473:15;10507:4;10504:1;10497:15;10523:375;-1:-1:-1;;;;;10781:15:486;;;10763:34;;10833:15;;;;10828:2;10813:18;;10806:43;10880:2;10865:18;;10858:34;;;;10713:2;10698:18;;10523:375::o;16903:127::-;16964:10;16959:3;16955:20;16952:1;16945:31;16995:4;16992:1;16985:15;17019:4;17016:1;17009:15;17035:120;17075:1;17101;17091:35;;17106:18;;:::i;:::-;-1:-1:-1;17140:9:486;;17035:120::o;17582:245::-;17661:6;17669;17722:2;17710:9;17701:7;17697:23;17693:32;17690:52;;;17738:1;17735;17728:12;17690:52;-1:-1:-1;;17761:16:486;;17817:2;17802:18;;;17796:25;17761:16;;17796:25;;-1:-1:-1;17582:245:486:o;19472:274::-;19601:3;19639:6;19633:13;19655:53;19701:6;19696:3;19689:4;19681:6;19677:17;19655:53;:::i;:::-;19724:16;;;;;19472:274;-1:-1:-1;;19472:274:486:o;19751:168::-;19791:7;19857:1;19853;19849:6;19845:14;19842:1;19839:21;19834:1;19827:9;19820:17;19816:45;19813:71;;;19864:18;;:::i;:::-;-1:-1:-1;19904:9:486;;19751:168::o;19924:112::-;19956:1;19982;19972:35;;19987:18;;:::i;:::-;-1:-1:-1;20021:9:486;;19924:112::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_becomeImplementation(bytes)": "56e67728", + "_getExtensionFunctions()": "89f8132e", + "_withdrawAdminFees(uint256)": "a7b820df", + "_withdrawIonicFees(uint256)": "b0d58e49", + "accrualBlockNumber()": "6c540baf", + "adminFeeMantissa()": "8d02d9a1", + "approve(address,address)": "7e5465ba", + "borrow(uint256)": "c5ebeaec", + "borrowIndex()": "aa5af0fd", + "claim()": "4e71d92d", + "comptroller()": "5fe3b567", + "contractType()": "cb2ef6f7", + "decimals()": "313ce567", + "delegateType()": "2c436e5b", + "feeSeizeShareMantissa()": "be99f119", + "getCash()": "3b1d21a2", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "liquidateBorrow(address,uint256,address)": "f5e3c462", + "mint(uint256)": "a0712d68", + "name()": "06fdde03", + "protocolSeizeShareMantissa()": "6752e702", + "redeem(uint256)": "db006a75", + "redeemUnderlying(uint256)": "852a12e3", + "repayBorrow(uint256)": "0e752702", + "repayBorrowBehalf(address,uint256)": "2608f818", + "reserveFactorMantissa()": "173b9904", + "seize(address,address,uint256)": "b2a02ff1", + "selfTransferIn(address,uint256)": "135f1334", + "selfTransferOut(address,uint256)": "067db1b3", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/CTokenFirstExtension.json b/packages/sdk/deployments/mode/CTokenFirstExtension.json new file mode 100644 index 0000000000..9cf2ff4b15 --- /dev/null +++ b/packages/sdk/deployments/mode/CTokenFirstExtension.json @@ -0,0 +1,2444 @@ +{ + "address": "0x8C58ECb9C0050824177f4e1Cd71C335421d4aeA2", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256" + } + ], + "name": "AccrueInterest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Flash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256" + } + ], + "name": "NewIonicFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "NewMarketInterestRateModel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "NewReserveFactor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256" + } + ], + "name": "_setAdminFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "name": "_setInterestRateModel", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "_setNameAndSymbol", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "name": "_setReserveFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accrueInterest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOfUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "borrowBalanceCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "borrowRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "borrowRatePerBlockAfterBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeRateCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "flash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAccountSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalUnderlyingSupplied", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "supplyRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "supplyRatePerBlockAfterDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "name": "supplyRatePerBlockAfterWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalBorrowsCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xe7a16dbeacf1a154ff19fe48ec66a2ca11d5d9b40fc65d783bf81a3804024b04", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x8C58ECb9C0050824177f4e1Cd71C335421d4aeA2", + "transactionIndex": 1, + "gasUsed": "3308626", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xdc1cace843be0bd7e86eb8bfb38224fcd1f2c986704c78b496570c915fe54ea8", + "transactionHash": "0xe7a16dbeacf1a154ff19fe48ec66a2ca11d5d9b40fc65d783bf81a3804024b04", + "logs": [], + "blockNumber": 2067099, + "cumulativeGasUsed": "3355539", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Flash", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setAdminFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setInterestRateModel", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setNameAndSymbol" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setReserveFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "accrueInterest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balanceOfUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowBalanceCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowRatePerBlockAfterBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "exchangeRateCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "flash" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAccountSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getTotalUnderlyingSupplied", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "supplyRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supplyRatePerBlockAfterDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supplyRatePerBlockAfterWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrowsCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "_setAdminFee(uint256)": { + "details": "Admin function to accrue interest and set a new admin fee", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_setInterestRateModel(address)": { + "details": "Admin function to accrue interest and update the interest rate model", + "params": { + "newInterestRateModel": "the new interest rate model to use" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_setNameAndSymbol(string,string)": { + "details": "Admin function to update the cToken ERC20 name and symbol", + "params": { + "_name": "the new ERC20 token name to use", + "_symbol": "the new ERC20 token symbol to use" + } + }, + "_setReserveFactor(uint256)": { + "details": "Admin function to accrue interest and set a new reserve factor", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "accrueInterest()": { + "details": "This calculates interest accrued from the last checkpointed block up to the current block and writes new checkpoint to storage." + }, + "allowance(address,address)": { + "params": { + "owner": "The address of the account which owns the tokens to be spent", + "spender": "The address of the account which may transfer tokens" + }, + "returns": { + "_0": "The number of tokens allowed to be spent (-1 means infinite)" + } + }, + "approve(address,uint256)": { + "details": "This will overwrite the approval amount for `spender` and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)", + "params": { + "amount": "The number of tokens that are approved (-1 means infinite)", + "spender": "The address of the account which may transfer tokens" + }, + "returns": { + "_0": "Whether or not the approval succeeded" + } + }, + "balanceOf(address)": { + "params": { + "owner": "The address of the account to query" + }, + "returns": { + "_0": "The number of tokens owned by `owner`" + } + }, + "balanceOfUnderlying(address)": { + "params": { + "owner": "The address of the account to query" + }, + "returns": { + "_0": "The amount of underlying owned by `owner`" + } + }, + "borrowBalanceCurrent(address)": { + "params": { + "account": "The address whose balance should be calculated after recalculating the borrowIndex" + }, + "returns": { + "_0": "The calculated balance" + } + }, + "borrowRatePerBlock()": { + "returns": { + "_0": "The borrow interest rate per block, scaled by 1e18" + } + }, + "exchangeRateCurrent()": { + "returns": { + "_0": "Calculated exchange rate scaled by 1e18" + } + }, + "getAccountSnapshot(address)": { + "details": "This is used by comptroller to more efficiently perform liquidity checks.", + "params": { + "account": "Address of the account to snapshot" + }, + "returns": { + "_0": "(possible error, token balance, borrow balance, exchange rate mantissa)" + } + }, + "supplyRatePerBlock()": { + "returns": { + "_0": "The supply interest rate per block, scaled by 1e18" + } + }, + "totalBorrowsCurrent()": { + "returns": { + "_0": "The total borrows with interest" + } + }, + "transfer(address,uint256)": { + "params": { + "amount": "The number of tokens to transfer", + "dst": "The address of the destination account" + }, + "returns": { + "_0": "Whether or not the transfer succeeded" + } + }, + "transferFrom(address,address,uint256)": { + "params": { + "amount": "The number of tokens to transfer", + "dst": "The address of the destination account", + "src": "The address of the source account" + }, + "returns": { + "_0": "Whether or not the transfer succeeded" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_setAdminFee(uint256)": { + "notice": "accrues interest and sets a new admin fee for the protocol using _setAdminFeeFresh" + }, + "_setInterestRateModel(address)": { + "notice": "accrues interest and updates the interest rate model using _setInterestRateModelFresh" + }, + "_setNameAndSymbol(string,string)": { + "notice": "updates the cToken ERC20 name and symbol" + }, + "_setReserveFactor(uint256)": { + "notice": "accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "accrueInterest()": { + "notice": "Applies accrued interest to total borrows and reserves" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "allowance(address,address)": { + "notice": "Get the current allowance from `owner` for `spender`" + }, + "approve(address,uint256)": { + "notice": "Approve `spender` to transfer up to `amount` from `src`" + }, + "balanceOf(address)": { + "notice": "Get the token balance of the `owner`" + }, + "balanceOfUnderlying(address)": { + "notice": "Get the underlying balance of the `owner`" + }, + "borrowBalanceCurrent(address)": { + "notice": "calculate the borrowIndex and the account's borrow balance using the fresh borrowIndex" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "borrowRatePerBlock()": { + "notice": "Returns the current per-block borrow interest rate for this cToken" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "exchangeRateCurrent()": { + "notice": "Accrue interest then return the up-to-date exchange rate" + }, + "getAccountSnapshot(address)": { + "notice": "Get a snapshot of the account's balances, and the cached exchange rate" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "supplyRatePerBlock()": { + "notice": "Returns the current per-block supply interest rate for this cToken" + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalBorrowsCurrent()": { + "notice": "Returns the current total borrows plus accrued interest" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "transfer(address,uint256)": { + "notice": "Transfer `amount` tokens from `msg.sender` to `dst`" + }, + "transferFrom(address,address,uint256)": { + "notice": "Transfer `amount` tokens from `src` to `dst`" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CTokenFirstExtension.sol": "CTokenFirstExtension" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenFirstExtension.sol": { + "keccak256": "0x1c8c216d0fb0fdf4bc5265ffe0d40a7c2bdb39d8450c930f381ff8e77376b521", + "urls": [ + "bzz-raw://e0e2c95cb081dcde0f10b9833fe8e458dfdb04fdd89aaa19c342aeeaa44d3b48", + "dweb:/ipfs/Qmdu71CKjq5ZmFE84rx5SxGzYXTRwBKAF7aqqCyRWdHakB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/IFlashLoanReceiver.sol": { + "keccak256": "0x3db1dbf3e47975f60cccc859740aa84665d9fd683079c7329285008502c454da", + "urls": [ + "bzz-raw://89727af88e6d376eced9a6ea97c3da80d6c801198f133d9d6b887894f7b8ab00", + "dweb:/ipfs/QmVS7Thpbkt3RGi4UsKev94BJdLstHiGHrGk1mPXadSqS2" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/utils/IMulticall.sol": { + "keccak256": "0x06d957a2af0a31212eea7fcaa5fe0f4e180bcddd9bc8e593fb6345339b2b2038", + "urls": [ + "bzz-raw://03fb492b53458b9d1091df7f554a20d9c061bc7a48f348b8d6bee77498c500ae", + "dweb:/ipfs/QmeFHKWQzDaM3fXnyigSYhDSqBs9HegCKKbPNa1WaHzpc5" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/utils/Multicall.sol": { + "keccak256": "0x019e3414dae3e29d4e210311bf82d94e34756b3b015ab352e7bb59a6380b8e9b", + "urls": [ + "bzz-raw://eaa54432b781393d0c31045498a6747d35952559dc92e6d724802fd3c088bdc8", + "dweb:/ipfs/QmXu5fSUgKoGv4t2Xe8P1ohVdM9qH3iuy1kMr7AJZUDMxG" + ], + "license": "GPL-2.0-or-later" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { + "keccak256": "0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b", + "urls": [ + "bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34", + "dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": { + "keccak256": "0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329", + "urls": [ + "bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95", + "dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": { + "keccak256": "0x8f211a9dd6bc7e4bc6c98a062d4729b821b7ff391a888215a48872b205117749", + "urls": [ + "bzz-raw://2c537063217d09afbe820ec9fd448835862209cc54b4f8ef3e8e33a1b3e25b71", + "dweb:/ipfs/QmeBegWuZR66Xbqzczhuoh9N11zBkyftXxYHNys3xHkC7P" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50613ae6806100206000396000f3fe60806040526004361061025c5760003560e01c80638d02d9a111610144578063bd6d894d116100b6578063cfcd4c071161007a578063cfcd4c07146106de578063dd62ed3e146106fe578063f2b3abbd14610744578063f3fdb15a14610764578063f8f9da2814610784578063fca7820b1461079957600080fd5b8063bd6d894d14610637578063be99f1191461064c578063c37f68e214610668578063c3bf11cd146106a8578063c91a424f146106be57600080fd5b8063a6afed9511610108578063a6afed9514610597578063a9059cbb146105ac578063aa5af0fd146105cc578063ac9650d8146105e2578063ae9d70b014610602578063b1e23dbb1461061757600080fd5b80638d02d9a1146105205780638f840ddd1461053657806391dd36c61461054c57806395d89b411461056c5780639826394b1461058157600080fd5b80633c3b4b89116101dd5780636752e702116101a15780636752e702146104625780636c540baf1461047d5780636f307dc31461049357806370a08231146104b357806373acee98146104e957806389f8132e146104fe57600080fd5b80633c3b4b89146103c457806347bd3718146103e45780634aeb3d9a146103fa5780635fe3b5671461040f57806361feacff1461044c57600080fd5b806323b872dd1161022457806323b872dd14610316578063313ce5671461033657806334154d4c1461036257806335daea64146103845780633af9e669146103a457600080fd5b806306fdde0314610261578063095ea7b31461028c578063173b9904146102bc57806317bfdfbc146102e057806318160ddd14610300575b600080fd5b34801561026d57600080fd5b506102766107b9565b604051610283919061348d565b60405180910390f35b34801561029857600080fd5b506102ac6102a73660046134b5565b610847565b6040519015158152602001610283565b3480156102c857600080fd5b506102d260085481565b604051908152602001610283565b3480156102ec57600080fd5b506102d26102fb3660046134e1565b61095e565b34801561030c57600080fd5b506102d2600f5481565b34801561032257600080fd5b506102ac6103313660046134fe565b610b0e565b34801561034257600080fd5b506003546103509060ff1681565b60405160ff9091168152602001610283565b34801561036e57600080fd5b5061038261037d366004613581565b610be3565b005b34801561039057600080fd5b506102d261039f3660046135ed565b610c40565b3480156103b057600080fd5b506102d26103bf3660046134e1565b610dc2565b3480156103d057600080fd5b506103826103df366004613606565b610e5d565b3480156103f057600080fd5b506102d2600b5481565b34801561040657600080fd5b506102d26110be565b34801561041b57600080fd5b506003546104349061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561045857600080fd5b506102d2600d5481565b34801561046e57600080fd5b506102d2666379da05b6000081565b34801561048957600080fd5b506102d260095481565b34801561049f57600080fd5b50601354610434906001600160a01b031681565b3480156104bf57600080fd5b506102d26104ce3660046134e1565b6001600160a01b031660009081526010602052604090205490565b3480156104f557600080fd5b506102d261115b565b34801561050a57600080fd5b506105136111eb565b6040516102839190613652565b34801561052c57600080fd5b506102d260065481565b34801561054257600080fd5b506102d2600c5481565b34801561055857600080fd5b506102d26105673660046135ed565b611843565b34801561057857600080fd5b50610276611a00565b34801561058d57600080fd5b506102d2600e5481565b3480156105a357600080fd5b506102d2611a0d565b3480156105b857600080fd5b506102ac6105c73660046134b5565b611b20565b3480156105d857600080fd5b506102d2600a5481565b6105f56105f03660046136a0565b611bf4565b6040516102839190613715565b34801561060e57600080fd5b506102d2611c00565b34801561062357600080fd5b506102d26106323660046135ed565b611d26565b34801561064357600080fd5b506102d2611e56565b34801561065857600080fd5b506102d267016345785d8a000081565b34801561067457600080fd5b506106886106833660046134e1565b611f84565b604080519485526020850193909352918301526060820152608001610283565b3480156106b457600080fd5b506102d260075481565b3480156106ca57600080fd5b50600054610434906001600160a01b031681565b3480156106ea57600080fd5b506102d26106f93660046135ed565b611fca565b34801561070a57600080fd5b506102d2610719366004613777565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561075057600080fd5b506102d261075f3660046134e1565b6120f1565b34801561077057600080fd5b50600454610434906001600160a01b031681565b34801561079057600080fd5b506102d2612230565b3480156107a557600080fd5b506102d26107b43660046135ed565b6122f7565b600180546107c6906137b0565b80601f01602080910402602001604051908101604052809291908181526020018280546107f2906137b0565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926108949261010090910490911690339030906001600160e01b0319883516906004016137e5565b602060405180830381865afa1580156108b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d59190613818565b6108fa5760405162461bcd60e51b81526004016108f19061383a565b60405180910390fd5b3360008181526011602090815260408083206001600160a01b038816808552908352928190208690555185815283917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000804360095414156109745750600a546109ef565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d89190613862565b905060006109e643836123ad565b60200151925050505b6001600160a01b0383166000908152601260205260408120805482918291610a1e575060009695505050505050565b8054610a2a9086612642565b90945092506000846003811115610a4357610a4361387b565b14610a905760405162461bcd60e51b815260206004820152601e60248201527f216d756c55496e74206f766572666c6f7720636865636b206661696c6564000060448201526064016108f1565b610a9e838260010154612684565b90945091506000846003811115610ab757610ab761387b565b14610b045760405162461bcd60e51b815260206004820152601e60248201527f2164697655496e74206f766572666c6f7720636865636b206661696c6564000060448201526064016108f1565b5095945050505050565b600080610b1a816126af565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610b6493610100900416913391309190356001600160e01b031916906004016137e5565b602060405180830381865afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba59190613818565b610bc15760405162461bcd60e51b81526004016108f19061383a565b6000610bcf33878787612773565b149150610bdb81612a2a565b509392505050565b610beb612aa9565b610c205760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016108f1565b610c2c60018585613398565b50610c3960028383613398565b5050505050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca59190613862565b905082811015610cf05760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b60448201526064016108f1565b6004546001600160a01b031663b8168816610d0b85846138a7565b600b54600e54600d54600c54610d2191906138be565b610d2b91906138be565b600654600754600854610d3e91906138be565b610d4891906138be565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb9190613862565b9392505050565b6000806040518060200160405280610dd8611e56565b90526001600160a01b038416600090815260106020526040812054919250908190610e04908490612c20565b90925090506000826003811115610e1d57610e1d61387b565b14610e555760405162461bcd60e51b81526020600482015260086024820152672162616c616e636560c01b60448201526064016108f1565b949350505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610ea793610100900416913391309190356001600160e01b031916906004016137e5565b602060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190613818565b610f045760405162461bcd60e51b81526004016108f19061383a565b610f0c611a0d565b5082600b6000828254610f1f91906138be565b9091555030905060405163067db1b360e01b8152336004820152602481018590526001600160a01b03919091169063067db1b390604401600060405180830381600087803b158015610f7057600080fd5b505af1158015610f84573d6000803e3d6000fd5b505060135460405163012b1f4560e71b815233935063958fa2809250610fbc916001600160a01b0316908790879087906004016138d6565b600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b50505050610ff53090565b6040516304d7c4cd60e21b8152336004820152602481018590526001600160a01b03919091169063135f1334906044016020604051808303816000875af1158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190613862565b5082600b600082825461107b91906138a7565b909155505060408051338152602081018590527fe756d016d0e956882a6de9c72a2fe06d7d488ecbe6d76628713077ea7930cff8910160405180910390a1505050565b6000600d54600e54600c546110d391906138be565b6110dd91906138be565b600b54306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111429190613862565b61114c91906138be565b61115691906138a7565b905090565b600043600954141561116e5750600b5490565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d29190613862565b905060006111e043836123ad565b606001519392505050565b60408051601780825261030082019092526060919060009082602082016102e08036833701905050905063a9059cbb60e01b8161122784613934565b93508360ff168151811061123d5761123d613951565b6001600160e01b0319909216602092830291909101909101526323b872dd60e01b8161126884613934565b93508360ff168151811061127e5761127e613951565b6001600160e01b031990921660209283029190910190910152636eb1769f60e11b816112a984613934565b93508360ff16815181106112bf576112bf613951565b6001600160e01b03199092166020928302919091019091015263095ea7b360e01b816112ea84613934565b93508360ff168151811061130057611300613951565b6001600160e01b0319909216602092830291909101909101526370a0823160e01b8161132b84613934565b93508360ff168151811061134157611341613951565b6001600160e01b0319909216602092830291909101909101526348ee9b6360e11b8161136c84613934565b93508360ff168151811061138257611382613951565b6001600160e01b03199092166020928302919091019091015263f2b3abbd60e01b816113ad84613934565b93508360ff16815181106113c3576113c3613951565b6001600160e01b031990921660209283029190910190910152630d05535360e21b816113ee84613934565b93508360ff168151811061140457611404613951565b6001600160e01b03199092166020928302919091019091015263fca7820b60e01b8161142f84613934565b93508360ff168151811061144557611445613951565b6001600160e01b031990921660209283029190910190910152630ae9d70b60e41b8161147084613934565b93508360ff168151811061148657611486613951565b6001600160e01b031990921660209283029190910190910152631f1f3b4560e31b816114b184613934565b93508360ff16815181106114c7576114c7613951565b6001600160e01b03199092166020928302919091019091015263bd6d894d60e01b816114f284613934565b93508360ff168151811061150857611508613951565b6001600160e01b03199092166020928302919091019091015263a6afed9560e01b8161153384613934565b93508360ff168151811061154957611549613951565b6001600160e01b031990921660209283029190910190910152630e759dd360e31b8161157484613934565b93508360ff168151811061158a5761158a613951565b6001600160e01b031990921660209283029190910190910152633af9e66960e01b816115b584613934565b93508360ff16815181106115cb576115cb613951565b6001600160e01b031990921660209283029190910190910152631592ca1b60e31b816115f684613934565b93508360ff168151811061160c5761160c613951565b6001600160e01b03199092166020928302919091019091015263b1e23dbb60e01b8161163784613934565b93508360ff168151811061164d5761164d613951565b6001600160e01b031990921660209283029190910190910152630d76ba9960e21b8161167884613934565b93508360ff168151811061168e5761168e613951565b6001600160e01b03199092166020928302919091019091015263cfcd4c0760e01b816116b984613934565b93508360ff16815181106116cf576116cf613951565b6001600160e01b0319909216602092830291909101909101526325759ecd60e11b816116fa84613934565b93508360ff168151811061171057611710613951565b6001600160e01b031990921660209283029190910190910152633c3b4b8960e01b8161173b84613934565b93508360ff168151811061175157611751613951565b6001600160e01b0319909216602092830291909101909101526361bfb47160e11b8161177c84613934565b93508360ff168151811061179257611792613951565b6001600160e01b0319909216602092830291909101909101526305eff7ef60e21b816117bd84613934565b93508360ff16815181106117d3576117d3613951565b6001600160e01b03199092166020928302919091019091015260ff82161561183d5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016108f1565b92915050565b60008061184f816126af565b611857611a0d565b5043600954146118745761186d600a6052612c72565b91506119f1565b6000198314156118845760065492505b60008060009054906101000a90046001600160a01b03166001600160a01b031663dd86fea16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190613862565b9050670de0b6b3a7640000818560085461191691906138be565b61192091906138be565b111561193a5761193260026053612c72565b9250506119f1565b836006541461199e5761194b612aa9565b61195b5761193260016051612c72565b600680549085905560408051828152602081018790527fcdd0b588250e1398549f79cfdb8217c186688822905d6715b0834ea1c865594a910160405180910390a1505b80600754146119ea57600780549082905560408051828152602081018490527fedec4b9c99c2cdb231e7fd036f861e0445b015916700f41b9835f984cb9be4cb910160405180910390a1505b60005b9250505b6119fa81612a2a565b50919050565b600280546107c6906137b0565b6009546000904390811415611a255760005b91505090565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a899190613862565b90506000611a9783836123ad565b6009849055602081810151600a819055606080840151600b819055608080860151600c5560a0860151600e5560c0860151600d5560e0860151604080518a815296870191909152850193909352908301529192507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04910160405180910390a16000935050505090565b600080611b2c816126af565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893611b7693610100900416913391309190356001600160e01b031916906004016137e5565b602060405180830381865afa158015611b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb79190613818565b611bd35760405162461bcd60e51b81526004016108f19061383a565b6000611be133338787612773565b149150611bed81612a2a565b5092915050565b6060610dbb8383612ceb565b6004546000906001600160a01b031663b8168816306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c769190613862565b600b54600e54600d54600c54611c8c91906138be565b611c9691906138be565b600654600754600854611ca991906138be565b611cb391906138be565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611d02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111569190613862565b6004546000906001600160a01b031663b816881683306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d9190613862565b611da791906138be565b600b54600e54600d54600c54611dbd91906138be565b611dc791906138be565b600654600754600854611dda91906138be565b611de491906138be565b6040516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865afa158015611e32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183d9190613862565b6000600954431415611ee457611156600f54600554611e723090565b6001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed39190613862565b600b54600c54600d54600e54612e3c565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f489190613862565b90506000611f5643836123ad565b9050611f7d816040015160055484846060015185608001518660c001518760a00151612e3c565b9250505090565b6001600160a01b0381166000908152601060205260408120548190819081908180611fae8861095e565b9150611fb8611e56565b90506000989297509095509350915050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561200b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202f9190613862565b90508281101561207a5760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b60448201526064016108f1565b6004546001600160a01b03166315f2405361209585846138a7565b85600b546120a391906138be565b600e54600d54600c546120b691906138be565b6120c091906138be565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401610d7a565b6000806120fd816126af565b612105611a0d565b5061210e612aa9565b61211e5761186d6001604d612c72565b43600954146121335761186d600a604c612c72565b826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121959190613818565b6121cb5760405162461bcd60e51b8152602060048201526007602482015266216e6f7449726d60c81b60448201526064016108f1565b600480546001600160a01b038581166001600160a01b031983168117909355604080519190921680825260208201939093527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92691015b60405180910390a160006119ed565b6004546000906001600160a01b03166315f24053306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a69190613862565b600b54600e54600d54600c546122bc91906138be565b6122c691906138be565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401611ce5565b600080612303816126af565b61230b611a0d565b50612314612aa9565b6123245761186d60016058612c72565b43600954146123395761186d600a6059612c72565b670de0b6b3a76400006007546006548561235391906138be565b61235d91906138be565b111561236f5761186d6002605a612c72565b600880549084905560408051828152602081018690527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101612221565b6123f560405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000600e54600d5461240791906138be565b600454600b54600c549293506000926001600160a01b03909216916315f240539187916124359087906138be565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401602060405180830381865afa15801561247e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a29190613862565b905065048c273950008111156124f957818411156124f05760405162461bcd60e51b815260206004820152600b60248201526a21626f72726f775261746560a81b60448201526064016108f1565b5065048c273950005b60008061250887600954612f7b565b909250905060008260038111156125215761252161387b565b1461255c5760405162461bcd60e51b815260206004820152600b60248201526a21626c6f636b44656c746160a81b60448201526064016108f1565b868552600f546040808701919091528051602081019091528381526000906125849083612fa6565b905061259281600b54612fd7565b60e08701819052600b546125a5916138be565b60608701526040805160208101909152600854815260e0870151600c546125cd929190612fef565b60808701526040805160208101909152600754815260e0870151600e546125f5929190612fef565b60a08701526040805160208101909152600654815260e0870151600d5461261d929190612fef565b60c0870152600a5461263190829080612fef565b602087015250939695505050505050565b600080836126555750600090508061267d565b838302836126638683613967565b146126765760026000925092505061267d565b6000925090505b9250929050565b60008082612698575060019050600061267d565b60006126a48486613967565b915091509250929050565b600054600160a01b900460ff166126f55760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016108f1565b8061276357600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561274a57600080fd5b505af115801561275e573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b6003546040516317b9b84b60e31b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283926101009091049091169063bdcdc258906084016020604051808303816000875af11580156127df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128039190613862565b90508015612820576128186003605b83613019565b915050610e55565b836001600160a01b0316856001600160a01b03161415612846576128186002605c612c72565b6000856001600160a01b0316876001600160a01b0316141561286b5750600019612893565b506001600160a01b038086166000908152601160209081526040808320938a16835292905220545b6000806000806128a38589612f7b565b909450925060008460038111156128bc576128bc61387b565b146128da576128cd6009605c612c72565b9650505050505050610e55565b6001600160a01b038a166000908152601060205260409020546128fd9089612f7b565b909450915060008460038111156129165761291661387b565b14612927576128cd6009605d612c72565b6001600160a01b03891660009081526010602052604090205461294a90896130bb565b909450905060008460038111156129635761296361387b565b14612974576128cd6009605e612c72565b6001600160a01b03808b16600090815260106020526040808220859055918b1681522081905560001985146129cc576001600160a01b03808b166000908152601160209081526040808320938f168352929052208390555b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051612a1191815260200190565b60405180910390a35060009a9950505050505050505050565b6000805460ff60a01b1916600160a01b17905580612aa657600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a9257600080fd5b505af1158015610c39573d6000803e3d6000fd5b50565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b269190613989565b6001600160a01b0316336001600160a01b0316148015612ba35750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba39190613818565b80611a1f57506000546001600160a01b031633148015611a1f5750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1f9190613818565b600080600080612c3086866130e1565b90925090506000826003811115612c4957612c4961387b565b14612c5a575091506000905061267d565b6000612c658261315d565b9350935050509250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115612ca757612ca761387b565b836061811115612cb957612cb961387b565b60408051928352602083019190915260009082015260600160405180910390a1826011811115610dbb57610dbb61387b565b60608167ffffffffffffffff811115612d0657612d0661391e565b604051908082528060200260200182016040528015612d3957816020015b6060815260200190600190039081612d245790505b50905060005b82811015611bed5760008030868685818110612d5d57612d5d613951565b9050602002810190612d6f91906139a6565b604051612d7d9291906139ed565b600060405180830381855af49150503d8060008114612db8576040519150601f19603f3d011682016040523d82523d6000602084013e612dbd565b606091505b509150915081612e0957604481511015612dd657600080fd5b60048101905080806020019051810190612df091906139fd565b60405162461bcd60e51b81526004016108f1919061348d565b80848481518110612e1c57612e1c613951565b602002602001018190525050508080612e3490613a9f565b915050612d3f565b600087612e4a575085612f70565b6000612e626040518060200160405280600081525090565b6000612e83898987612e748a8c6138be565b612e7e91906138be565b613175565b935090506000816003811115612e9b57612e9b61387b565b14612ef65760405162461bcd60e51b815260206004820152602560248201527f216164645468656e53756255496e74206f766572666c6f7720636865636b2066604482015264185a5b195960da1b60648201526084016108f1565b612f00838c6131c8565b925090506000816003811115612f1857612f1861387b565b14612f655760405162461bcd60e51b815260206004820152601d60248201527f21676574457870206f766572666c6f7720636865636b206661696c656400000060448201526064016108f1565b50519150612f709050565b979650505050505050565b600080838311612f9a576000612f9184866138a7565b9150915061267d565b5060039050600061267d565b6040805160208101909152600081526040518060200160405280612fce856000015185613293565b90529392505050565b600080612fe48484612fa6565b9050610e558161315d565b600080612ffc8585612fa6565b905061301061300a8261315d565b846132d5565b95945050505050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561304e5761304e61387b565b8460618111156130605761306061387b565b604080519283526020830191909152810184905260600160405180910390a160038460118111156130935761309361387b565b146130af578360118111156130aa576130aa61387b565b610e55565b610e55826103e86138be565b6000808383018481106130d35760009250905061267d565b60026000925092505061267d565b60006130f96040518060200160405280600081525090565b60008061310a866000015186612642565b909250905060008260038111156131235761312361387b565b146131425750604080516020810190915260008152909250905061267d565b60408051602081019091529081526000969095509350505050565b805160009061183d90670de0b6b3a764000090613967565b60008060008061318587876130bb565b9092509050600082600381111561319e5761319e61387b565b146131af57509150600090506131c0565b6131b98186612f7b565b9350935050505b935093915050565b60006131e06040518060200160405280600081525090565b6000806131f586670de0b6b3a7640000612642565b9092509050600082600381111561320e5761320e61387b565b1461322d5750604080516020810190915260008152909250905061267d565b60008061323a8388612684565b909250905060008260038111156132535761325361387b565b14613276578160405180602001604052806000815250955095505050505061267d565b604080516020810190915290815260009890975095505050505050565b6000610dbb83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061330b565b6000610dbb8383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b815250613367565b6000831580613318575082155b1561332557506000610dbb565b60006133318486613aba565b90508361333e8683613967565b14839061335e5760405162461bcd60e51b81526004016108f1919061348d565b50949350505050565b60008061337484866138be565b9050828582101561335e5760405162461bcd60e51b81526004016108f1919061348d565b8280546133a4906137b0565b90600052602060002090601f0160209004810192826133c6576000855561340c565b82601f106133df5782800160ff1982351617855561340c565b8280016001018555821561340c579182015b8281111561340c5782358255916020019190600101906133f1565b5061341892915061341c565b5090565b5b80821115613418576000815560010161341d565b60005b8381101561344c578181015183820152602001613434565b8381111561345b576000848401525b50505050565b60008151808452613479816020860160208601613431565b601f01601f19169290920160200192915050565b602081526000610dbb6020830184613461565b6001600160a01b0381168114612aa657600080fd5b600080604083850312156134c857600080fd5b82356134d3816134a0565b946020939093013593505050565b6000602082840312156134f357600080fd5b8135610dbb816134a0565b60008060006060848603121561351357600080fd5b833561351e816134a0565b9250602084013561352e816134a0565b929592945050506040919091013590565b60008083601f84011261355157600080fd5b50813567ffffffffffffffff81111561356957600080fd5b60208301915083602082850101111561267d57600080fd5b6000806000806040858703121561359757600080fd5b843567ffffffffffffffff808211156135af57600080fd5b6135bb8883890161353f565b909650945060208701359150808211156135d457600080fd5b506135e18782880161353f565b95989497509550505050565b6000602082840312156135ff57600080fd5b5035919050565b60008060006040848603121561361b57600080fd5b83359250602084013567ffffffffffffffff81111561363957600080fd5b6136458682870161353f565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156136945783516001600160e01b0319168352928401929184019160010161366e565b50909695505050505050565b600080602083850312156136b357600080fd5b823567ffffffffffffffff808211156136cb57600080fd5b818501915085601f8301126136df57600080fd5b8135818111156136ee57600080fd5b8660208260051b850101111561370357600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561376a57603f19888603018452613758858351613461565b9450928501929085019060010161373c565b5092979650505050505050565b6000806040838503121561378a57600080fd5b8235613795816134a0565b915060208301356137a5816134a0565b809150509250929050565b600181811c908216806137c457607f821691505b602082108114156119fa57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561382a57600080fd5b81518015158114610dbb57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60006020828403121561387457600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156138b9576138b9613891565b500390565b600082198211156138d1576138d1613891565b500190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b600060ff82168061394757613947613891565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b60008261398457634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561399b57600080fd5b8151610dbb816134a0565b6000808335601e198436030181126139bd57600080fd5b83018035915067ffffffffffffffff8211156139d857600080fd5b60200191503681900382131561267d57600080fd5b8183823760009101908152919050565b600060208284031215613a0f57600080fd5b815167ffffffffffffffff80821115613a2757600080fd5b818401915084601f830112613a3b57600080fd5b815181811115613a4d57613a4d61391e565b604051601f8201601f19908116603f01168101908382118183101715613a7557613a7561391e565b81604052828152876020848701011115613a8e57600080fd5b612f70836020830160208801613431565b6000600019821415613ab357613ab3613891565b5060010190565b6000816000190483118215151615613ad457613ad4613891565b50029056fea164736f6c634300080a000a", + "sourceMap": "679:25278:11:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361061025c5760003560e01c80638d02d9a111610144578063bd6d894d116100b6578063cfcd4c071161007a578063cfcd4c07146106de578063dd62ed3e146106fe578063f2b3abbd14610744578063f3fdb15a14610764578063f8f9da2814610784578063fca7820b1461079957600080fd5b8063bd6d894d14610637578063be99f1191461064c578063c37f68e214610668578063c3bf11cd146106a8578063c91a424f146106be57600080fd5b8063a6afed9511610108578063a6afed9514610597578063a9059cbb146105ac578063aa5af0fd146105cc578063ac9650d8146105e2578063ae9d70b014610602578063b1e23dbb1461061757600080fd5b80638d02d9a1146105205780638f840ddd1461053657806391dd36c61461054c57806395d89b411461056c5780639826394b1461058157600080fd5b80633c3b4b89116101dd5780636752e702116101a15780636752e702146104625780636c540baf1461047d5780636f307dc31461049357806370a08231146104b357806373acee98146104e957806389f8132e146104fe57600080fd5b80633c3b4b89146103c457806347bd3718146103e45780634aeb3d9a146103fa5780635fe3b5671461040f57806361feacff1461044c57600080fd5b806323b872dd1161022457806323b872dd14610316578063313ce5671461033657806334154d4c1461036257806335daea64146103845780633af9e669146103a457600080fd5b806306fdde0314610261578063095ea7b31461028c578063173b9904146102bc57806317bfdfbc146102e057806318160ddd14610300575b600080fd5b34801561026d57600080fd5b506102766107b9565b604051610283919061348d565b60405180910390f35b34801561029857600080fd5b506102ac6102a73660046134b5565b610847565b6040519015158152602001610283565b3480156102c857600080fd5b506102d260085481565b604051908152602001610283565b3480156102ec57600080fd5b506102d26102fb3660046134e1565b61095e565b34801561030c57600080fd5b506102d2600f5481565b34801561032257600080fd5b506102ac6103313660046134fe565b610b0e565b34801561034257600080fd5b506003546103509060ff1681565b60405160ff9091168152602001610283565b34801561036e57600080fd5b5061038261037d366004613581565b610be3565b005b34801561039057600080fd5b506102d261039f3660046135ed565b610c40565b3480156103b057600080fd5b506102d26103bf3660046134e1565b610dc2565b3480156103d057600080fd5b506103826103df366004613606565b610e5d565b3480156103f057600080fd5b506102d2600b5481565b34801561040657600080fd5b506102d26110be565b34801561041b57600080fd5b506003546104349061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561045857600080fd5b506102d2600d5481565b34801561046e57600080fd5b506102d2666379da05b6000081565b34801561048957600080fd5b506102d260095481565b34801561049f57600080fd5b50601354610434906001600160a01b031681565b3480156104bf57600080fd5b506102d26104ce3660046134e1565b6001600160a01b031660009081526010602052604090205490565b3480156104f557600080fd5b506102d261115b565b34801561050a57600080fd5b506105136111eb565b6040516102839190613652565b34801561052c57600080fd5b506102d260065481565b34801561054257600080fd5b506102d2600c5481565b34801561055857600080fd5b506102d26105673660046135ed565b611843565b34801561057857600080fd5b50610276611a00565b34801561058d57600080fd5b506102d2600e5481565b3480156105a357600080fd5b506102d2611a0d565b3480156105b857600080fd5b506102ac6105c73660046134b5565b611b20565b3480156105d857600080fd5b506102d2600a5481565b6105f56105f03660046136a0565b611bf4565b6040516102839190613715565b34801561060e57600080fd5b506102d2611c00565b34801561062357600080fd5b506102d26106323660046135ed565b611d26565b34801561064357600080fd5b506102d2611e56565b34801561065857600080fd5b506102d267016345785d8a000081565b34801561067457600080fd5b506106886106833660046134e1565b611f84565b604080519485526020850193909352918301526060820152608001610283565b3480156106b457600080fd5b506102d260075481565b3480156106ca57600080fd5b50600054610434906001600160a01b031681565b3480156106ea57600080fd5b506102d26106f93660046135ed565b611fca565b34801561070a57600080fd5b506102d2610719366004613777565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561075057600080fd5b506102d261075f3660046134e1565b6120f1565b34801561077057600080fd5b50600454610434906001600160a01b031681565b34801561079057600080fd5b506102d2612230565b3480156107a557600080fd5b506102d26107b43660046135ed565b6122f7565b600180546107c6906137b0565b80601f01602080910402602001604051908101604052809291908181526020018280546107f2906137b0565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926108949261010090910490911690339030906001600160e01b0319883516906004016137e5565b602060405180830381865afa1580156108b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d59190613818565b6108fa5760405162461bcd60e51b81526004016108f19061383a565b60405180910390fd5b3360008181526011602090815260408083206001600160a01b038816808552908352928190208690555185815283917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000804360095414156109745750600a546109ef565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d89190613862565b905060006109e643836123ad565b60200151925050505b6001600160a01b0383166000908152601260205260408120805482918291610a1e575060009695505050505050565b8054610a2a9086612642565b90945092506000846003811115610a4357610a4361387b565b14610a905760405162461bcd60e51b815260206004820152601e60248201527f216d756c55496e74206f766572666c6f7720636865636b206661696c6564000060448201526064016108f1565b610a9e838260010154612684565b90945091506000846003811115610ab757610ab761387b565b14610b045760405162461bcd60e51b815260206004820152601e60248201527f2164697655496e74206f766572666c6f7720636865636b206661696c6564000060448201526064016108f1565b5095945050505050565b600080610b1a816126af565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610b6493610100900416913391309190356001600160e01b031916906004016137e5565b602060405180830381865afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba59190613818565b610bc15760405162461bcd60e51b81526004016108f19061383a565b6000610bcf33878787612773565b149150610bdb81612a2a565b509392505050565b610beb612aa9565b610c205760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016108f1565b610c2c60018585613398565b50610c3960028383613398565b5050505050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca59190613862565b905082811015610cf05760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b60448201526064016108f1565b6004546001600160a01b031663b8168816610d0b85846138a7565b600b54600e54600d54600c54610d2191906138be565b610d2b91906138be565b600654600754600854610d3e91906138be565b610d4891906138be565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb9190613862565b9392505050565b6000806040518060200160405280610dd8611e56565b90526001600160a01b038416600090815260106020526040812054919250908190610e04908490612c20565b90925090506000826003811115610e1d57610e1d61387b565b14610e555760405162461bcd60e51b81526020600482015260086024820152672162616c616e636560c01b60448201526064016108f1565b949350505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610ea793610100900416913391309190356001600160e01b031916906004016137e5565b602060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190613818565b610f045760405162461bcd60e51b81526004016108f19061383a565b610f0c611a0d565b5082600b6000828254610f1f91906138be565b9091555030905060405163067db1b360e01b8152336004820152602481018590526001600160a01b03919091169063067db1b390604401600060405180830381600087803b158015610f7057600080fd5b505af1158015610f84573d6000803e3d6000fd5b505060135460405163012b1f4560e71b815233935063958fa2809250610fbc916001600160a01b0316908790879087906004016138d6565b600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b50505050610ff53090565b6040516304d7c4cd60e21b8152336004820152602481018590526001600160a01b03919091169063135f1334906044016020604051808303816000875af1158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190613862565b5082600b600082825461107b91906138a7565b909155505060408051338152602081018590527fe756d016d0e956882a6de9c72a2fe06d7d488ecbe6d76628713077ea7930cff8910160405180910390a1505050565b6000600d54600e54600c546110d391906138be565b6110dd91906138be565b600b54306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111429190613862565b61114c91906138be565b61115691906138a7565b905090565b600043600954141561116e5750600b5490565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d29190613862565b905060006111e043836123ad565b606001519392505050565b60408051601780825261030082019092526060919060009082602082016102e08036833701905050905063a9059cbb60e01b8161122784613934565b93508360ff168151811061123d5761123d613951565b6001600160e01b0319909216602092830291909101909101526323b872dd60e01b8161126884613934565b93508360ff168151811061127e5761127e613951565b6001600160e01b031990921660209283029190910190910152636eb1769f60e11b816112a984613934565b93508360ff16815181106112bf576112bf613951565b6001600160e01b03199092166020928302919091019091015263095ea7b360e01b816112ea84613934565b93508360ff168151811061130057611300613951565b6001600160e01b0319909216602092830291909101909101526370a0823160e01b8161132b84613934565b93508360ff168151811061134157611341613951565b6001600160e01b0319909216602092830291909101909101526348ee9b6360e11b8161136c84613934565b93508360ff168151811061138257611382613951565b6001600160e01b03199092166020928302919091019091015263f2b3abbd60e01b816113ad84613934565b93508360ff16815181106113c3576113c3613951565b6001600160e01b031990921660209283029190910190910152630d05535360e21b816113ee84613934565b93508360ff168151811061140457611404613951565b6001600160e01b03199092166020928302919091019091015263fca7820b60e01b8161142f84613934565b93508360ff168151811061144557611445613951565b6001600160e01b031990921660209283029190910190910152630ae9d70b60e41b8161147084613934565b93508360ff168151811061148657611486613951565b6001600160e01b031990921660209283029190910190910152631f1f3b4560e31b816114b184613934565b93508360ff16815181106114c7576114c7613951565b6001600160e01b03199092166020928302919091019091015263bd6d894d60e01b816114f284613934565b93508360ff168151811061150857611508613951565b6001600160e01b03199092166020928302919091019091015263a6afed9560e01b8161153384613934565b93508360ff168151811061154957611549613951565b6001600160e01b031990921660209283029190910190910152630e759dd360e31b8161157484613934565b93508360ff168151811061158a5761158a613951565b6001600160e01b031990921660209283029190910190910152633af9e66960e01b816115b584613934565b93508360ff16815181106115cb576115cb613951565b6001600160e01b031990921660209283029190910190910152631592ca1b60e31b816115f684613934565b93508360ff168151811061160c5761160c613951565b6001600160e01b03199092166020928302919091019091015263b1e23dbb60e01b8161163784613934565b93508360ff168151811061164d5761164d613951565b6001600160e01b031990921660209283029190910190910152630d76ba9960e21b8161167884613934565b93508360ff168151811061168e5761168e613951565b6001600160e01b03199092166020928302919091019091015263cfcd4c0760e01b816116b984613934565b93508360ff16815181106116cf576116cf613951565b6001600160e01b0319909216602092830291909101909101526325759ecd60e11b816116fa84613934565b93508360ff168151811061171057611710613951565b6001600160e01b031990921660209283029190910190910152633c3b4b8960e01b8161173b84613934565b93508360ff168151811061175157611751613951565b6001600160e01b0319909216602092830291909101909101526361bfb47160e11b8161177c84613934565b93508360ff168151811061179257611792613951565b6001600160e01b0319909216602092830291909101909101526305eff7ef60e21b816117bd84613934565b93508360ff16815181106117d3576117d3613951565b6001600160e01b03199092166020928302919091019091015260ff82161561183d5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016108f1565b92915050565b60008061184f816126af565b611857611a0d565b5043600954146118745761186d600a6052612c72565b91506119f1565b6000198314156118845760065492505b60008060009054906101000a90046001600160a01b03166001600160a01b031663dd86fea16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190613862565b9050670de0b6b3a7640000818560085461191691906138be565b61192091906138be565b111561193a5761193260026053612c72565b9250506119f1565b836006541461199e5761194b612aa9565b61195b5761193260016051612c72565b600680549085905560408051828152602081018790527fcdd0b588250e1398549f79cfdb8217c186688822905d6715b0834ea1c865594a910160405180910390a1505b80600754146119ea57600780549082905560408051828152602081018490527fedec4b9c99c2cdb231e7fd036f861e0445b015916700f41b9835f984cb9be4cb910160405180910390a1505b60005b9250505b6119fa81612a2a565b50919050565b600280546107c6906137b0565b6009546000904390811415611a255760005b91505090565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a899190613862565b90506000611a9783836123ad565b6009849055602081810151600a819055606080840151600b819055608080860151600c5560a0860151600e5560c0860151600d5560e0860151604080518a815296870191909152850193909352908301529192507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04910160405180910390a16000935050505090565b600080611b2c816126af565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893611b7693610100900416913391309190356001600160e01b031916906004016137e5565b602060405180830381865afa158015611b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb79190613818565b611bd35760405162461bcd60e51b81526004016108f19061383a565b6000611be133338787612773565b149150611bed81612a2a565b5092915050565b6060610dbb8383612ceb565b6004546000906001600160a01b031663b8168816306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c769190613862565b600b54600e54600d54600c54611c8c91906138be565b611c9691906138be565b600654600754600854611ca991906138be565b611cb391906138be565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611d02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111569190613862565b6004546000906001600160a01b031663b816881683306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d9190613862565b611da791906138be565b600b54600e54600d54600c54611dbd91906138be565b611dc791906138be565b600654600754600854611dda91906138be565b611de491906138be565b6040516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865afa158015611e32573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183d9190613862565b6000600954431415611ee457611156600f54600554611e723090565b6001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed39190613862565b600b54600c54600d54600e54612e3c565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f489190613862565b90506000611f5643836123ad565b9050611f7d816040015160055484846060015185608001518660c001518760a00151612e3c565b9250505090565b6001600160a01b0381166000908152601060205260408120548190819081908180611fae8861095e565b9150611fb8611e56565b90506000989297509095509350915050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561200b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202f9190613862565b90508281101561207a5760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b60448201526064016108f1565b6004546001600160a01b03166315f2405361209585846138a7565b85600b546120a391906138be565b600e54600d54600c546120b691906138be565b6120c091906138be565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401610d7a565b6000806120fd816126af565b612105611a0d565b5061210e612aa9565b61211e5761186d6001604d612c72565b43600954146121335761186d600a604c612c72565b826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121959190613818565b6121cb5760405162461bcd60e51b8152602060048201526007602482015266216e6f7449726d60c81b60448201526064016108f1565b600480546001600160a01b038581166001600160a01b031983168117909355604080519190921680825260208201939093527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92691015b60405180910390a160006119ed565b6004546000906001600160a01b03166315f24053306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a69190613862565b600b54600e54600d54600c546122bc91906138be565b6122c691906138be565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401611ce5565b600080612303816126af565b61230b611a0d565b50612314612aa9565b6123245761186d60016058612c72565b43600954146123395761186d600a6059612c72565b670de0b6b3a76400006007546006548561235391906138be565b61235d91906138be565b111561236f5761186d6002605a612c72565b600880549084905560408051828152602081018690527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101612221565b6123f560405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000600e54600d5461240791906138be565b600454600b54600c549293506000926001600160a01b03909216916315f240539187916124359087906138be565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401602060405180830381865afa15801561247e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a29190613862565b905065048c273950008111156124f957818411156124f05760405162461bcd60e51b815260206004820152600b60248201526a21626f72726f775261746560a81b60448201526064016108f1565b5065048c273950005b60008061250887600954612f7b565b909250905060008260038111156125215761252161387b565b1461255c5760405162461bcd60e51b815260206004820152600b60248201526a21626c6f636b44656c746160a81b60448201526064016108f1565b868552600f546040808701919091528051602081019091528381526000906125849083612fa6565b905061259281600b54612fd7565b60e08701819052600b546125a5916138be565b60608701526040805160208101909152600854815260e0870151600c546125cd929190612fef565b60808701526040805160208101909152600754815260e0870151600e546125f5929190612fef565b60a08701526040805160208101909152600654815260e0870151600d5461261d929190612fef565b60c0870152600a5461263190829080612fef565b602087015250939695505050505050565b600080836126555750600090508061267d565b838302836126638683613967565b146126765760026000925092505061267d565b6000925090505b9250929050565b60008082612698575060019050600061267d565b60006126a48486613967565b915091509250929050565b600054600160a01b900460ff166126f55760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016108f1565b8061276357600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561274a57600080fd5b505af115801561275e573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b6003546040516317b9b84b60e31b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283926101009091049091169063bdcdc258906084016020604051808303816000875af11580156127df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128039190613862565b90508015612820576128186003605b83613019565b915050610e55565b836001600160a01b0316856001600160a01b03161415612846576128186002605c612c72565b6000856001600160a01b0316876001600160a01b0316141561286b5750600019612893565b506001600160a01b038086166000908152601160209081526040808320938a16835292905220545b6000806000806128a38589612f7b565b909450925060008460038111156128bc576128bc61387b565b146128da576128cd6009605c612c72565b9650505050505050610e55565b6001600160a01b038a166000908152601060205260409020546128fd9089612f7b565b909450915060008460038111156129165761291661387b565b14612927576128cd6009605d612c72565b6001600160a01b03891660009081526010602052604090205461294a90896130bb565b909450905060008460038111156129635761296361387b565b14612974576128cd6009605e612c72565b6001600160a01b03808b16600090815260106020526040808220859055918b1681522081905560001985146129cc576001600160a01b03808b166000908152601160209081526040808320938f168352929052208390555b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051612a1191815260200190565b60405180910390a35060009a9950505050505050505050565b6000805460ff60a01b1916600160a01b17905580612aa657600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a9257600080fd5b505af1158015610c39573d6000803e3d6000fd5b50565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b269190613989565b6001600160a01b0316336001600160a01b0316148015612ba35750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba39190613818565b80611a1f57506000546001600160a01b031633148015611a1f5750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1f9190613818565b600080600080612c3086866130e1565b90925090506000826003811115612c4957612c4961387b565b14612c5a575091506000905061267d565b6000612c658261315d565b9350935050509250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115612ca757612ca761387b565b836061811115612cb957612cb961387b565b60408051928352602083019190915260009082015260600160405180910390a1826011811115610dbb57610dbb61387b565b60608167ffffffffffffffff811115612d0657612d0661391e565b604051908082528060200260200182016040528015612d3957816020015b6060815260200190600190039081612d245790505b50905060005b82811015611bed5760008030868685818110612d5d57612d5d613951565b9050602002810190612d6f91906139a6565b604051612d7d9291906139ed565b600060405180830381855af49150503d8060008114612db8576040519150601f19603f3d011682016040523d82523d6000602084013e612dbd565b606091505b509150915081612e0957604481511015612dd657600080fd5b60048101905080806020019051810190612df091906139fd565b60405162461bcd60e51b81526004016108f1919061348d565b80848481518110612e1c57612e1c613951565b602002602001018190525050508080612e3490613a9f565b915050612d3f565b600087612e4a575085612f70565b6000612e626040518060200160405280600081525090565b6000612e83898987612e748a8c6138be565b612e7e91906138be565b613175565b935090506000816003811115612e9b57612e9b61387b565b14612ef65760405162461bcd60e51b815260206004820152602560248201527f216164645468656e53756255496e74206f766572666c6f7720636865636b2066604482015264185a5b195960da1b60648201526084016108f1565b612f00838c6131c8565b925090506000816003811115612f1857612f1861387b565b14612f655760405162461bcd60e51b815260206004820152601d60248201527f21676574457870206f766572666c6f7720636865636b206661696c656400000060448201526064016108f1565b50519150612f709050565b979650505050505050565b600080838311612f9a576000612f9184866138a7565b9150915061267d565b5060039050600061267d565b6040805160208101909152600081526040518060200160405280612fce856000015185613293565b90529392505050565b600080612fe48484612fa6565b9050610e558161315d565b600080612ffc8585612fa6565b905061301061300a8261315d565b846132d5565b95945050505050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561304e5761304e61387b565b8460618111156130605761306061387b565b604080519283526020830191909152810184905260600160405180910390a160038460118111156130935761309361387b565b146130af578360118111156130aa576130aa61387b565b610e55565b610e55826103e86138be565b6000808383018481106130d35760009250905061267d565b60026000925092505061267d565b60006130f96040518060200160405280600081525090565b60008061310a866000015186612642565b909250905060008260038111156131235761312361387b565b146131425750604080516020810190915260008152909250905061267d565b60408051602081019091529081526000969095509350505050565b805160009061183d90670de0b6b3a764000090613967565b60008060008061318587876130bb565b9092509050600082600381111561319e5761319e61387b565b146131af57509150600090506131c0565b6131b98186612f7b565b9350935050505b935093915050565b60006131e06040518060200160405280600081525090565b6000806131f586670de0b6b3a7640000612642565b9092509050600082600381111561320e5761320e61387b565b1461322d5750604080516020810190915260008152909250905061267d565b60008061323a8388612684565b909250905060008260038111156132535761325361387b565b14613276578160405180602001604052806000815250955095505050505061267d565b604080516020810190915290815260009890975095505050505050565b6000610dbb83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061330b565b6000610dbb8383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b815250613367565b6000831580613318575082155b1561332557506000610dbb565b60006133318486613aba565b90508361333e8683613967565b14839061335e5760405162461bcd60e51b81526004016108f1919061348d565b50949350505050565b60008061337484866138be565b9050828582101561335e5760405162461bcd60e51b81526004016108f1919061348d565b8280546133a4906137b0565b90600052602060002090601f0160209004810192826133c6576000855561340c565b82601f106133df5782800160ff1982351617855561340c565b8280016001018555821561340c579182015b8281111561340c5782358255916020019190600101906133f1565b5061341892915061341c565b5090565b5b80821115613418576000815560010161341d565b60005b8381101561344c578181015183820152602001613434565b8381111561345b576000848401525b50505050565b60008151808452613479816020860160208601613431565b601f01601f19169290920160200192915050565b602081526000610dbb6020830184613461565b6001600160a01b0381168114612aa657600080fd5b600080604083850312156134c857600080fd5b82356134d3816134a0565b946020939093013593505050565b6000602082840312156134f357600080fd5b8135610dbb816134a0565b60008060006060848603121561351357600080fd5b833561351e816134a0565b9250602084013561352e816134a0565b929592945050506040919091013590565b60008083601f84011261355157600080fd5b50813567ffffffffffffffff81111561356957600080fd5b60208301915083602082850101111561267d57600080fd5b6000806000806040858703121561359757600080fd5b843567ffffffffffffffff808211156135af57600080fd5b6135bb8883890161353f565b909650945060208701359150808211156135d457600080fd5b506135e18782880161353f565b95989497509550505050565b6000602082840312156135ff57600080fd5b5035919050565b60008060006040848603121561361b57600080fd5b83359250602084013567ffffffffffffffff81111561363957600080fd5b6136458682870161353f565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156136945783516001600160e01b0319168352928401929184019160010161366e565b50909695505050505050565b600080602083850312156136b357600080fd5b823567ffffffffffffffff808211156136cb57600080fd5b818501915085601f8301126136df57600080fd5b8135818111156136ee57600080fd5b8660208260051b850101111561370357600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561376a57603f19888603018452613758858351613461565b9450928501929085019060010161373c565b5092979650505050505050565b6000806040838503121561378a57600080fd5b8235613795816134a0565b915060208301356137a5816134a0565b809150509250929050565b600181811c908216806137c457607f821691505b602082108114156119fa57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561382a57600080fd5b81518015158114610dbb57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60006020828403121561387457600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156138b9576138b9613891565b500390565b600082198211156138d1576138d1613891565b500190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b600060ff82168061394757613947613891565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b60008261398457634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561399b57600080fd5b8151610dbb816134a0565b6000808335601e198436030181126139bd57600080fd5b83018035915067ffffffffffffffff8211156139d857600080fd5b60200191503681900382131561267d57600080fd5b8183823760009101908152919050565b600060208284031215613a0f57600080fd5b815167ffffffffffffffff80821115613a2757600080fd5b818401915084601f830112613a3b57600080fd5b815181811115613a4d57613a4d61391e565b604051601f8201601f19908116603f01168101908382118183101715613a7557613a7561391e565b81604052828152876020848701011115613a8e57600080fd5b612f70836020830160208801613431565b6000600019821415613ab357613ab3613891565b5060010190565b6000816000190483118215151615613ad457613ad4613891565b50029056fea164736f6c634300080a000a", + "sourceMap": "679:25278:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;580:18:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7059:234:11;;;;;;;;;;-1:-1:-1;7059:234:11;;;;;:::i;:::-;;:::i;:::-;;;1386:14:486;;1379:22;1361:41;;1349:2;1334:18;7059:234:11;1221:187:486;1783:36:12;;;;;;;;;;;;;;;;;;;1559:25:486;;;1547:2;1532:18;1783:36:12;1413:177:486;22157:1406:11;;;;;;;;;;-1:-1:-1;22157:1406:11;;;;;:::i;:::-;;:::i;2626:26:12:-;;;;;;;;;;;;;;;;6384:233:11;;;;;;;;;;-1:-1:-1;6384:233:11;;;;;:::i;:::-;;:::i;750:21:12:-;;;;;;;;;;-1:-1:-1;750:21:12;;;;;;;;;;;2480:4:486;2468:17;;;2450:36;;2438:2;2423:18;750:21:12;2308:184:486;8296:233:11;;;;;;;;;;-1:-1:-1;8296:233:11;;;;;:::i;:::-;;:::i;:::-;;14439:443;;;;;;;;;;-1:-1:-1;14439:443:11;;;;;:::i;:::-;;:::i;23743:330::-;;;;;;;;;;-1:-1:-1;23743:330:11;;;;;:::i;:::-;;:::i;24077:386::-;;;;;;;;;;-1:-1:-1;24077:386:11;;;;;:::i;:::-;;:::i;2162:27:12:-;;;;;;;;;;;;;;;;2860:268:11;;;;;;;;;;;;;:::i;1148:35:12:-;;;;;;;;;;-1:-1:-1;1148:35:12;;;;;;;-1:-1:-1;;;;;1148:35:12;;;;;;-1:-1:-1;;;;;4434:32:486;;;4416:51;;4404:2;4389:18;1148:35:12;4244:229:486;2405:29:12;;;;;;;;;;;;;;;;3491:59;;;;;;;;;;;;3544:6;3491:59;;1896:33;;;;;;;;;;;;;;;;3740:25;;;;;;;;;;-1:-1:-1;3740:25:12;;;;-1:-1:-1;;;;;3740:25:12;;;7914:111:11;;;;;;;;;;-1:-1:-1;7914:111:11;;;;;:::i;:::-;-1:-1:-1;;;;;8000:20:11;7978:7;8000:20;;;:13;:20;;;;;;;7914:111;20760:345;;;;;;;;;;;;;:::i;997:1859::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1551:31:12:-;;;;;;;;;;;;;;;;2282:28;;;;;;;;;;;;;;;;10049:1658:11;;;;;;;;;;-1:-1:-1;10049:1658:11;;;;;:::i;:::-;;:::i;663:20:12:-;;;;;;;;;;;;;:::i;2529:29::-;;;;;;;;;;;;;;;;19694:936:11;;;;;;;;;;;;;:::i;5895:207::-;;;;;;;;;;-1:-1:-1;5895:207:11;;;;;:::i;:::-;;:::i;2037:26:12:-;;;;;;;;;;;;;;;;25753:202:11;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13775:310::-;;;;;;;;;;;;;:::i;14089:346::-;;;;;;;;;;-1:-1:-1;14089:346:11;;;;;:::i;:::-;;:::i;15021:817::-;;;;;;;;;;;;;:::i;3619:52:12:-;;;;;;;;;;;;3667:4;3619:52;;21429:473:11;;;;;;;;;;-1:-1:-1;21429:473:11;;;;;:::i;:::-;;:::i;:::-;;;;7016:25:486;;;7072:2;7057:18;;7050:34;;;;7100:18;;;7093:34;7158:2;7143:18;;7136:34;7003:3;6988:19;21429:473:11;6785:391:486;1668:31:12;;;;;;;;;;;;;;;;336:33;;;;;;;;;;-1:-1:-1;336:33:12;;;;-1:-1:-1;;;;;336:33:12;;;13195:420:11;;;;;;;;;;-1:-1:-1;13195:420:11;;;;;:::i;:::-;;:::i;7601:142::-;;;;;;;;;;-1:-1:-1;7601:142:11;;;;;:::i;:::-;-1:-1:-1;;;;;7704:25:11;;;7682:7;7704:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;;;;7601:142;12054:736;;;;;;;;;;-1:-1:-1;12054:736:11;;;;;:::i;:::-;;:::i;1272:42:12:-;;;;;;;;;;-1:-1:-1;1272:42:12;;;;-1:-1:-1;;;;;1272:42:12;;;12950:241:11;;;;;;;;;;;;;:::i;8809:975::-;;;;;;;;;;-1:-1:-1;8809:975:11;;;;;:::i;:::-;;:::i;580:18:12:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7059:234:11:-;7147:4;874:10;;902:11;;858:93;;-1:-1:-1;;;858:93:11;;-1:-1:-1;;;;;874:10:11;;;;858:35;;:93;;874:10;902:11;;;;;;;916:10;;936:4;;-1:-1:-1;;;;;;943:7:11;;;;858:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;843:138;;;;-1:-1:-1;;;843:138:11;;;;;;;:::i;:::-;;;;;;;;;7173:10:::1;7159:11;7189:23:::0;;;:18:::1;:23;::::0;;;;;;;-1:-1:-1;;;;;7189:32:11;::::1;::::0;;;;;;;;;;:41;;;7241:30;1559:25:486;;;7173:10:11;;7241:30:::1;::::0;1532:18:486;7241:30:11::1;;;;;;;-1:-1:-1::0;7284:4:11::1;::::0;7059:234;-1:-1:-1;;;7059:234:11:o;22157:1406::-;22234:7;22249:20;22301:12;22279:18;;:34;22275:277;;;-1:-1:-1;22338:11:11;;22275:277;;;22370:17;25738:4;-1:-1:-1;;;;;22390:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22370:40;;22418:30;22451:52;22479:12;22493:9;22451:27;:52::i;:::-;22526:19;;;;-1:-1:-1;;;22275:277:11;-1:-1:-1;;;;;22782:23:11;;22621:17;22782:23;;;:14;:23;;;;;22990:24;;22621:17;;;;22986:58;;-1:-1:-1;23036:1:11;;22157:1406;-1:-1:-1;;;;;;22157:1406:11:o;22986:58::-;23258:24;;23250:47;;23284:12;23250:7;:47::i;:::-;23217:80;;-1:-1:-1;23217:80:11;-1:-1:-1;23322:18:11;23311:7;:29;;;;;;;;:::i;:::-;;23303:72;;;;-1:-1:-1;;;23303:72:11;;10331:2:486;23303:72:11;;;10313:21:486;10370:2;10350:18;;;10343:30;10409:32;10389:18;;;10382:60;10459:18;;23303:72:11;10129:354:486;23303:72:11;23402:58;23410:19;23431:14;:28;;;23402:7;:58::i;:::-;23382:78;;-1:-1:-1;23382:78:11;-1:-1:-1;23485:18:11;23474:7;:29;;;;;;;;:::i;:::-;;23466:72;;;;-1:-1:-1;;;23466:72:11;;10690:2:486;23466:72:11;;;10672:21:486;10729:2;10709:18;;;10702:30;10768:32;10748:18;;;10741:60;10818:18;;23466:72:11;10488:354:486;23466:72:11;-1:-1:-1;23552:6:11;22157:1406;-1:-1:-1;;;;;22157:1406:11:o;6384:233::-;6522:4;6493:5;24628:30;24648:9;24628:19;:30::i;:::-;874:10:::1;::::0;;902:11:::1;::::0;858:93:::1;::::0;-1:-1:-1;;;858:93:11;;-1:-1:-1;;;;;874:10:11;;::::1;::::0;858:35:::1;::::0;:93:::1;::::0;874:10:::1;902:11:::0;::::1;;::::0;916:10:::1;::::0;936:4:::1;::::0;943:7;::::1;-1:-1:-1::0;;;;;;943:7:11::1;::::0;858:93:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;843:138;;;;-1:-1:-1::0;;;843:138:11::1;;;;;;;:::i;:::-;6597:14:::2;6541:44;6556:10;6568:3;6573;6578:6;6541:14;:44::i;:::-;:71;6534:78;;24671:29:::0;24690:9;24671:18;:29::i;:::-;6384:233;;;;;;:::o;8296:::-;8423:16;:14;:16::i;:::-;8415:35;;;;-1:-1:-1;;;8415:35:11;;11049:2:486;8415:35:11;;;11031:21:486;11088:1;11068:18;;;11061:29;-1:-1:-1;;;11106:18:486;;;11099:36;11152:18;;8415:35:11;10847:329:486;8415:35:11;8490:12;:4;8497:5;;8490:12;:::i;:::-;-1:-1:-1;8508:16:11;:6;8517:7;;8508:16;:::i;:::-;;8296:233;;;;:::o;14439:443::-;14527:7;;25738:4;-1:-1:-1;;;;;14557:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14542:35;;14599:14;14591:4;:22;;14583:57;;;;-1:-1:-1;;;14583:57:11;;11383:2:486;14583:57:11;;;11365:21:486;11422:2;11402:18;;;11395:30;-1:-1:-1;;;11441:18:486;;;11434:52;11503:18;;14583:57:11;11181:346:486;14583:57:11;14659:17;;-1:-1:-1;;;;;14659:17:11;:31;14700:21;14707:14;14700:4;:21;:::i;:::-;14731:12;;14786:14;;14769;;14753:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;14853:16;;14834;;14810:21;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;14659:218;;-1:-1:-1;;;;;;14659:218:11;;;;;;;;;;7016:25:486;;;;7057:18;;;7050:34;;;;7100:18;;;7093:34;7143:18;;;7136:34;6988:19;;14659:218:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14646:231;14439:443;-1:-1:-1;;;14439:443:11:o;23743:330::-;23819:7;23834:23;23860:40;;;;;;;;23876:21;:19;:21::i;:::-;23860:40;;-1:-1:-1;;;;;23974:20:11;;23907:14;23974:20;;;:13;:20;;;;;;23834:66;;-1:-1:-1;23907:14:11;;;23942:53;;23834:66;;23942:17;:53::i;:::-;23906:89;;-1:-1:-1;23906:89:11;-1:-1:-1;24017:18:11;24009:4;:26;;;;;;;;:::i;:::-;;24001:47;;;;-1:-1:-1;;;24001:47:11;;12129:2:486;24001:47:11;;;12111:21:486;12168:1;12148:18;;;12141:29;-1:-1:-1;;;12186:18:486;;;12179:38;12234:18;;24001:47:11;11927:331:486;24001:47:11;24061:7;23743:330;-1:-1:-1;;;;23743:330:11:o;24077:386::-;874:10;;;902:11;;858:93;;-1:-1:-1;;;858:93:11;;-1:-1:-1;;;;;874:10:11;;;;858:35;;:93;;874:10;902:11;;;;916:10;;936:4;;943:7;;-1:-1:-1;;;;;;943:7:11;;858:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;843:138;;;;-1:-1:-1;;;843:138:11;;;;;;;:::i;:::-;24164:16:::1;:14;:16::i;:::-;;24203:6;24187:12;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;25738:4:11;;-1:-1:-1;24215:46:11::1;::::0;-1:-1:-1;;;24215:46:11;;24242:10:::1;24215:46;::::0;::::1;12437:51:486::0;12504:18;;;12497:34;;;-1:-1:-1;;;;;24215:26:11;;;::::1;::::0;::::1;::::0;12410:18:486;;24215:46:11::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24316:10:11::1;::::0;24268:73:::1;::::0;-1:-1:-1;;;24268:73:11;;24287:10:::1;::::0;-1:-1:-1;24268:47:11::1;::::0;-1:-1:-1;24268:73:11::1;::::0;-1:-1:-1;;;;;24316:10:11::1;::::0;24328:6;;24336:4;;;;24268:73:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24348:10;25738:4:::0;;25657:92;24348:10:::1;:45;::::0;-1:-1:-1;;;24348:45:11;;24374:10:::1;24348:45;::::0;::::1;12437:51:486::0;12504:18;;;12497:34;;;-1:-1:-1;;;;;24348:25:11;;;::::1;::::0;::::1;::::0;12410:18:486;;24348:45:11::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24415:6;24399:12;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24433:25:11::1;::::0;;24439:10:::1;12437:51:486::0;;12519:2;12504:18;;12497:34;;;24433:25:11::1;::::0;12410:18:486;24433:25:11::1;;;;;;;24077:386:::0;;;:::o;2860:268::-;2928:7;3108:14;;3091;;3075:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;3059:12;;25738:4;-1:-1:-1;;;;;3036:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;;:::i;:::-;:87;;;;:::i;:::-;3029:94;;2860:268;:::o;20760:345::-;20823:7;20864:12;20842:18;;:34;20838:263;;;-1:-1:-1;20893:12:11;;;20760:345::o;20838:263::-;20926:17;25738:4;-1:-1:-1;;;;;20946:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20926:40;;20974:30;21007:52;21035:12;21049:9;21007:27;:52::i;:::-;21074:20;;;;20760:345;-1:-1:-1;;;20760:345:11:o;997:1859::-;1155:22;;;1111:2;1155:22;;;;;;;;;1071:15;;1111:2;1094:14;;1111:2;1155:22;;;;;;;;;;-1:-1:-1;;1119:58:11;-1:-1:-1;;;;1119:58:11;1201:10;;;:::i;:::-;;;;1183:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1183:54:11;;;:29;;;;;;;;;;;:54;-1:-1:-1;;;1243:17:11;1261:10;;;:::i;:::-;;;;1243:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1243:58:11;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;1307:17:11;1325:10;;;:::i;:::-;;;;1307:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1307:55:11;;;:29;;;;;;;;;;;:55;-1:-1:-1;;;1368:17:11;1386:10;;;:::i;:::-;;;;1368:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1368:53:11;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1427:17:11;1445:10;;;:::i;:::-;;;;1427:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1427:55:11;;;:29;;;;;;;;;;;:55;-1:-1:-1;;;1488:17:11;1506:10;;;:::i;:::-;;;;1488:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1488:58:11;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;1552:17:11;1570:10;;;:::i;:::-;;;;1552:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1552:67:11;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;1625:17:11;1643:10;;;:::i;:::-;;;;1625:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1625:63:11;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1694:17:11;1712:10;;;:::i;:::-;;;;1694:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1694:63:11;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1763:17:11;1781:10;;;:::i;:::-;;;;1763:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1763:64:11;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;1833:17:11;1851:10;;;:::i;:::-;;;;1833:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1833:64:11;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;1903:17:11;1921:10;;;:::i;:::-;;;;1903:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1903:65:11;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;1974:17:11;1992:10;;;:::i;:::-;;;;1974:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1974:60:11;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2040:17:11;2058:10;;;:::i;:::-;;;;2040:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2040:65:11;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;2111:17:11;2129:10;;;:::i;:::-;;;;2111:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2111:65:11;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;2182:17:11;2200:10;;;:::i;:::-;;;;2182:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2182:55:11;;;:29;;;;;;;;;;;:55;-1:-1:-1;;;2243:17:11;2261:10;;;:::i;:::-;;;;2243:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2243:76:11;;;:29;;;;;;;;;;;:76;-1:-1:-1;;;2325:17:11;2343:10;;;:::i;:::-;;;;2325:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2325:77:11;;;:29;;;;;;;;;;;:77;-1:-1:-1;;;2408:17:11;2426:10;;;:::i;:::-;;;;2408:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2408:75:11;;;:29;;;;;;;;;;;:75;-1:-1:-1;;;2489:17:11;2507:10;;;:::i;:::-;;;;2489:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2489:72:11;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;2567:17:11;2585:10;;;:::i;:::-;;;;2567:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2567:51:11;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;2624:17:11;2642:10;;;:::i;:::-;;;;2624:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2624:64:11;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2694:17:11;2712:10;;;:::i;:::-;;;;2694:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2694:66:11;;;:29;;;;;;;;;;;:66;2775:13;;;;2767:54;;;;-1:-1:-1;;;2767:54:11;;13755:2:486;2767:54:11;;;13737:21:486;13794:2;13774:18;;;13767:30;13833;13813:18;;;13806:58;13881:18;;2767:54:11;13553:352:486;2767:54:11;2834:17;997:1859;-1:-1:-1;;997:1859:11:o;10049:1658::-;10145:7;10129:5;24628:30;24648:9;24628:19;:30::i;:::-;10160:16:::1;:14;:16::i;:::-;;10272:12;10250:18;;:34;10246:129;;10301:67;10306:22;10330:37;10301:4;:67::i;:::-;10294:74;;;;10246:129;-1:-1:-1::0;;10421:19:11::1;:40;10417:84;;;10485:16;;10463:38;;10417:84;10536:27;10582:10:::0;::::1;;;;;;;;-1:-1:-1::0;;;;;10582:10:11::1;-1:-1:-1::0;;;;;10566:43:11::1;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10536:75;;1066:4:12;10784:19:11;10762;10738:21;;:43;;;;:::i;:::-;:65;;;;:::i;:::-;:100;10734:189;;;10855:61;10860:15;10877:38;10855:4;:61::i;:::-;10848:68;;;;;10734:189;10981:19;10961:16;;:39;10957:413;;11046:16;:14;:16::i;:::-;11041:112;;11081:63;11086:18;11106:37;11081:4;:63::i;11041:112::-;11214:16;::::0;;11238:38;;;;11310:53:::1;::::0;;14084:25:486;;;14140:2;14125:18;;14118:34;;;11310:53:11::1;::::0;14057:18:486;11310:53:11::1;;;;;;;11002:368;10957:413;11428:19;11408:16;;:39;11404:262;;11510:16;::::0;;11534:38;;;;11606:53:::1;::::0;;14084:25:486;;;14140:2;14125:18;;14118:34;;;11606:53:11::1;::::0;14057:18:486;11606:53:11::1;;;;;;;11449:217;11404:262;11687:14;11679:23;11672:30;;;24664:1;24671:29:::0;24690:9;24671:18;:29::i;:::-;10049:1658;;;;:::o;663:20:12:-;;;;;;;:::i;19694:936:11:-;19904:18;;19745:7;;19833:12;;19904:40;;19900:91;;;19969:14;19961:23;19954:30;;;19694:936;:::o;19900:91::-;19997:17;25738:4;-1:-1:-1;;;;;20017:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19997:40;;20043:30;20076:58;20104:18;20124:9;20076:27;:58::i;:::-;20245:18;:39;;;20304:19;;;;;20290:11;:33;;;20344:20;;;;;20329:12;:35;;;20386:21;;;;;20370:13;:37;20430:22;;;;20413:14;:39;20475:22;;;;20458:14;:39;20534:27;;;;20508:81;;;7016:25:486;;;7057:18;;;7050:34;;;;7100:18;;7093:34;;;;7143:18;;;7136:34;20304:19:11;;-1:-1:-1;20508:81:11;;6988:19:486;20508:81:11;;;;;;;20610:14;20595:30;;;;;19694:936;:::o;5895:207::-;6000:4;5971:5;24628:30;24648:9;24628:19;:30::i;:::-;874:10:::1;::::0;;902:11:::1;::::0;858:93:::1;::::0;-1:-1:-1;;;858:93:11;;-1:-1:-1;;;;;874:10:11;;::::1;::::0;858:35:::1;::::0;:93:::1;::::0;874:10:::1;902:11:::0;::::1;;::::0;916:10:::1;::::0;936:4:::1;::::0;943:7;::::1;-1:-1:-1::0;;;;;;943:7:11::1;::::0;858:93:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;843:138;;;;-1:-1:-1::0;;;843:138:11::1;;;;;;;:::i;:::-;6082:14:::2;6019:51;6034:10;6046;6058:3;6063:6;6019:14;:51::i;:::-;:78;6012:85;;24671:29:::0;24690:9;24671:18;:29::i;:::-;5895:207;;;;;:::o;25753:202::-;25886:22;25925:25;25945:4;;25925:19;:25::i;13775:310::-;13863:17;;13835:7;;-1:-1:-1;;;;;13863:17:11;:31;25738:4;-1:-1:-1;;;;;13904:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13934:12;;13989:14;;13972;;13956:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;14056:16;;14037;;14013:21;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;13863:217;;-1:-1:-1;;;;;;13863:217:11;;;;;;;;;;7016:25:486;;;;7057:18;;;7050:34;;;;7100:18;;;7093:34;7143:18;;;7136:34;6988:19;;13863:217:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14089:346::-;14200:17;;14172:7;;-1:-1:-1;;;;;14200:17:11;:31;14264:10;25738:4;-1:-1:-1;;;;;14241:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;;:::i;:::-;14284:12;;14339:14;;14322;;14306:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;14406:16;;14387;;14363:21;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;14200:230;;-1:-1:-1;;;;;;14200:230:11;;;;;;;;;;7016:25:486;;;;7057:18;;;7050:34;;;;7100:18;;;7093:34;7143:18;;;7136:34;6988:19;;14200:230:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15021:817::-;15082:7;15117:18;;15101:12;:34;15097:737;;;15160:230;15197:11;;15220:27;;15259:10;25738:4;;25657:92;15259:10;-1:-1:-1;;;;;15259:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15291:12;;15315:13;;15340:14;;15366;;15160:25;:230::i;15097:737::-;15411:17;25738:4;-1:-1:-1;;;;;15431:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15411:40;;15459:30;15492:52;15520:12;15534:9;15492:27;:52::i;:::-;15459:85;;15568:259;15605:7;:19;;;15636:27;;15675:9;15696:7;:20;;;15728:7;:21;;;15761:7;:22;;;15795:7;:22;;;15568:25;:259::i;:::-;15553:274;;;;15021:817;:::o;21429:473::-;-1:-1:-1;;;;;21620:22:11;;21529:7;21620:22;;;:13;:22;;;;;;21529:7;;;;;;;;21726:29;21634:7;21726:20;:29::i;:::-;21710:45;;21785:21;:19;:21::i;:::-;21762:44;-1:-1:-1;21829:14:11;21813:84;21846:13;;-1:-1:-1;21861:13:11;;-1:-1:-1;21846:13:11;-1:-1:-1;21429:473:11;-1:-1:-1;;21429:473:11:o;13195:420::-;13277:7;;25738:4;-1:-1:-1;;;;;13307:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13292:35;;13349:12;13341:4;:20;;13333:55;;;;-1:-1:-1;;;13333:55:11;;11383:2:486;13333:55:11;;;11365:21:486;11422:2;11402:18;;;11395:30;-1:-1:-1;;;11441:18:486;;;11434:52;11503:18;;13333:55:11;11181:346:486;13333:55:11;13448:17;;-1:-1:-1;;;;;13448:17:11;:31;13489:19;13496:12;13489:4;:19;:::i;:::-;13533:12;13518;;:27;;;;:::i;:::-;13588:14;;13571;;13555:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;13448:162;;-1:-1:-1;;;;;;13448:162:11;;;;;;;;;;14365:25:486;;;;14406:18;;;14399:34;;;;14449:18;;;14442:34;14338:18;;13448:162:11;14163:319:486;12054:736:11;12186:7;12166:5;24628:30;24648:9;24628:19;:30::i;:::-;12203:16:::1;:14;:16::i;:::-;;12230;:14;:16::i;:::-;12225:118;;12263:73;12268:18;12288:47;12263:4;:73::i;12225:118::-;12375:12;12353:18;;:34;12349:139;;12404:77;12409:22;12433:47;12404:4;:77::i;12349:139::-;12502:20;-1:-1:-1::0;;;;;12502:40:11::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12494:62;;;::::0;-1:-1:-1;;;12494:62:11;;14689:2:486;12494:62:11::1;::::0;::::1;14671:21:486::0;14728:1;14708:18;;;14701:29;-1:-1:-1;;;14746:18:486;;;14739:37;14793:18;;12494:62:11::1;14487:330:486::0;12494:62:11::1;12604:17;::::0;;-1:-1:-1;;;;;12627:40:11;;::::1;-1:-1:-1::0;;;;;;12627:40:11;::::1;::::0;::::1;::::0;;;12678:70:::1;::::0;;12604:17;;;::::1;15088:34:486::0;;;15153:2;15138:18;;15131:43;;;;12678:70:11::1;::::0;15023:18:486;12678:70:11::1;;;;;;;;12770:14;12762:23;::::0;12950:241;13038:17;;13010:7;;-1:-1:-1;;;;;13038:17:11;:31;25738:4;-1:-1:-1;;;;;13079:18:11;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13109:12;;13164:14;;13147;;13131:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;13038:148;;-1:-1:-1;;;;;;13038:148:11;;;;;;;;;;14365:25:486;;;;14406:18;;;14399:34;;;;14449:18;;;14442:34;14338:18;;13038:148:11;14163:319:486;8809:975:11;8915:7;8899:5;24628:30;24648:9;24628:19;:30::i;:::-;8930:16:::1;:14;:16::i;:::-;;8986;:14;:16::i;:::-;8981:113;;9019:68;9024:18;9044:42;9019:4;:68::i;8981:113::-;9190:12;9168:18;;:34;9164:134;;9219:72;9224:22;9248:42;9219:4;:72::i;9164:134::-;1066:4:12;9405:16:11;;9386;;9359:24;:43;;;;:::i;:::-;:62;;;;:::i;:::-;:97;9355:191;;;9473:66;9478:15;9495:43;9473:4;:66::i;9355:191::-;9587:21;::::0;;9614:48;;;;9674:68:::1;::::0;;14084:25:486;;;14140:2;14125:18;;14118:34;;;9674:68:11::1;::::0;14057:18:486;9674:68:11::1;13910:248:486::0;17299:2166:11;17411:30;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17411:30:11;17451:17;17488:14;;17471;;:31;;;;:::i;:::-;17537:17;;17580:12;;17594:13;;17451:51;;-1:-1:-1;17508:26:11;;-1:-1:-1;;;;;17537:17:11;;;;:31;;17569:9;;17594:25;;17451:51;;17594:25;:::i;:::-;17537:83;;-1:-1:-1;;;;;;17537:83:11;;;;;;;;;;14365:25:486;;;;14406:18;;;14399:34;;;;14449:18;;;14442:34;14338:18;;17537:83:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17508:112;;904:9:12;17630:18:11;:42;17626:166;;;17698:9;17686;:21;17682:103;;;17709:21;;-1:-1:-1;;;17709:21:11;;15387:2:486;17709:21:11;;;15369::486;15426:2;15406:18;;;15399:30;-1:-1:-1;;;15445:18:486;;;15438:41;15496:18;;17709:21:11;15185:335:486;17682:103:11;-1:-1:-1;904:9:12;17682:103:11;17798:17;17817:18;17839:40;17847:11;17860:18;;17839:7;:40::i;:::-;17797:82;;-1:-1:-1;17797:82:11;-1:-1:-1;17904:18:11;17893:7;:29;;;;;;;;:::i;:::-;;17885:53;;;;-1:-1:-1;;;17885:53:11;;15727:2:486;17885:53:11;;;15709:21:486;15766:2;15746:18;;;15739:30;-1:-1:-1;;;15785:18:486;;;15778:41;15836:18;;17885:53:11;15525:335:486;17885:53:11;18535:40;;;18603:11;;18581:19;;;;:33;;;;18659:37;;;;;;;;;;;18535:26;;18654:55;;18698:10;18654:4;:55::i;:::-;18620:89;;18745:54;18764:20;18786:12;;18745:18;:54::i;:::-;18715:27;;;:84;;;18858:12;;18828:42;;;:::i;:::-;18805:20;;;:65;18933:40;;;;;;;;;18949:21;;18933:40;;18981:27;;;;19016:13;;18900:135;;18933:40;18981:27;18900:25;:135::i;:::-;18876:21;;;:159;19099:35;;;;;;;;;19115:16;;19099:35;;19142:27;;;;19177:14;;19066:131;;19099:35;19142:27;19066:25;:131::i;:::-;19041:22;;;:156;19261:35;;;;;;;;;19277:16;;19261:35;;19304:27;;;;19339:14;;19228:131;;19261:35;19304:27;19228:25;:131::i;:::-;19203:22;;;:156;19435:11;;19387:73;;19413:20;;19435:11;19387:25;:73::i;:::-;19365:19;;;:95;-1:-1:-1;19365:7:11;;17299:2166;-1:-1:-1;;;;;;17299:2166:11:o;544:330:13:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:13;;-1:-1:-1;660:18:13;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:13;-1:-1:-1;544:330:13;;;;;;:::o;958:198::-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:13;;-1:-1:-1;1102:1:13;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;25006:178:11:-;25073:11;;-1:-1:-1;;;25073:11:11;;;;25065:34;;;;-1:-1:-1;;;25065:34:11;;16289:2:486;25065:34:11;;;16271:21:486;16328:2;16308:18;;;16301:30;-1:-1:-1;;;16347:18:486;;;16340:40;16397:18;;25065:34:11;16087:334:486;25065:34:11;25110:9;25105:49;;25121:11;;;;;;;;;-1:-1:-1;;;;;25121:11:11;-1:-1:-1;;;;;25121:31:11;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25105:49;-1:-1:-1;25174:5:11;25160:19;;-1:-1:-1;;;;25160:19:11;;;25006:178::o;3578:2078::-;3771:11;;:60;;-1:-1:-1;;;3771:60:11;;3807:4;3771:60;;;16695:34:486;-1:-1:-1;;;;;16765:15:486;;;16745:18;;;16738:43;16817:15;;;16797:18;;;16790:43;16849:18;;;16842:34;;;3699:7:11;;;;3771:11;;;;;;;;:27;;16629:19:486;;3771:60:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3753:78;-1:-1:-1;3841:12:11;;3837:132;;3870:92;3881:27;3910:42;3954:7;3870:10;:92::i;:::-;3863:99;;;;;3837:132;4024:3;-1:-1:-1;;;;;4017:10:11;:3;-1:-1:-1;;;;;4017:10:11;;4013:93;;;4044:55;4049:15;4066:32;4044:4;:55::i;4013:93::-;4172:25;4222:3;-1:-1:-1;;;;;4211:14:11;:7;-1:-1:-1;;;;;4211:14:11;;4207:145;;;-1:-1:-1;;;4207:145:11;;;-1:-1:-1;;;;;;4313:23:11;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;;4207:145;4419:17;4442:20;4468;4494;4547:34;4555:17;4574:6;4547:7;:34::i;:::-;4521:60;;-1:-1:-1;4521:60:11;-1:-1:-1;4602:18:11;4591:7;:29;;;;;;;;:::i;:::-;;4587:113;;4637:56;4642:16;4660:32;4637:4;:56::i;:::-;4630:63;;;;;;;;;;4587:113;-1:-1:-1;;;;;4740:18:11;;;;;;:13;:18;;;;;;4732:35;;4760:6;4732:7;:35::i;:::-;4706:61;;-1:-1:-1;4706:61:11;-1:-1:-1;4788:18:11;4777:7;:29;;;;;;;;:::i;:::-;;4773:112;;4823:55;4828:16;4846:31;4823:4;:55::i;4773:112::-;-1:-1:-1;;;;;4925:18:11;;;;;;:13;:18;;;;;;4917:35;;4945:6;4917:7;:35::i;:::-;4891:61;;-1:-1:-1;4891:61:11;-1:-1:-1;4973:18:11;4962:7;:29;;;;;;;;:::i;:::-;;4958:110;;5008:53;5013:16;5031:29;5008:4;:53::i;4958:110::-;-1:-1:-1;;;;;5179:18:11;;;;;;;:13;:18;;;;;;:33;;;5218:18;;;;;;:33;;;-1:-1:-1;;5313:38:11;;5309:106;;-1:-1:-1;;;;;5361:23:11;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;:47;;;5309:106;5475:3;-1:-1:-1;;;;;5461:26:11;5470:3;-1:-1:-1;;;;;5461:26:11;;5480:6;5461:26;;;;1559:25:486;;1547:2;1532:18;;1413:177;5461:26:11;;;;;;;;-1:-1:-1;5636:14:11;;3578:2078;-1:-1:-1;;;;;;;;;;3578:2078:11:o;25484:169::-;25542:11;:18;;-1:-1:-1;;;;25542:18:11;-1:-1:-1;;;25542:18:11;;;25605:9;25600:48;;25616:11;;;;;;;;;-1:-1:-1;;;;;25616:11:11;-1:-1:-1;;;;;25616:30:11;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25600:48;25484:169;:::o;10605:339:12:-;10654:4;10666:39;10737:11;;;;;;;;;-1:-1:-1;;;;;10737:11:12;10666:84;;10784:18;-1:-1:-1;;;;;10784:24:12;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10770:40:12;:10;-1:-1:-1;;;;;10770:40:12;;:79;;;;;10814:18;-1:-1:-1;;;;;10814:33:12;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10769:170;;;-1:-1:-1;10883:10:12;;-1:-1:-1;;;;;10883:10:12;10861;:33;:77;;;;;10898:18;-1:-1:-1;;;;;10898:38:12;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2379:288:21:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:21;-1:-1:-1;2560:18:21;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:21;-1:-1:-1;2601:1:21;;-1:-1:-1;2588:15:21;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;7757:151:20:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;14365:25:486;;;14421:2;14406:18;;14399:34;;;;7875:1:20;14449:18:486;;;14442:34;14353:2;14338:18;7838:39:20;;;;;;;7899:3;7891:12;;;;;;;;:::i;273:573:407:-;356:22;408:4;396:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;386:34;;431:9;426:416;446:15;;;426:416;;;477:12;;522:4;541;;546:1;541:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;514:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;476:73;;;;563:7;558:250;;674:2;658:6;:13;:18;654:32;;;678:8;;;654:32;739:4;731:6;727:17;717:27;;781:6;770:28;;;;;;;;;;;;:::i;:::-;763:36;;-1:-1:-1;;;763:36:407;;;;;;;;:::i;558:250::-;829:6;816:7;824:1;816:10;;;;;;;;:::i;:::-;;;;;;:19;;;;468:374;;463:3;;;;;:::i;:::-;;;;426:416;;15842:1197:11;16109:7;16128:17;16124:911;;-1:-1:-1;16266:28:11;16259:35;;16124:911;16472:36;16516:23;-1:-1:-1;;;;;;;;;;;;;;16516:23:11;16547:17;16615:125;16639:10;16659:13;16717:15;16682:32;16699:15;16682:14;:32;:::i;:::-;:50;;;;:::i;:::-;16615:14;:125::i;:::-;16573:167;-1:-1:-1;16573:167:11;-1:-1:-1;16767:18:11;16756:7;:29;;;;;;;;:::i;:::-;;16748:79;;;;-1:-1:-1;;;16748:79:11;;19508:2:486;16748:79:11;;;19490:21:486;19547:2;19527:18;;;19520:30;19586:34;19566:18;;;19559:62;-1:-1:-1;;;19637:18:486;;;19630:35;19682:19;;16748:79:11;19306:401:486;16748:79:11;16862:50;16869:28;16899:12;16862:6;:50::i;:::-;16836:76;-1:-1:-1;16836:76:11;-1:-1:-1;16939:18:11;16928:7;:29;;;;;;;;:::i;:::-;;16920:71;;;;-1:-1:-1;;;16920:71:11;;19914:2:486;16920:71:11;;;19896:21:486;19953:2;19933:18;;;19926:30;19992:31;19972:18;;;19965:59;20041:18;;16920:71:11;19712:353:486;16920:71:11;-1:-1:-1;17007:21:11;;-1:-1:-1;17000:28:11;;-1:-1:-1;17000:28:11;16124:911;15842:1197;;;;;;;;;:::o;1280:213:13:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:13;;-1:-1:-1;1480:1:13;1443:39;;4095:130:22;-1:-1:-1;;;;;;;;;;;;4182:38:22;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:22:o;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1416:220::-;1536:7;1551:18;1572:15;1577:1;1580:6;1572:4;:15::i;:::-;1551:36;;1600:31;1605:17;1614:7;1605:8;:17::i;:::-;1624:6;1600:4;:31::i;:::-;1593:38;1416:220;-1:-1:-1;;;;;1416:220:22:o;8016:262:20:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;14365:25:486;;;14421:2;14406:18;;14399:34;;;;14449:18;;14442:34;;;14353:2;14338:18;8140:49:20;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1567:263:13:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:13;-1:-1:-1;1730:30:13;;1710:116;1789:26;1817:1;1781:38;;;;;;;1947:332:21;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:21;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:21;-1:-1:-1;2136:18:21;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:21;;;;;;;;;-1:-1:-1;2178:20:21;;2172:4;;-1:-1:-1;2178:20:21;-1:-1:-1;2164:35:21;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:21;;-1:-1:-1;1947:332:21;-1:-1:-1;;;;1947:332:21:o;814:203:22:-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1888:270:13:-;1984:9;1995:7;2011:14;2027:11;2042:13;2050:1;2053;2042:7;:13::i;:::-;2010:45;;-1:-1:-1;2010:45:13;-1:-1:-1;2074:18:13;2066:4;:26;;;;;;;;:::i;:::-;;2062:63;;-1:-1:-1;2110:4:13;-1:-1:-1;2116:1:13;;-1:-1:-1;2102:16:13;;2062:63;2138:15;2146:3;2151:1;2138:7;:15::i;:::-;2131:22;;;;;;1888:270;;;;;;;:::o;799:479:21:-;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:21;896:14;912:23;939:22;947:3;450:4:22;939:7:21;:22::i;:::-;895:66;;-1:-1:-1;895:66:21;-1:-1:-1;979:18:21;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:21;;;;;;;;;-1:-1:-1;1021:20:21;;1015:4;;-1:-1:-1;1021:20:21;-1:-1:-1;1007:35:21;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:21;-1:-1:-1;1141:18:21;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:21;;-1:-1:-1;799:479:21;-1:-1:-1;;;;;;799:479:21:o;4796:123:22:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;3021:117::-;3080:7;3102:31;3107:1;3110;3102:31;;;;;;;;;;;;;-1:-1:-1;;;3102:31:22;;;:4;:31::i;4923:243::-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:22;;5045:16;5041:45;;;-1:-1:-1;5078:1:22;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:22;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:22;;;;;;;;:::i;:::-;-1:-1:-1;5160:1:22;4923:243;-1:-1:-1;;;;4923:243:22:o;3142:189::-;3245:7;;3272:5;3276:1;3272;:5;:::i;:::-;3260:17;-1:-1:-1;3299:12:22;3291:6;;;;3283:29;;;;-1:-1:-1;;;3283:29:22;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:258:486;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;262:1;253:6;248:3;244:16;237:27;218:48;;14:258;;;:::o;277:::-;319:3;357:5;351:12;384:6;379:3;372:19;400:63;456:6;449:4;444:3;440:14;433:4;426:5;422:16;400:63;:::i;:::-;517:2;496:15;-1:-1:-1;;492:29:486;483:39;;;;524:4;479:50;;277:258;-1:-1:-1;;277:258:486:o;540:220::-;689:2;678:9;671:21;652:4;709:45;750:2;739:9;735:18;727:6;709:45;:::i;765:131::-;-1:-1:-1;;;;;840:31:486;;830:42;;820:70;;886:1;883;876:12;901:315;969:6;977;1030:2;1018:9;1009:7;1005:23;1001:32;998:52;;;1046:1;1043;1036:12;998:52;1085:9;1072:23;1104:31;1129:5;1104:31;:::i;:::-;1154:5;1206:2;1191:18;;;;1178:32;;-1:-1:-1;;;901:315:486:o;1595:247::-;1654:6;1707:2;1695:9;1686:7;1682:23;1678:32;1675:52;;;1723:1;1720;1713:12;1675:52;1762:9;1749:23;1781:31;1806:5;1781:31;:::i;1847:456::-;1924:6;1932;1940;1993:2;1981:9;1972:7;1968:23;1964:32;1961:52;;;2009:1;2006;1999:12;1961:52;2048:9;2035:23;2067:31;2092:5;2067:31;:::i;:::-;2117:5;-1:-1:-1;2174:2:486;2159:18;;2146:32;2187:33;2146:32;2187:33;:::i;:::-;1847:456;;2239:7;;-1:-1:-1;;;2293:2:486;2278:18;;;;2265:32;;1847:456::o;2497:348::-;2549:8;2559:6;2613:3;2606:4;2598:6;2594:17;2590:27;2580:55;;2631:1;2628;2621:12;2580:55;-1:-1:-1;2654:20:486;;2697:18;2686:30;;2683:50;;;2729:1;2726;2719:12;2683:50;2766:4;2758:6;2754:17;2742:29;;2818:3;2811:4;2802:6;2794;2790:19;2786:30;2783:39;2780:59;;;2835:1;2832;2825:12;2850:721;2942:6;2950;2958;2966;3019:2;3007:9;2998:7;2994:23;2990:32;2987:52;;;3035:1;3032;3025:12;2987:52;3075:9;3062:23;3104:18;3145:2;3137:6;3134:14;3131:34;;;3161:1;3158;3151:12;3131:34;3200:59;3251:7;3242:6;3231:9;3227:22;3200:59;:::i;:::-;3278:8;;-1:-1:-1;3174:85:486;-1:-1:-1;3366:2:486;3351:18;;3338:32;;-1:-1:-1;3382:16:486;;;3379:36;;;3411:1;3408;3401:12;3379:36;;3450:61;3503:7;3492:8;3481:9;3477:24;3450:61;:::i;:::-;2850:721;;;;-1:-1:-1;3530:8:486;-1:-1:-1;;;;2850:721:486:o;3576:180::-;3635:6;3688:2;3676:9;3667:7;3663:23;3659:32;3656:52;;;3704:1;3701;3694:12;3656:52;-1:-1:-1;3727:23:486;;3576:180;-1:-1:-1;3576:180:486:o;3761:478::-;3840:6;3848;3856;3909:2;3897:9;3888:7;3884:23;3880:32;3877:52;;;3925:1;3922;3915:12;3877:52;3961:9;3948:23;3938:33;;4022:2;4011:9;4007:18;3994:32;4049:18;4041:6;4038:30;4035:50;;;4081:1;4078;4071:12;4035:50;4120:59;4171:7;4162:6;4151:9;4147:22;4120:59;:::i;:::-;3761:478;;4198:8;;-1:-1:-1;4094:85:486;;-1:-1:-1;;;;3761:478:486:o;4686:657::-;4855:2;4907:21;;;4977:13;;4880:18;;;4999:22;;;4826:4;;4855:2;5078:15;;;;5052:2;5037:18;;;4826:4;5121:196;5135:6;5132:1;5129:13;5121:196;;;5200:13;;-1:-1:-1;;;;;;5196:40:486;5184:53;;5292:15;;;;5257:12;;;;5157:1;5150:9;5121:196;;;-1:-1:-1;5334:3:486;;4686:657;-1:-1:-1;;;;;;4686:657:486:o;5348:626::-;5445:6;5453;5506:2;5494:9;5485:7;5481:23;5477:32;5474:52;;;5522:1;5519;5512:12;5474:52;5562:9;5549:23;5591:18;5632:2;5624:6;5621:14;5618:34;;;5648:1;5645;5638:12;5618:34;5686:6;5675:9;5671:22;5661:32;;5731:7;5724:4;5720:2;5716:13;5712:27;5702:55;;5753:1;5750;5743:12;5702:55;5793:2;5780:16;5819:2;5811:6;5808:14;5805:34;;;5835:1;5832;5825:12;5805:34;5888:7;5883:2;5873:6;5870:1;5866:14;5862:2;5858:23;5854:32;5851:45;5848:65;;;5909:1;5906;5899:12;5848:65;5940:2;5932:11;;;;;5962:6;;-1:-1:-1;5348:626:486;;-1:-1:-1;;;;5348:626:486:o;5979:801::-;6139:4;6168:2;6208;6197:9;6193:18;6238:2;6227:9;6220:21;6261:6;6296;6290:13;6327:6;6319;6312:22;6365:2;6354:9;6350:18;6343:25;;6427:2;6417:6;6414:1;6410:14;6399:9;6395:30;6391:39;6377:53;;6465:2;6457:6;6453:15;6486:1;6496:255;6510:6;6507:1;6504:13;6496:255;;;6603:2;6599:7;6587:9;6579:6;6575:22;6571:36;6566:3;6559:49;6631:40;6664:6;6655;6649:13;6631:40;:::i;:::-;6621:50;-1:-1:-1;6729:12:486;;;;6694:15;;;;6532:1;6525:9;6496:255;;;-1:-1:-1;6768:6:486;;5979:801;-1:-1:-1;;;;;;;5979:801:486:o;7405:388::-;7473:6;7481;7534:2;7522:9;7513:7;7509:23;7505:32;7502:52;;;7550:1;7547;7540:12;7502:52;7589:9;7576:23;7608:31;7633:5;7608:31;:::i;:::-;7658:5;-1:-1:-1;7715:2:486;7700:18;;7687:32;7728:33;7687:32;7728:33;:::i;:::-;7780:7;7770:17;;;7405:388;;;;;:::o;8312:380::-;8391:1;8387:12;;;;8434;;;8455:61;;8509:4;8501:6;8497:17;8487:27;;8455:61;8562:2;8554:6;8551:14;8531:18;8528:38;8525:161;;;8608:10;8603:3;8599:20;8596:1;8589:31;8643:4;8640:1;8633:15;8671:4;8668:1;8661:15;8697:481;-1:-1:-1;;;;;8982:15:486;;;8964:34;;9034:15;;;9029:2;9014:18;;9007:43;9086:15;;9081:2;9066:18;;9059:43;-1:-1:-1;;;;;;9138:33:486;;;9133:2;9118:18;;9111:61;8913:3;8898:19;;8697:481::o;9183:277::-;9250:6;9303:2;9291:9;9282:7;9278:23;9274:32;9271:52;;;9319:1;9316;9309:12;9271:52;9351:9;9345:16;9404:5;9397:13;9390:21;9383:5;9380:32;9370:60;;9426:1;9423;9416:12;9465:338;9667:2;9649:21;;;9706:2;9686:18;;;9679:30;-1:-1:-1;;;9740:2:486;9725:18;;9718:44;9794:2;9779:18;;9465:338::o;9808:184::-;9878:6;9931:2;9919:9;9910:7;9906:23;9902:32;9899:52;;;9947:1;9944;9937:12;9899:52;-1:-1:-1;9970:16:486;;9808:184;-1:-1:-1;9808:184:486:o;9997:127::-;10058:10;10053:3;10049:20;10046:1;10039:31;10089:4;10086:1;10079:15;10113:4;10110:1;10103:15;11532:127;11593:10;11588:3;11584:20;11581:1;11574:31;11624:4;11621:1;11614:15;11648:4;11645:1;11638:15;11664:125;11704:4;11732:1;11729;11726:8;11723:34;;;11737:18;;:::i;:::-;-1:-1:-1;11774:9:486;;11664:125::o;11794:128::-;11834:3;11865:1;11861:6;11858:1;11855:13;11852:39;;;11871:18;;:::i;:::-;-1:-1:-1;11907:9:486;;11794:128::o;12542:559::-;-1:-1:-1;;;;;12755:32:486;;12737:51;;12819:2;12804:18;;12797:34;;;12867:2;12862;12847:18;;12840:30;;;12886:18;;12879:34;;;12906:6;12956;12950:3;12935:19;;12922:49;13021:1;12991:22;;;13015:3;12987:32;;;12980:43;;;;13084:2;13063:15;;;-1:-1:-1;;13059:29:486;13044:45;13040:55;;12542:559;-1:-1:-1;;;12542:559:486:o;13106:127::-;13167:10;13162:3;13158:20;13155:1;13148:31;13198:4;13195:1;13188:15;13222:4;13219:1;13212:15;13238:178;13275:3;13319:4;13312:5;13308:16;13343:7;13333:41;;13354:18;;:::i;:::-;-1:-1:-1;;13390:20:486;;13238:178;-1:-1:-1;;13238:178:486:o;13421:127::-;13482:10;13477:3;13473:20;13470:1;13463:31;13513:4;13510:1;13503:15;13537:4;13534:1;13527:15;15865:217;15905:1;15931;15921:132;;15975:10;15970:3;15966:20;15963:1;15956:31;16010:4;16007:1;16000:15;16038:4;16035:1;16028:15;15921:132;-1:-1:-1;16067:9:486;;15865:217::o;16887:251::-;16957:6;17010:2;16998:9;16989:7;16985:23;16981:32;16978:52;;;17026:1;17023;17016:12;16978:52;17058:9;17052:16;17077:31;17102:5;17077:31;:::i;17475:521::-;17552:4;17558:6;17618:11;17605:25;17712:2;17708:7;17697:8;17681:14;17677:29;17673:43;17653:18;17649:68;17639:96;;17731:1;17728;17721:12;17639:96;17758:33;;17810:20;;;-1:-1:-1;17853:18:486;17842:30;;17839:50;;;17885:1;17882;17875:12;17839:50;17918:4;17906:17;;-1:-1:-1;17949:14:486;17945:27;;;17935:38;;17932:58;;;17986:1;17983;17976:12;18001:271;18184:6;18176;18171:3;18158:33;18140:3;18210:16;;18235:13;;;18210:16;18001:271;-1:-1:-1;18001:271:486:o;18277:884::-;18357:6;18410:2;18398:9;18389:7;18385:23;18381:32;18378:52;;;18426:1;18423;18416:12;18378:52;18459:9;18453:16;18488:18;18529:2;18521:6;18518:14;18515:34;;;18545:1;18542;18535:12;18515:34;18583:6;18572:9;18568:22;18558:32;;18628:7;18621:4;18617:2;18613:13;18609:27;18599:55;;18650:1;18647;18640:12;18599:55;18679:2;18673:9;18701:2;18697;18694:10;18691:36;;;18707:18;;:::i;:::-;18782:2;18776:9;18750:2;18836:13;;-1:-1:-1;;18832:22:486;;;18856:2;18828:31;18824:40;18812:53;;;18880:18;;;18900:22;;;18877:46;18874:72;;;18926:18;;:::i;:::-;18966:10;18962:2;18955:22;19001:2;18993:6;18986:18;19041:7;19036:2;19031;19027;19023:11;19019:20;19016:33;19013:53;;;19062:1;19059;19052:12;19013:53;19075:55;19127:2;19122;19114:6;19110:15;19105:2;19101;19097:11;19075:55;:::i;19166:135::-;19205:3;-1:-1:-1;;19226:17:486;;19223:43;;;19246:18;;:::i;:::-;-1:-1:-1;19293:1:486;19282:13;;19166:135::o;20070:168::-;20110:7;20176:1;20172;20168:6;20164:14;20161:1;20158:21;20153:1;20146:9;20139:17;20135:45;20132:71;;;20183:18;;:::i;:::-;-1:-1:-1;20223:9:486;;20070:168::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_getExtensionFunctions()": "89f8132e", + "_setAdminFee(uint256)": "91dd36c6", + "_setInterestRateModel(address)": "f2b3abbd", + "_setNameAndSymbol(string,string)": "34154d4c", + "_setReserveFactor(uint256)": "fca7820b", + "accrualBlockNumber()": "6c540baf", + "accrueInterest()": "a6afed95", + "adminFeeMantissa()": "8d02d9a1", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "balanceOfUnderlying(address)": "3af9e669", + "borrowBalanceCurrent(address)": "17bfdfbc", + "borrowIndex()": "aa5af0fd", + "borrowRatePerBlock()": "f8f9da28", + "borrowRatePerBlockAfterBorrow(uint256)": "cfcd4c07", + "comptroller()": "5fe3b567", + "decimals()": "313ce567", + "exchangeRateCurrent()": "bd6d894d", + "feeSeizeShareMantissa()": "be99f119", + "flash(uint256,bytes)": "3c3b4b89", + "getAccountSnapshot(address)": "c37f68e2", + "getTotalUnderlyingSupplied()": "4aeb3d9a", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "multicall(bytes[])": "ac9650d8", + "name()": "06fdde03", + "protocolSeizeShareMantissa()": "6752e702", + "reserveFactorMantissa()": "173b9904", + "supplyRatePerBlock()": "ae9d70b0", + "supplyRatePerBlockAfterDeposit(uint256)": "b1e23dbb", + "supplyRatePerBlockAfterWithdraw(uint256)": "35daea64", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalBorrowsCurrent()": "73acee98", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/Comptroller.json b/packages/sdk/deployments/mode/Comptroller.json new file mode 100644 index 0000000000..49860fd513 --- /dev/null +++ b/packages/sdk/deployments/mode/Comptroller.json @@ -0,0 +1,3747 @@ +{ + "address": "0x8b2B6a9dC8Cd73309Cef8d64920831d4C73F43a7", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "rewardsDistributor", + "type": "address" + } + ], + "name": "AddedRewardsDistributor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MarketEntered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "MarketExited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "MarketListed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldCloseFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256" + } + ], + "name": "NewCloseFactor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "oldCollateralFactorMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newCollateralFactorMantissa", + "type": "uint256" + } + ], + "name": "NewCollateralFactor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldLiquidationIncentiveMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLiquidationIncentiveMantissa", + "type": "uint256" + } + ], + "name": "NewLiquidationIncentive", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract BasePriceOracle", + "name": "oldPriceOracle", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract BasePriceOracle", + "name": "newPriceOracle", + "type": "address" + } + ], + "name": "NewPriceOracle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enforce", + "type": "bool" + } + ], + "name": "WhitelistEnforcementChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "name": "_addRewardsDistributor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_afterNonReentrant", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_becomeImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_beforeNonReentrant", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "becomeImplData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ], + "name": "_deployMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "_mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256" + } + ], + "name": "_setCloseFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newCollateralFactorMantissa", + "type": "uint256" + } + ], + "name": "_setCollateralFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newLiquidationIncentiveMantissa", + "type": "uint256" + } + ], + "name": "_setLiquidationIncentive", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "newOracle", + "type": "address" + } + ], + "name": "_setPriceOracle", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enforce", + "type": "bool" + } + ], + "name": "_setWhitelistEnforcement", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "suppliers", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "statuses", + "type": "bool[]" + } + ], + "name": "_setWhitelistStatuses", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "accountAssets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "adminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "allBorrowers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "allMarkets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "borrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "borrowCapForCollateral", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "borrowCapGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "borrowCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "accountBorrowsNew", + "type": "uint256" + } + ], + "name": "borrowWithinLimits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "borrowingAgainstCollateralBlacklist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "cTokensByUnderlying", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "checkMembership", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "closeFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enforceWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "cTokens", + "type": "address[]" + } + ], + "name": "enterMarkets", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenAddress", + "type": "address" + } + ], + "name": "exitMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAccountLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAssetsIn", + "outputs": [ + { + "internalType": "contract ICErc20[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "name": "getHypotheticalAccountLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "bool", + "name": "isBorrow", + "type": "bool" + } + ], + "name": "getMaxRedeemOrBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicAdminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isComptroller", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "isDeprecated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "liquidateBorrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "actualRepayAmount", + "type": "uint256" + } + ], + "name": "liquidateCalculateSeizeTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "liquidationIncentiveMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "markets", + "outputs": [ + { + "internalType": "bool", + "name": "isListed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "name": "mintAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "actualMintAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "name": "mintVerify", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "nonAccruingRewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeemAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeemVerify", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "name": "repayBorrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "rewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "name": "seizeAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "seizeGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "suppliers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "supplyCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "transferTokens", + "type": "uint256" + } + ], + "name": "transferAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "transferGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "whitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x371884acf22039bbab1c0a96972c2ffed00cac51a38fc5d72c86b57f0d9198ad", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x8b2B6a9dC8Cd73309Cef8d64920831d4C73F43a7", + "transactionIndex": 1, + "gasUsed": "4718481", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xf366e66ee6129b1b7a0c2f8c8ad14f4c6e067da468c72bb097dca0eda379033f", + "transactionHash": "0x371884acf22039bbab1c0a96972c2ffed00cac51a38fc5d72c86b57f0d9198ad", + "logs": [], + "blockNumber": 2067091, + "cumulativeGasUsed": "4765394", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "rewardsDistributor", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "AddedRewardsDistributor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MarketEntered", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MarketExited", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MarketListed", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldCloseFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewCloseFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "oldCollateralFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newCollateralFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewCollateralFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldLiquidationIncentiveMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newLiquidationIncentiveMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewLiquidationIncentive", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "oldPriceOracle", + "type": "address", + "indexed": false + }, + { + "internalType": "contract BasePriceOracle", + "name": "newPriceOracle", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPriceOracle", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enforce", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "WhitelistEnforcementChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_addRewardsDistributor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_afterNonReentrant" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_beforeNonReentrant" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "becomeImplData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_deployMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setCloseFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newCollateralFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setCollateralFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newLiquidationIncentiveMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLiquidationIncentive", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "newOracle", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPriceOracle", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enforce", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setWhitelistEnforcement", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "suppliers", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "statuses", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setWhitelistStatuses", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "accountAssets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allBorrowers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allMarkets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowCapForCollateral", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowCapGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "accountBorrowsNew", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowWithinLimits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowingAgainstCollateralBlacklist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "cTokensByUnderlying", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "checkMembership", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "closeFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "enforceWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "cTokens", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "enterMarkets", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "exitMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAccountLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAssetsIn", + "outputs": [ + { + "internalType": "contract ICErc20[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getHypotheticalAccountLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "bool", + "name": "isBorrow", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getMaxRedeemOrBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "isComptroller", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isDeprecated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "actualRepayAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "liquidateCalculateSeizeTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidationIncentiveMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "markets", + "outputs": [ + { + "internalType": "bool", + "name": "isListed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mintAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "actualMintAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mintVerify" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "nonAccruingRewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "oracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemVerify" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "rewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seizeAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "seizeGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "suppliers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supplyCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "transferTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "transferGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "whitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_addRewardsDistributor(address)": { + "details": "Admin function to add a RewardsDistributor contract", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_afterNonReentrant()": { + "details": "Called by cTokens after a non-reentrant function for pool-wide reentrancy prevention. Prevents pool-wide/cross-asset reentrancy exploits like AMP on Cream." + }, + "_beforeNonReentrant()": { + "details": "Called by cTokens before a non-reentrant function for pool-wide reentrancy prevention. Prevents pool-wide/cross-asset reentrancy exploits like AMP on Cream." + }, + "_deployMarket(uint8,bytes,bytes,uint256)": { + "details": "Admin function to deploy cToken, set isListed, and add support for the market and set the collateral factor", + "returns": { + "_0": "uint 0=success, otherwise a failure. (See enum Error for details)" + } + }, + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_setCloseFactor(uint256)": { + "details": "Admin function to set closeFactor", + "params": { + "newCloseFactorMantissa": "New close factor, scaled by 1e18" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See ErrorReporter for details)" + } + }, + "_setCollateralFactor(address,uint256)": { + "details": "Admin function to set per-market collateralFactor", + "params": { + "cToken": "The market to set the factor on", + "newCollateralFactorMantissa": "The new collateral factor, scaled by 1e18" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See ErrorReporter for details)" + } + }, + "_setLiquidationIncentive(uint256)": { + "details": "Admin function to set liquidationIncentive", + "params": { + "newLiquidationIncentiveMantissa": "New liquidationIncentive scaled by 1e18" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See ErrorReporter for details)" + } + }, + "_setPriceOracle(address)": { + "details": "Admin function to set a new price oracle", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_setWhitelistEnforcement(bool)": { + "details": "Admin function to set a new whitelist enforcement boolean", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_setWhitelistStatuses(address[],bool[])": { + "details": "Admin function to set the whitelist `statuses` for `suppliers`", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrowAllowed(address,address,uint256)": { + "params": { + "borrowAmount": "The amount of underlying the account would borrow", + "borrower": "The account which would borrow the asset", + "cToken": "The market to verify the borrow against" + }, + "returns": { + "_0": "0 if the borrow is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + }, + "borrowWithinLimits(address,uint256)": { + "params": { + "accountBorrowsNew": "The user's new borrow balance of the underlying asset", + "cToken": "Asset whose underlying is being borrowed" + } + }, + "checkMembership(address,address)": { + "params": { + "account": "The address of the account to check", + "cToken": "The cToken to check" + }, + "returns": { + "_0": "True if the account is in the asset, otherwise false." + } + }, + "enterMarkets(address[])": { + "params": { + "cTokens": "The list of addresses of the cToken markets to be enabled" + }, + "returns": { + "_0": "Success indicator for whether each corresponding market was entered" + } + }, + "exitMarket(address)": { + "details": "Sender must not have an outstanding borrow balance in the asset, or be providing necessary collateral for an outstanding borrow.", + "params": { + "cTokenAddress": "The address of the asset to be removed" + }, + "returns": { + "_0": "Whether or not the account successfully exited the market" + } + }, + "getAssetsIn(address)": { + "params": { + "account": "The address of the account to pull assets for" + }, + "returns": { + "_0": "A dynamic list with the assets the account has entered" + } + }, + "getHypotheticalAccountLiquidity(address,address,uint256,uint256)": { + "params": { + "account": "The account to determine liquidity for", + "borrowAmount": "The amount of underlying to hypothetically borrow", + "cTokenModify": "The market to hypothetically redeem/borrow in", + "redeemTokens": "The number of tokens to hypothetically redeem" + }, + "returns": { + "_0": "(possible error code (semi-opaque), hypothetical account liquidity in excess of collateral requirements, hypothetical account shortfall below collateral requirements)" + } + }, + "isDeprecated(address)": { + "details": "All borrows in a deprecated cToken market can be immediately liquidated", + "params": { + "cToken": "The market to check if deprecated" + } + }, + "liquidateBorrowAllowed(address,address,address,address,uint256)": { + "params": { + "borrower": "The address of the borrower", + "cTokenBorrowed": "Asset which was borrowed by the borrower", + "cTokenCollateral": "Asset which was used as collateral and will be seized", + "liquidator": "The address repaying the borrow and seizing the collateral", + "repayAmount": "The amount of underlying being repaid" + } + }, + "liquidateCalculateSeizeTokens(address,address,uint256)": { + "details": "Used in liquidation (called in cToken.liquidateBorrowFresh)", + "params": { + "actualRepayAmount": "The amount of cTokenBorrowed underlying to convert into cTokenCollateral tokens", + "cTokenBorrowed": "The address of the borrowed cToken", + "cTokenCollateral": "The address of the collateral cToken" + }, + "returns": { + "_0": "(errorCode, number of cTokenCollateral tokens to be seized in a liquidation)" + } + }, + "mintAllowed(address,address,uint256)": { + "params": { + "cTokenAddress": "The market to verify the mint against", + "mintAmount": "The amount of underlying being supplied to the market in exchange for tokens", + "minter": "The account which would get the minted tokens" + }, + "returns": { + "_0": "0 if the mint is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + }, + "mintVerify(address,address,uint256,uint256)": { + "params": { + "actualMintAmount": "The amount of the underlying asset being minted", + "cToken": "Asset being minted", + "mintTokens": "The number of tokens being minted", + "minter": "The address minting the tokens" + } + }, + "redeemAllowed(address,address,uint256)": { + "params": { + "cToken": "The market to verify the redeem against", + "redeemTokens": "The number of cTokens to exchange for the underlying asset in the market", + "redeemer": "The account which would redeem the tokens" + }, + "returns": { + "_0": "0 if the redeem is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + }, + "redeemVerify(address,address,uint256,uint256)": { + "params": { + "cToken": "Asset being redeemed", + "redeemAmount": "The amount of the underlying asset being redeemed", + "redeemTokens": "The number of tokens being redeemed", + "redeemer": "The address redeeming the tokens" + } + }, + "repayBorrowAllowed(address,address,address,uint256)": { + "params": { + "borrower": "The account which would borrowed the asset", + "cToken": "The market to verify the repay against", + "payer": "The account which would repay the asset", + "repayAmount": "The amount of the underlying asset the account would repay" + }, + "returns": { + "_0": "0 if the repay is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + }, + "seizeAllowed(address,address,address,address,uint256)": { + "params": { + "borrower": "The address of the borrower", + "cTokenBorrowed": "Asset which was borrowed by the borrower", + "cTokenCollateral": "Asset which was used as collateral and will be seized", + "liquidator": "The address repaying the borrow and seizing the collateral", + "seizeTokens": "The number of collateral tokens to seize" + } + }, + "transferAllowed(address,address,address,uint256)": { + "params": { + "cToken": "The market to verify the transfer against", + "dst": "The account which receives the tokens", + "src": "The account which sources the tokens", + "transferTokens": "The number of cTokens to transfer" + }, + "returns": { + "_0": "0 if the transfer is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_addRewardsDistributor(address)": { + "notice": "Add a RewardsDistributor contracts." + }, + "_deployMarket(uint8,bytes,bytes,uint256)": { + "notice": "Deploy cToken, add the market to the markets mapping, and set it as listed and set the collateral factor" + }, + "_setCloseFactor(uint256)": { + "notice": "Sets the closeFactor used when liquidating borrows" + }, + "_setCollateralFactor(address,uint256)": { + "notice": "Sets the collateralFactor for a market" + }, + "_setLiquidationIncentive(uint256)": { + "notice": "Sets liquidationIncentive" + }, + "_setPriceOracle(address)": { + "notice": "Sets a new price oracle for the comptroller" + }, + "_setWhitelistEnforcement(bool)": { + "notice": "Sets the whitelist enforcement for the comptroller" + }, + "_setWhitelistStatuses(address[],bool[])": { + "notice": "Sets the whitelist `statuses` for `suppliers`" + }, + "accountAssets(address,uint256)": { + "notice": "Per-account mapping of \"assets you are in\", capped by maxAssets" + }, + "admin()": { + "notice": "Administrator for this contract" + }, + "adminHasRights()": { + "notice": "Whether or not the admin has admin rights" + }, + "allBorrowers(uint256)": { + "notice": "A list of all borrowers who have entered markets" + }, + "allMarkets(uint256)": { + "notice": "A list of all markets" + }, + "borrowAllowed(address,address,uint256)": { + "notice": "Checks if the account should be allowed to borrow the underlying asset of the given market" + }, + "borrowCapGuardian()": { + "notice": "The borrowCapGuardian can set borrowCaps to any number for any market. Lowering the borrow cap could disable borrowing on the given market." + }, + "borrowCaps(address)": { + "notice": "Borrow caps enforced by borrowAllowed for each cToken address. Defaults to zero which corresponds to unlimited borrowing." + }, + "borrowWithinLimits(address,uint256)": { + "notice": "Checks if the account should be allowed to borrow the underlying asset of the given market" + }, + "cTokensByUnderlying(address)": { + "notice": "All cTokens addresses mapped by their underlying token addresses" + }, + "checkMembership(address,address)": { + "notice": "Returns whether the given account is entered in the given asset" + }, + "closeFactorMantissa()": { + "notice": "Multiplier used to calculate the maximum repayAmount when liquidating a borrow" + }, + "enforceWhitelist()": { + "notice": "Whether or not the supplier whitelist is enforced" + }, + "enterMarkets(address[])": { + "notice": "Add assets to be included in account liquidity calculation" + }, + "exitMarket(address)": { + "notice": "Removes asset from sender's account liquidity calculation" + }, + "getAssetsIn(address)": { + "notice": "Returns the assets an account has entered" + }, + "getHypotheticalAccountLiquidity(address,address,uint256,uint256)": { + "notice": "Determine what the account liquidity would be if the given amounts were redeemed/borrowed" + }, + "ionicAdminHasRights()": { + "notice": "Whether or not the Ionic admin has admin rights" + }, + "isComptroller()": { + "notice": "Indicator that this is a Comptroller contract (for inspection)" + }, + "isDeprecated(address)": { + "notice": "Returns true if the given cToken market has been deprecated" + }, + "liquidateBorrowAllowed(address,address,address,address,uint256)": { + "notice": "Checks if the liquidation should be allowed to occur" + }, + "liquidateCalculateSeizeTokens(address,address,uint256)": { + "notice": "Calculate number of tokens of collateral asset to seize given an underlying amount" + }, + "liquidationIncentiveMantissa()": { + "notice": "Multiplier representing the discount on collateral that a liquidator receives" + }, + "markets(address)": { + "notice": "Official mapping of cTokens -> Market metadata" + }, + "mintAllowed(address,address,uint256)": { + "notice": "Checks if the account should be allowed to mint tokens in the given market" + }, + "mintVerify(address,address,uint256,uint256)": { + "notice": "Validates mint and reverts on rejection. May emit logs." + }, + "nonAccruingRewardsDistributors(uint256)": { + "notice": "RewardsDistributor to list for claiming, but not to notify of flywheel changes." + }, + "oracle()": { + "notice": "Oracle which gives the price of any given asset" + }, + "pauseGuardian()": { + "notice": "The Pause Guardian can pause certain actions as a safety mechanism. Actions which allow users to remove their own assets cannot be paused. Liquidation / seizing / transfer can only be paused globally, not by market." + }, + "pendingAdmin()": { + "notice": "Pending administrator for this contract" + }, + "redeemAllowed(address,address,uint256)": { + "notice": "Checks if the account should be allowed to redeem tokens in the given market" + }, + "redeemVerify(address,address,uint256,uint256)": { + "notice": "Validates redeem and reverts on rejection. May emit logs." + }, + "repayBorrowAllowed(address,address,address,uint256)": { + "notice": "Checks if the account should be allowed to repay a borrow in the given market" + }, + "rewardsDistributors(uint256)": { + "notice": "RewardsDistributor contracts to notify of flywheel changes." + }, + "seizeAllowed(address,address,address,address,uint256)": { + "notice": "Checks if the seizing of assets should be allowed to occur" + }, + "supplyCaps(address)": { + "notice": "Supply caps enforced by mintAllowed for each cToken address. Defaults to zero which corresponds to unlimited supplying." + }, + "transferAllowed(address,address,address,uint256)": { + "notice": "Checks if the account should be allowed to transfer tokens in the given market" + }, + "whitelist(address)": { + "notice": "Maps addresses to booleans indicating if they are allowed to supply assets (i.e., mint cTokens)" + }, + "whitelistArray(uint256)": { + "notice": "An array of all whitelisted accounts" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/Comptroller.sol": "Comptroller" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x84edc2b901bfc47df6728100716d0e23de7f095543fcc4b919ae8f5f049a2d08", + "urls": [ + "bzz-raw://dc2a5d197584bf0a6ebe3bbad4a6c97f448cef027d3fc397ce2453b1e87826fa", + "dweb:/ipfs/QmdL2TZVb8W1nM3VMe2eUoXgzUjSb8FBvxmbCPWPWndVTU" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040526002805461ffff60a01b191661010160a01b17905534801561002557600080fd5b506153fd806100356000396000f3fe608060405234801561001057600080fd5b50600436106103c45760003560e01c80637dc0d1d0116101ff578063c488847b1161011a578063da3d454c116100ad578063e87554461161007c578063e8755446146109a6578063eabe7d91146109af578063ede4edd0146109c2578063f851a440146109d557600080fd5b8063da3d454c14610959578063dce154491461096c578063e4028eee1461097f578063e6653f3d1461099257600080fd5b8063c91a424f116100e9578063c91a424f1461090c578063cf6bfd2d1461091f578063d02f735114610933578063d251fefc1461094657600080fd5b8063c488847b146108b6578063c6c5b0dd146108de578063c8c9c975146108f1578063c90c20b11461090457600080fd5b80639b19251a11610192578063b452ef6211610161578063b452ef621461085d578063b9b5b15314610870578063bdcdc25814610883578063c29982381461089657600080fd5b80639b19251a146107f9578063abfceffc1461081c578063ac0b0bb71461083c578063b09572101461085057600080fd5b8063929fe9a1116101ce578063929fe9a114610767578063940cd6f1146107a857806394543c15146107d3578063952adf5a146107e657600080fd5b80637dc0d1d0146106e757806387f76303146106fa57806389f8132e1461070e5780638e8f294b1461072357600080fd5b80634ada90af116102ef5780635ec88c79116102825780636d154ea5116102515780636d154ea51461067b578063731f0c2b1461069e5780637515bafa146106c1578063779b2294146106d457600080fd5b80635ec88c791461063a5780635fc7e71e1461064d578063632e5142146106605780636bd02b8a1461066857600080fd5b806351dff989116102be57806351dff989146105f957806352d84d1e1461060c57806355ee1fe11461061f5780635d72de621461063257600080fd5b80634ada90af146105975780634e79238f146105a05780634ef4c3e1146105d35780634fd42e17146105e657600080fd5b806324008a621161036757806331ff47fa1161033657806331ff47fa146105035780633c94786f1461052c57806341c728b9146105405780634a5844321461057757600080fd5b806324008a62146104b757806324a3d622146104ca57806326782247146104dd578063317b0b77146104f057600080fd5b806316dc15fe116103a357806316dc15fe146104285780631976828e1461044b5780631c819e431461045e57806321af45691461048c57600080fd5b80627e3dd2146103c957806302c3bcbb146103e65780630a755ec214610414575b600080fd5b6103d1600181565b60405190151581526020015b60405180910390f35b6104066103f4366004614bfd565b60186020526000908152604090205481565b6040519081526020016103dd565b6002546103d190600160a81b900460ff1681565b6103d1610436366004614bfd565b600d6020526000908152604090205460ff1681565b610406610459366004614c28565b6109e8565b6103d161046c366004614c73565b601d60209081526000928352604080842090915290825290205460ff1681565b60165461049f906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b6104066104c5366004614cac565b610bdb565b60135461049f906001600160a01b031681565b60025461049f906001600160a01b031681565b6104066104fe366004614cfd565b610c1d565b61049f610511366004614bfd565b600e602052600090815260409020546001600160a01b031681565b6013546103d190600160a01b900460ff1681565b61057561054e366004614d16565b50506001600160a01b03166000908152600d60205260409020805460ff1916600117905550565b005b610406610585366004614bfd565b60176020526000908152604090205481565b61040660055481565b6105b36105ae366004614d16565b610cf7565b6040805194855260208501939093529183015260608201526080016103dd565b6104066105e1366004614d5c565b610d3f565b6104066105f4366004614cfd565b610f97565b610575610607366004614d16565b611053565b61049f61061a366004614cfd565b6110e5565b61040661062d366004614bfd565b61110f565b61057561118f565b6105b3610648366004614bfd565b6111ec565b61040661065b366004614d9d565b61122f565b6105756113ef565b61049f610676366004614cfd565b61145d565b6103d1610689366004614bfd565b60156020526000908152604090205460ff1681565b6103d16106ac366004614bfd565b60146020526000908152604090205460ff1681565b61049f6106cf366004614cfd565b61146d565b6104066106e2366004614e01565b61147d565b60035461049f906001600160a01b031681565b6013546103d190600160b01b900460ff1681565b6107166115d8565b6040516103dd9190614e2d565b610750610731366004614bfd565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016103dd565b6103d1610775366004614c73565b6001600160a01b038082166000908152600860209081526040808320938616835260029093019052205460ff1692915050565b6104066107b6366004614c73565b601c60209081526000928352604080842090915290825290205481565b6103d16107e1366004614bfd565b611df2565b6104066107f4366004614e7b565b611f5c565b6103d1610807366004614bfd565b60106020526000908152604090205460ff1681565b61082f61082a366004614bfd565b611fda565b6040516103dd9190614e98565b6013546103d190600160b81b900460ff1681565b600f546103d19060ff1681565b61040661086b366004614f1b565b612050565b61040661087e366004614bfd565b61222e565b610406610891366004614cac565b612416565b6108a96108a4366004614fc2565b612499565b6040516103dd9190615087565b6108c96108c4366004614d5c565b612623565b604080519283526020830191909152016103dd565b61049f6108ec366004614cfd565b61294f565b6104066108ff366004615104565b61295f565b610575612c06565b60005461049f906001600160a01b031681565b6002546103d190600160a01b900460ff1681565b610406610941366004614d9d565b612cb0565b61049f610954366004614cfd565b612e37565b610406610967366004614d5c565b612e47565b61049f61097a366004614e01565b6132c7565b61040661098d366004614e01565b6132ff565b6013546103d190600160a81b900460ff1681565b61040660045481565b6104066109bd366004614d5c565b613489565b6104066109d0366004614bfd565b6134a6565b60015461049f906001600160a01b031681565b604051633af9e66960e01b81526001600160a01b0384811660048301526000918491839190831690633af9e66990602401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190615170565b90506000806000610a7b8988610a71576000610a73565b895b600080613a2f565b929550935090915060009050836014811115610a9957610a99615189565b14610ad85760405162461bcd60e51b815260206004820152600a602482015269216c697175696469747960b01b60448201526064015b60405180910390fd5b8015610aec57600095505050505050610bd4565b600087158015610b2657506001600160a01b038087166000908152600860209081526040808320938e16835260029093019052205460ff16155b15610b32575083610b54565b610b3d838a8a613e62565b905087158015610b4c57508085105b15610b545750835b6000896001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb89190615170565b905080821115610bc85780610bca565b815b9750505050505050505b9392505050565b6001600160a01b03841660009081526008602052604081205460ff16610c055760085b9050610c15565b610c0f8584613f7b565b60005b90505b949350505050565b6000610c27614023565b610c3d57610c3760016007614077565b92915050565b6040805160208082018352848252825190810190925266b1a2bc2ec50000808352815191929111610c7457610c1560056008614077565b6040805160208101909152670c7d713b49da000080825283511115610ca857610c9f60056008614077565b95945050505050565b600480549086905560408051828152602081018890527f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd991015b60405180910390a160005b9695505050505050565b600080600080600080600080610d0f8c8c8c8c613a2f565b9350935093509350836014811115610d2957610d29615189565b975091955093509150505b945094509450949050565b6001600160a01b03831660009081526014602052604081205460ff1615610d975760405162461bcd60e51b815260206004820152600c60248201526b085b5a5b9d0e9c185d5cd95960a21b6044820152606401610acf565b6001600160a01b03841660009081526008602052604090205460ff16610dc15760085b9050610bd4565b600f5460ff168015610dec57506001600160a01b03831660009081526010602052604090205460ff16155b15610df8576011610dba565b6001600160a01b0384166000908152601860205260409020548015801590610e3e57506001600160a01b03851660009081526020805260409020610e3c90856140f0565b155b15610f82576000856001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea79190615170565b9050600030604051637db121fd60e11b81526001600160a01b038981166004830152919091169063fb6243fa90602401602060405180830381865afa158015610ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f189190615170565b90506000828210610f2b57506000610f38565b610f3582846151b5565b90505b83610f4387836151cc565b10610f7e5760405162461bcd60e51b815260206004820152600b60248201526a021737570706c79206361760ac1b6044820152606401610acf565b5050505b610f8c8585614112565b600095945050505050565b6000610fa1614023565b610fb157610c376001600d614077565b60408051602080820183528482528251908101909252670de0b6b3a764000080835281519192911015610fea57610c156007600e614077565b60408051602081019091526714d1120d7b1600008082528351111561101557610c9f6007600e614077565b600580549086905560408051828152602081018890527faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec13169101610ce2565b3360009081526008602052604090205460ff1661109c5760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b6044820152606401610acf565b801580156110aa5750600082115b156110df5760405162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b6044820152606401610acf565b50505050565b600981815481106110f557600080fd5b6000918252602090912001546001600160a01b0316905081565b6000611119614023565b61112957610c3760016012614077565b600380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22910160405180910390a160009392505050565b3330146111cb5760405162461bcd60e51b815260206004820152600a602482015269085cd95b198818d85b1b60b21b6044820152606401610acf565b601a54610100900460ff166111ea57601a805461ffff19166101011790555b565b600080600080600080600080611206896000806000613a2f565b935093509350935083601481111561122057611220615189565b99929850909650945092505050565b6001600160a01b03851660009081526008602052604081205460ff16158061127057506001600160a01b03851660009081526008602052604090205460ff16155b1561127f5760085b9050610c9f565b6040516305eff7ef60e21b81526001600160a01b038481166004830152600091908816906317bfdfbc90602401602060405180830381865afa1580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed9190615170565b90506112f887611df2565b15611342578281101561133d5760405162461bcd60e51b815260206004820152600d60248201526c21626f72726f773e726570617960981b6044820152606401610acf565b6113e2565b600080611353866000806000613a2f565b9350505091506000601481111561136c5761136c615189565b82601481111561137e5761137e615189565b1461139f5781601481111561139557611395615189565b9350505050610c9f565b806113ab576003611395565b60006113c76040518060200160405280600454815250856141b4565b9050808611156113de576010945050505050610c9f565b5050505b5060009695505050505050565b3360009081526008602052604090205460ff1661144e5760405162461bcd60e51b815260206004820152601f60248201527f21436f6d7074726f6c6c65723a5f61667465724e6f6e5265656e7472616e74006044820152606401610acf565b601a805460ff19166001179055565b601b81815481106110f557600080fd5b600b81815481106110f557600080fd5b600080546040805163fdb25fb160e01b8152905183926001600160a01b03169163fdb25fb19160048083019260209291908290030181865afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb9190615170565b905080156115ce5760035460405163fc57d4df60e01b81526001600160a01b038681166004830152600092169063fc57d4df90602401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190615170565b90508061157457600c92505050610c37565b60008061158f604051806020016040528085815250876141cc565b909250905060008260038111156115a8576115a8615189565b146115bb57600a5b945050505050610c37565b838110156115ca5760126115b0565b5050505b6000949350505050565b60408051601e8082526103e082019092526060919081602082016103c0803683370190505091506394543c1560e01b82611611836151e4565b92508260ff168151811061162757611627615201565b6001600160e01b031990921660209283029190910190910152635a2977b160e11b82611652836151e4565b92508260ff168151811061166857611668615201565b6001600160e01b031990921660209283029190910190910152632aff3bff60e21b82611693836151e4565b92508260ff16815181106116a9576116a9615201565b6001600160e01b03199092166020928302919091019091015263929fe9a160e01b826116d4836151e4565b92508260ff16815181106116ea576116ea615201565b6001600160e01b0319909216602092830291909101909101526355ee1fe160e01b82611715836151e4565b92508260ff168151811061172b5761172b615201565b6001600160e01b03199092166020928302919091019091015263317b0b7760e01b82611756836151e4565b92508260ff168151811061176c5761176c615201565b6001600160e01b031990921660209283029190910190910152637201477760e11b82611797836151e4565b92508260ff16815181106117ad576117ad615201565b6001600160e01b031990921660209283029190910190910152634fd42e1760e01b826117d8836151e4565b92508260ff16815181106117ee576117ee615201565b6001600160e01b031990921660209283029190910190910152634a956fad60e11b82611819836151e4565b92508260ff168151811061182f5761182f615201565b6001600160e01b03199092166020928302919091019091015263c8c9c97560e01b8261185a836151e4565b92508260ff168151811061187057611870615201565b6001600160e01b03199092166020928302919091019091015263b9b5b15360e01b8261189b836151e4565b92508260ff16815181106118b1576118b1615201565b6001600160e01b031990921660209283029190910190910152634e79238f60e01b826118dc836151e4565b92508260ff16815181106118f2576118f2615201565b6001600160e01b031990921660209283029190910190910152630cbb414760e11b8261191d836151e4565b92508260ff168151811061193357611933615201565b6001600160e01b031990921660209283029190910190910152631853304760e31b8261195e836151e4565b92508260ff168151811061197457611974615201565b6001600160e01b031990921660209283029190910190910152630ede4edd60e41b8261199f836151e4565b92508260ff16815181106119b5576119b5615201565b6001600160e01b031990921660209283029190910190910152634ef4c3e160e01b826119e0836151e4565b92508260ff16815181106119f6576119f6615201565b6001600160e01b03199092166020928302919091019091015263eabe7d9160e01b82611a21836151e4565b92508260ff1681518110611a3757611a37615201565b6001600160e01b0319909216602092830291909101909101526351dff98960e01b82611a62836151e4565b92508260ff1681518110611a7857611a78615201565b6001600160e01b03199092166020928302919091019091015263368f515360e21b82611aa3836151e4565b92508260ff1681518110611ab957611ab9615201565b6001600160e01b031990921660209283029190910190910152631de6c8a560e21b82611ae4836151e4565b92508260ff1681518110611afa57611afa615201565b6001600160e01b031990921660209283029190910190910152631200453160e11b82611b25836151e4565b92508260ff1681518110611b3b57611b3b615201565b6001600160e01b031990921660209283029190910190910152632fe3f38f60e11b82611b66836151e4565b92508260ff1681518110611b7c57611b7c615201565b6001600160e01b03199092166020928302919091019091015263d02f735160e01b82611ba7836151e4565b92508260ff1681518110611bbd57611bbd615201565b6001600160e01b0319909216602092830291909101909101526317b9b84b60e31b82611be8836151e4565b92508260ff1681518110611bfe57611bfe615201565b6001600160e01b0319909216602092830291909101909101526341c728b960e01b82611c29836151e4565b92508260ff1681518110611c3f57611c3f615201565b6001600160e01b031990921660209283029190910190910152635ec88c7960e01b82611c6a836151e4565b92508260ff1681518110611c8057611c80615201565b6001600160e01b03199092166020928302919091019091015263c488847b60e01b82611cab836151e4565b92508260ff1681518110611cc157611cc1615201565b6001600160e01b03199092166020928302919091019091015263c90c20b160e01b82611cec836151e4565b92508260ff1681518110611d0257611d02615201565b6001600160e01b03199092166020928302919091019091015263319728a160e11b82611d2d836151e4565b92508260ff1681518110611d4357611d43615201565b6001600160e01b031990921660209283029190910190910152632eb96f3160e11b82611d6e836151e4565b92508260ff1681518110611d8457611d84615201565b6001600160e01b03199092166020928302919091019091015260ff811615611dee5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610acf565b5090565b6001600160a01b038116600090815260086020526040812060010154158015611e3857506001600160a01b03821660009081526015602052604090205460ff1615156001145b8015610c375750611f4c611f0e836001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea79190615170565b846001600160a01b0316638d02d9a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f099190615170565b61421f565b836001600160a01b031663c3bf11cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee5573d6000803e3d6000fd5b670de0b6b3a76400001492915050565b6000611f66614023565b611f7657610c3760016013614077565b600f5460ff1615158215151415611f8e576000610c37565b600f805460ff19168315159081179091556040519081527f84c7d948374a180eddab35d27d2f7a94167a1ff4e79467f1e89c061984190a1e906020015b60405180910390a16000610c37565b6001600160a01b038116600090815260076020908152604080832080548251818502810185019093528083526060949383018282801561204357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612025575b5093979650505050505050565b600061205a614023565b6120715761206a60016016614077565b9050610ced565b60028054600160a01b60ff60a01b1982168117909255600080546040516328f816b560e11b81529390920460ff169290916001600160a01b0316906351f02d6a906120c8908c908c908c908c908c90600401615240565b6020604051808303816000875af11580156120e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210b9190615270565b6002805460ff60a01b1916600160a01b851515021790559050600061212f82614255565b905060008054906101000a90046001600160a01b03166001600160a01b0316638aac2f0c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a69190615270565b604051635a89ef5160e01b81523060048201526001600160a01b039190911690635a89ef5190602401600060405180830381600087803b1580156121e957600080fd5b505af11580156121fd573d6000803e3d6000fd5b506000925061220a915050565b81146122165780612220565b61222082866132ff565b9a9950505050505050505050565b6000612238614023565b61226d5760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610acf565b816001600160a01b031663abc6d72d6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156122ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d1919061528d565b6123155760405162461bcd60e51b815260206004820152601560248201527410b4b9a932bbb0b93239a234b9ba3934b13aba37b960591b6044820152606401610acf565b60005b601954811015612397576019818154811061233557612335615201565b6000918252602090912001546001600160a01b03848116911614156123855760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b6044820152606401610acf565b8061238f816152aa565b915050612318565b50601980546001810182556000919091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319166001600160a01b0384169081179091556040519081527f98ef1187fb6fd2bc85f8996489877eb2b5428f9e9bdfc068c9ad6c2ea82eacc790602001611fcb565b601354600090600160b01b900460ff16156124665760405162461bcd60e51b815260206004820152601060248201526f085d1c985b9cd9995c8e9c185d5cd95960821b6044820152606401610acf565b600061247386868561449c565b90508015612482579050610c15565b61248d868686614563565b60009695505050505050565b60008054604051631beb2b9760e31b81526060926001600160a01b039092169163df595cb8916124de9130913391839190356001600160e01b031916906004016152c5565b602060405180830381865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f919061528d565b61255c5760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610acf565b815160008167ffffffffffffffff81111561257957612579614fac565b6040519080825280602002602001820160405280156125a2578160200160208202803683370190505b50905060005b828110156126195760008582815181106125c4576125c4615201565b602002602001015190506125d8813361460e565b60148111156125e9576125e9615189565b8383815181106125fb576125fb615201565b60209081029190910101525080612611816152aa565b9150506125a8565b509150505b919050565b60035460405163fc57d4df60e01b81526001600160a01b038581166004830152600092839283929091169063fc57d4df90602401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615170565b60035460405163fc57d4df60e01b81526001600160a01b0388811660048301529293506000929091169063fc57d4df90602401602060405180830381865afa1580156126e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270c9190615170565b9050811580612719575080155b1561272d57600c6000935093505050612947565b60008690506000816001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127969190615170565b905060006127b06040518060200160405280600081525090565b6040805160208101909152600081526040805160208101909152600081526000866001600160a01b0316636752e7026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561280e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128329190615170565b90506000876001600160a01b031663be99f1196040518163ffffffff1660e01b8152600401602060405180830381865afa158015612874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128989190615170565b905060006128db6128c760405180602001604052806005548152506040518060200160405280878152506147a9565b6040518060200160405280858152506147a9565b90506128f58160405180602001604052808e8152506147de565b955061291d60405180602001604052808c81525060405180602001604052808b8152506147de565b9450612929868661481d565b9350612935848f6141b4565b60009d509b5050505050505050505050505b935093915050565b601981815481106110f557600080fd5b6000612969614023565b61297957610bfe60016014614077565b60005b84811015612bfe57600086868381811061299857612998615201565b90506020020160208101906129ad9190614bfd565b90508484838181106129c1576129c1615201565b90506020020160208101906129d69190614e7b565b15612a8e576001600160a01b03811660009081526010602052604090205460ff16612a89576001600160a01b0381166000818152601060205260408120805460ff19166001908117909155601180548083018255928190527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890920180546001600160a01b03191690931790925554612a6f91906151b5565b6001600160a01b0382166000908152601260205260409020555b612beb565b6001600160a01b03811660009081526010602052604090205460ff1615612beb5760118054612abf906001906151b5565b81548110612acf57612acf615201565b60009182526020808320909101546001600160a01b0384811684526012909252604090922054601180549290931692918110612b0d57612b0d615201565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506011805480612b4c57612b4c6152f8565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038316825260129081905260408220546011805491939184908110612ba057612ba0615201565b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822094909455918416825260128352808220829055601090925220805460ff191690555b5080612bf6816152aa565b91505061297c565b506000610c12565b3360009081526008602052604090205460ff16612c655760405162461bcd60e51b815260206004820181905260248201527f21436f6d7074726f6c6c65723a5f6265666f72654e6f6e5265656e7472616e746044820152606401610acf565b601a5460ff16612ca45760405162461bcd60e51b815260206004820152600a602482015269085c99595b9d195c995960b21b6044820152606401610acf565b601a805460ff19169055565b601354600090600160b81b900460ff1615612cfd5760405162461bcd60e51b815260206004820152600d60248201526c085cd95a5e994e9c185d5cd959609a1b6044820152606401610acf565b6001600160a01b03861660009081526008602052604090205460ff161580612d3e57506001600160a01b03851660009081526008602052604090205460ff16155b15612d4a576008611278565b846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dac9190615270565b6001600160a01b0316866001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e179190615270565b6001600160a01b031614612e2c576002611278565b61248d868486614563565b601181815481106110f557600080fd5b6001600160a01b03831660009081526015602052604081205460ff1615612ea15760405162461bcd60e51b815260206004820152600e60248201526d08589bdc9c9bddce9c185d5cd95960921b6044820152606401610acf565b6001600160a01b03841660009081526008602052604090205460ff16612ec8576008610dba565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16612fb757336001600160a01b03851614612f3b5760405162461bcd60e51b815260206004820152600760248201526610b1ba37b5b2b760c91b6044820152606401610acf565b6000612f47338561460e565b90506000816014811115612f5d57612f5d615189565b14612f7c57806014811115612f7457612f74615189565b915050610bd4565b6001600160a01b038086166000908152600860209081526040808320938816835260029093019052205460ff16612fb557612fb561530e565b505b60035460405163fc57d4df60e01b81526001600160a01b0386811660048301529091169063fc57d4df90602401602060405180830381865afa158015613001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130259190615170565b61303057600c610dba565b600f5460ff16801561305b57506001600160a01b03831660009081526010602052604090205460ff16155b15613067576011610dba565b6001600160a01b03841660009081526017602052604090205480158015906130ae57506001600160a01b03851660009081526021602052604090206130ac90856140f0565b155b156131f2576000856001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131179190615170565b9050600030604051631d3965af60e11b81526001600160a01b0389811660048301529190911690633a72cb5e90602401602060405180830381865afa158015613164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131889190615170565b9050600082821061319b575060006131a8565b6131a582846151b5565b90505b836131b387836151cc565b106131ee5760405162461bcd60e51b815260206004820152600b60248201526a021626f72726f773a6361760ac1b6044820152606401610acf565b5050505b6131fc8585613f7b565b604051634e79238f60e01b81526001600160a01b03808616600483015286166024820152600060448201819052606482018590529081903090634e79238f90608401608060405180830381865afa15801561325b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327f9190615324565b9350505091506000601481111561329857613298615189565b82146132a857509150610bd49050565b80156132ba5760049350505050610bd4565b6000979650505050505050565b600760205281600052604060002081815481106132e357600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000613309614023565b6133205761331960016009614077565b9050610c37565b6001600160a01b0383166000908152600860205260409020805460ff166133555761334d6008600a614077565b915050610c37565b60408051602080820183528582528251908101909252670c7d713b49da000082529061338381835190511090565b1561339e576133946006600b614077565b9350505050610c37565b8415801590613418575060035460405163fc57d4df60e01b81526001600160a01b0388811660048301529091169063fc57d4df90602401602060405180830381865afa1580156133f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134169190615170565b155b1561342857613394600c80614077565b60018301805490869055604080516001600160a01b0389168152602081018390529081018790527f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc59060600160405180910390a16000979650505050505050565b60008061349785858561449c565b90508015610f82579050610bd4565b60008054604051631beb2b9760e31b81526001600160a01b039091169063df595cb8906134e8903090339082906001600160e01b0319883516906004016152c5565b602060405180830381865afa158015613505573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613529919061528d565b6135665760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610acf565b6001600160a01b03821660009081526008602052604090205460ff166135ce5760405162461bcd60e51b815260206004820152601760248201527f21436f6d7074726f6c6c65723a657869744d61726b65740000000000000000006044820152606401610acf565b6040516361bfb47160e11b81523360048201528290600090819081906001600160a01b0385169063c37f68e290602401608060405180830381865afa15801561361b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363f9190615324565b50925092509250826000146136845760405162461bcd60e51b815260206004820152600b60248201526a08595e1a5d13585c9ad95d60aa1b6044820152606401610acf565b801561369657610ced600b6003614077565b60006136a387338561449c565b905080156136c3576136b8600d600483614857565b979650505050505050565b6001600160a01b0387166000908152600860209081526040808320338452600281019092529091205460ff1661370157600098975050505050505050565b3360009081526002820160209081526040808320805460ff19169055600782528083208054825181850281018501909352808352919290919083018282801561377357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613755575b5050835193945083925060009150505b828110156137d8578b6001600160a01b03168482815181106137a7576137a7615201565b60200260200101516001600160a01b031614156137c6578091506137d8565b806137d0816152aa565b915050613783565b508181106137e8576137e861530e565b33600090815260076020526040902080548190613807906001906151b5565b8154811061381757613817615201565b9060005260206000200160009054906101000a90046001600160a01b031681838154811061384757613847615201565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080805480613885576138856152f8565b600082815260209020810160001990810180546001600160a01b031916905501905580546139dc57600b80546138bd906001906151b5565b815481106138cd576138cd615201565b6000918252602080832090910154338352600c909152604090912054600b80546001600160a01b0390931692909190811061390a5761390a615201565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b805480613949576139496152f8565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252600c908190526040822054600b80549193918490811061399457613994615201565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812093909355338352600c8252808320839055600a9091529020805460ff191690555b604080516001600160a01b038e1681523360208201527fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d910160405180910390a160009c9b505050505050505050505050565b600080600080613a3d614b19565b6001600160a01b03881615613ac15760035460405163fc57d4df60e01b81526001600160a01b038a811660048301529091169063fc57d4df90602401602060405180830381865afa158015613a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aba9190615170565b6101808201525b60005b6001600160a01b038a16600090815260076020526040902054811015613dfe576001600160a01b038a166000908152600760205260409020805482908110613b0e57613b0e615201565b60009182526020822001546001600160a01b039081168085526040516361bfb47160e11b8152918d1660048301529063c37f68e290602401608060405180830381865afa158015613b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b879190615324565b60a08701526080860152606085015290508015613bb557600e60008060009650965096509650505050610d34565b50604080516020808201835284516001600160a01b0390811660009081526008835284902060010154835260e08601929092528251908101835260a085015181526101008501526003548451925163fc57d4df60e01b81529282166004840152169063fc57d4df90602401602060405180830381865afa158015613c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c619190615170565b60c08301819052613c8257600c600080600095509550955095505050610d34565b604080516020810190915260c0830151815261012083015260e0820151610100830151613cbd91613cb2916147de565b8361012001516147de565b6101408301526000308351604051633c1f884b60e11b81526001600160a01b0391821660048201528c821660248201528b151560448201528d8216606482015291169063783f109690608401602060405180830381865afa158015613d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4a9190615170565b90506000613d6184610140015185606001516141b4565b905081811115613d6e5750805b8084602001818151613d8091906151cc565b905250505061012082015160808301516040840151613da09291906148cf565b604083015281516001600160a01b038a811691161415613dec57613dce8261014001518984604001516148cf565b60408301819052610120830151613de69189906148cf565b60408301525b80613df6816152aa565b915050613ac4565b50806040015181602001511115613e37576020810151604082015160009190613e2790826151b5565b6000945094509450945050610d34565b60008160200151600083602001518460400151613e5491906151b5565b945094509450945050610d34565b600083613e7157506000610bd4565b60035460405163fc57d4df60e01b81526001600160a01b038581166004830152600092169063fc57d4df90602401602060405180830381865afa158015613ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee09190615170565b905060008111613f1c5760405162461bcd60e51b8152602060048201526007602482015266216f7261636c6560c81b6044820152606401610acf565b82613f5e576001600160a01b038416600090815260086020526040902060010154670de0b6b3a7640000613f50838361535a565b613f5a9190615379565b9150505b80613f7186670de0b6b3a764000061535a565b610c9f9190615379565b60005b60195481101561401e5760198181548110613f9b57613f9b615201565b600091825260209091200154604051631cdc2c5d60e31b81526001600160a01b03858116600483015284811660248301529091169063e6e162e890604401600060405180830381600087803b158015613ff357600080fd5b505af1158015614007573d6000803e3d6000fd5b505050508080614016906152aa565b915050613f7e565b505050565b6001546000906001600160a01b0316331480156140495750600254600160a81b900460ff165b8061407257506000546001600160a01b0316331480156140725750600254600160a01b900460ff165b905090565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08360148111156140ac576140ac615189565b83601a8111156140be576140be615189565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610bd457610bd4615189565b6001600160a01b03811660009081526001830160205260408120541515610bd4565b60005b60195481101561401e576019818154811061413257614132615201565b60009182526020909120015460405162e48b0f60e51b81526001600160a01b038581166004830152848116602483015290911690631c9161e090604401600060405180830381600087803b15801561418957600080fd5b505af115801561419d573d6000803e3d6000fd5b5050505080806141ac906152aa565b915050614115565b6000806141c184846148f0565b9050610c1581614918565b6000806000806141dc8686614930565b909250905060008260038111156141f5576141f5615189565b146142065750915060009050614218565b600061421182614918565b9350935050505b9250929050565b6000610bd48383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b8152506149ac565b600061425f614023565b61426f57610c3760016016614077565b6001600160a01b03821660009081526008602052604090205460ff161561429c57610c3760096015614077565b306001600160a01b0316826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143089190615270565b6001600160a01b03161461434d5760405162461bcd60e51b815260206004820152600c60248201526b10b1b7b6b83a3937b63632b960a11b6044820152606401610acf565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561438d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143b19190615270565b6001600160a01b038082166000908152600e602052604090205491925016156143e057610bd460096015614077565b6001600160a01b038381166000818152600860209081526040808320805460ff1916600190811782558082018590556009805491820190557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b031990811687179091559587168452600e835292819020805490951684179094559251918252917fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f910160405180910390a16000610c15565b6001600160a01b03831660009081526008602052604081205460ff166144c3576008610dba565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff166144fb576000610dba565b60008061450b8587866000613a2f565b9350505091506000601481111561452457614524615189565b82601481111561453657614536615189565b146145565781601481111561454d5761454d615189565b92505050610bd4565b801561248d57600461454d565b60005b6019548110156110df576019818154811061458357614583615201565b600091825260209091200154604051634e081c9560e01b81526001600160a01b0386811660048301528581166024830152848116604483015290911690634e081c9590606401600060405180830381600087803b1580156145e357600080fd5b505af11580156145f7573d6000803e3d6000fd5b505050508080614606906152aa565b915050614566565b6001600160a01b0382166000908152600860205260408120805460ff16614639576008915050610c37565b6001600160a01b038316600090815260028201602052604090205460ff1615156001141561466b576000915050610c37565b6001600160a01b03838116600081815260028401602090815260408083208054600160ff199091168117909155600783528184208054918201815584528284200180546001600160a01b031916958a1695909517909455918152600a909152205460ff1661475c57600b8054600180820183557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180546001600160a01b0319166001600160a01b0387169081179091556000908152600a60205260409020805460ff191682179055905461474291906151b5565b6001600160a01b0384166000908152600c60205260409020555b604080516001600160a01b038087168252851660208201527f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5910160405180910390a15060009392505050565b60408051602081019091526000815260405180602001604052806147d58560000151856000015161421f565b90529392505050565b6040805160208101909152600081526040518060200160405280670de0b6b3a7640000614813866000015186600001516149e6565b6147d59190615379565b60408051602081019091526000815260405180602001604052806147d56148508660000151670de0b6b3a76400006149e6565b8551614a28565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601481111561488c5761488c615189565b84601a81111561489e5761489e615189565b604080519283526020830191909152810184905260600160405180910390a1836014811115610c1557610c15615189565b6000806148dc85856148f0565b9050610c9f6148ea82614918565b8461421f565b60408051602081019091526000815260405180602001604052806147d58560000151856149e6565b8051600090610c3790670de0b6b3a764000090615379565b60006149486040518060200160405280600081525090565b600080614959866000015186614a5b565b9092509050600082600381111561497257614972615189565b1461499157506040805160208101909152600081529092509050614218565b60408051602081019091529081526000969095509350505050565b6000806149b984866151cc565b905082858210156149dd5760405162461bcd60e51b8152600401610acf919061539b565b50949350505050565b6000610bd483836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250614a9a565b6000610bd483836040518060400160405280600e81526020016d646976696465206279207a65726f60901b815250614aed565b60008083614a6e57506000905080614218565b83830283614a7c8683615379565b14614a8f57600260009250925050614218565b600092509050614218565b6000831580614aa7575082155b15614ab457506000610bd4565b6000614ac0848661535a565b905083614acd8683615379565b1483906149dd5760405162461bcd60e51b8152600401610acf919061539b565b60008183614b0e5760405162461bcd60e51b8152600401610acf919061539b565b50610c158385615379565b604051806101a0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001614b756040518060200160405280600081525090565b8152602001614b906040518060200160405280600081525090565b8152602001614bab6040518060200160405280600081525090565b8152602001614bc66040518060200160405280600081525090565b815260200160008152602001600081525090565b6001600160a01b0381168114614bef57600080fd5b50565b803561261e81614bda565b600060208284031215614c0f57600080fd5b8135610bd481614bda565b8015158114614bef57600080fd5b600080600060608486031215614c3d57600080fd5b8335614c4881614bda565b92506020840135614c5881614bda565b91506040840135614c6881614c1a565b809150509250925092565b60008060408385031215614c8657600080fd5b8235614c9181614bda565b91506020830135614ca181614bda565b809150509250929050565b60008060008060808587031215614cc257600080fd5b8435614ccd81614bda565b93506020850135614cdd81614bda565b92506040850135614ced81614bda565b9396929550929360600135925050565b600060208284031215614d0f57600080fd5b5035919050565b60008060008060808587031215614d2c57600080fd5b8435614d3781614bda565b93506020850135614d4781614bda565b93969395505050506040820135916060013590565b600080600060608486031215614d7157600080fd5b8335614d7c81614bda565b92506020840135614d8c81614bda565b929592945050506040919091013590565b600080600080600060a08688031215614db557600080fd5b8535614dc081614bda565b94506020860135614dd081614bda565b93506040860135614de081614bda565b92506060860135614df081614bda565b949793965091946080013592915050565b60008060408385031215614e1457600080fd5b8235614e1f81614bda565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b81811015614e6f5783516001600160e01b03191683529284019291840191600101614e49565b50909695505050505050565b600060208284031215614e8d57600080fd5b8135610bd481614c1a565b6020808252825182820181905260009190848201906040850190845b81811015614e6f5783516001600160a01b031683529284019291840191600101614eb4565b60008083601f840112614eeb57600080fd5b50813567ffffffffffffffff811115614f0357600080fd5b60208301915083602082850101111561421857600080fd5b60008060008060008060808789031215614f3457600080fd5b863560ff81168114614f4557600080fd5b9550602087013567ffffffffffffffff80821115614f6257600080fd5b614f6e8a838b01614ed9565b90975095506040890135915080821115614f8757600080fd5b50614f9489828a01614ed9565b979a9699509497949695606090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215614fd557600080fd5b823567ffffffffffffffff80821115614fed57600080fd5b818501915085601f83011261500157600080fd5b81358181111561501357615013614fac565b8060051b604051601f19603f8301168101818110858211171561503857615038614fac565b60405291825284820192508381018501918883111561505657600080fd5b938501935b8285101561507b5761506c85614bf2565b8452938501939285019261505b565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614e6f578351835292840192918401916001016150a3565b60008083601f8401126150d157600080fd5b50813567ffffffffffffffff8111156150e957600080fd5b6020830191508360208260051b850101111561421857600080fd5b6000806000806040858703121561511a57600080fd5b843567ffffffffffffffff8082111561513257600080fd5b61513e888389016150bf565b9096509450602087013591508082111561515757600080fd5b50615164878288016150bf565b95989497509550505050565b60006020828403121561518257600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156151c7576151c761519f565b500390565b600082198211156151df576151df61519f565b500190565b600060ff8216806151f7576151f761519f565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60ff8616815260606020820152600061525d606083018688615217565b828103604084015261507b818587615217565b60006020828403121561528257600080fd5b8151610bd481614bda565b60006020828403121561529f57600080fd5b8151610bd481614c1a565b60006000198214156152be576152be61519f565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b6000806000806080858703121561533a57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60008160001904831182151516156153745761537461519f565b500290565b60008261539657634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b818110156153c8578581018301518582016040015282016153ac565b818111156153da576000604083870101525b50601f01601f191692909201604001939250505056fea164736f6c634300080a000a", + "sourceMap": "987:50468:14:-:0;;;622:38:17;;;-1:-1:-1;;;;732:33:17;-1:-1:-1;;;732:33:17;;;987:50468:14;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106103c45760003560e01c80637dc0d1d0116101ff578063c488847b1161011a578063da3d454c116100ad578063e87554461161007c578063e8755446146109a6578063eabe7d91146109af578063ede4edd0146109c2578063f851a440146109d557600080fd5b8063da3d454c14610959578063dce154491461096c578063e4028eee1461097f578063e6653f3d1461099257600080fd5b8063c91a424f116100e9578063c91a424f1461090c578063cf6bfd2d1461091f578063d02f735114610933578063d251fefc1461094657600080fd5b8063c488847b146108b6578063c6c5b0dd146108de578063c8c9c975146108f1578063c90c20b11461090457600080fd5b80639b19251a11610192578063b452ef6211610161578063b452ef621461085d578063b9b5b15314610870578063bdcdc25814610883578063c29982381461089657600080fd5b80639b19251a146107f9578063abfceffc1461081c578063ac0b0bb71461083c578063b09572101461085057600080fd5b8063929fe9a1116101ce578063929fe9a114610767578063940cd6f1146107a857806394543c15146107d3578063952adf5a146107e657600080fd5b80637dc0d1d0146106e757806387f76303146106fa57806389f8132e1461070e5780638e8f294b1461072357600080fd5b80634ada90af116102ef5780635ec88c79116102825780636d154ea5116102515780636d154ea51461067b578063731f0c2b1461069e5780637515bafa146106c1578063779b2294146106d457600080fd5b80635ec88c791461063a5780635fc7e71e1461064d578063632e5142146106605780636bd02b8a1461066857600080fd5b806351dff989116102be57806351dff989146105f957806352d84d1e1461060c57806355ee1fe11461061f5780635d72de621461063257600080fd5b80634ada90af146105975780634e79238f146105a05780634ef4c3e1146105d35780634fd42e17146105e657600080fd5b806324008a621161036757806331ff47fa1161033657806331ff47fa146105035780633c94786f1461052c57806341c728b9146105405780634a5844321461057757600080fd5b806324008a62146104b757806324a3d622146104ca57806326782247146104dd578063317b0b77146104f057600080fd5b806316dc15fe116103a357806316dc15fe146104285780631976828e1461044b5780631c819e431461045e57806321af45691461048c57600080fd5b80627e3dd2146103c957806302c3bcbb146103e65780630a755ec214610414575b600080fd5b6103d1600181565b60405190151581526020015b60405180910390f35b6104066103f4366004614bfd565b60186020526000908152604090205481565b6040519081526020016103dd565b6002546103d190600160a81b900460ff1681565b6103d1610436366004614bfd565b600d6020526000908152604090205460ff1681565b610406610459366004614c28565b6109e8565b6103d161046c366004614c73565b601d60209081526000928352604080842090915290825290205460ff1681565b60165461049f906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b6104066104c5366004614cac565b610bdb565b60135461049f906001600160a01b031681565b60025461049f906001600160a01b031681565b6104066104fe366004614cfd565b610c1d565b61049f610511366004614bfd565b600e602052600090815260409020546001600160a01b031681565b6013546103d190600160a01b900460ff1681565b61057561054e366004614d16565b50506001600160a01b03166000908152600d60205260409020805460ff1916600117905550565b005b610406610585366004614bfd565b60176020526000908152604090205481565b61040660055481565b6105b36105ae366004614d16565b610cf7565b6040805194855260208501939093529183015260608201526080016103dd565b6104066105e1366004614d5c565b610d3f565b6104066105f4366004614cfd565b610f97565b610575610607366004614d16565b611053565b61049f61061a366004614cfd565b6110e5565b61040661062d366004614bfd565b61110f565b61057561118f565b6105b3610648366004614bfd565b6111ec565b61040661065b366004614d9d565b61122f565b6105756113ef565b61049f610676366004614cfd565b61145d565b6103d1610689366004614bfd565b60156020526000908152604090205460ff1681565b6103d16106ac366004614bfd565b60146020526000908152604090205460ff1681565b61049f6106cf366004614cfd565b61146d565b6104066106e2366004614e01565b61147d565b60035461049f906001600160a01b031681565b6013546103d190600160b01b900460ff1681565b6107166115d8565b6040516103dd9190614e2d565b610750610731366004614bfd565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016103dd565b6103d1610775366004614c73565b6001600160a01b038082166000908152600860209081526040808320938616835260029093019052205460ff1692915050565b6104066107b6366004614c73565b601c60209081526000928352604080842090915290825290205481565b6103d16107e1366004614bfd565b611df2565b6104066107f4366004614e7b565b611f5c565b6103d1610807366004614bfd565b60106020526000908152604090205460ff1681565b61082f61082a366004614bfd565b611fda565b6040516103dd9190614e98565b6013546103d190600160b81b900460ff1681565b600f546103d19060ff1681565b61040661086b366004614f1b565b612050565b61040661087e366004614bfd565b61222e565b610406610891366004614cac565b612416565b6108a96108a4366004614fc2565b612499565b6040516103dd9190615087565b6108c96108c4366004614d5c565b612623565b604080519283526020830191909152016103dd565b61049f6108ec366004614cfd565b61294f565b6104066108ff366004615104565b61295f565b610575612c06565b60005461049f906001600160a01b031681565b6002546103d190600160a01b900460ff1681565b610406610941366004614d9d565b612cb0565b61049f610954366004614cfd565b612e37565b610406610967366004614d5c565b612e47565b61049f61097a366004614e01565b6132c7565b61040661098d366004614e01565b6132ff565b6013546103d190600160a81b900460ff1681565b61040660045481565b6104066109bd366004614d5c565b613489565b6104066109d0366004614bfd565b6134a6565b60015461049f906001600160a01b031681565b604051633af9e66960e01b81526001600160a01b0384811660048301526000918491839190831690633af9e66990602401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190615170565b90506000806000610a7b8988610a71576000610a73565b895b600080613a2f565b929550935090915060009050836014811115610a9957610a99615189565b14610ad85760405162461bcd60e51b815260206004820152600a602482015269216c697175696469747960b01b60448201526064015b60405180910390fd5b8015610aec57600095505050505050610bd4565b600087158015610b2657506001600160a01b038087166000908152600860209081526040808320938e16835260029093019052205460ff16155b15610b32575083610b54565b610b3d838a8a613e62565b905087158015610b4c57508085105b15610b545750835b6000896001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb89190615170565b905080821115610bc85780610bca565b815b9750505050505050505b9392505050565b6001600160a01b03841660009081526008602052604081205460ff16610c055760085b9050610c15565b610c0f8584613f7b565b60005b90505b949350505050565b6000610c27614023565b610c3d57610c3760016007614077565b92915050565b6040805160208082018352848252825190810190925266b1a2bc2ec50000808352815191929111610c7457610c1560056008614077565b6040805160208101909152670c7d713b49da000080825283511115610ca857610c9f60056008614077565b95945050505050565b600480549086905560408051828152602081018890527f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd991015b60405180910390a160005b9695505050505050565b600080600080600080600080610d0f8c8c8c8c613a2f565b9350935093509350836014811115610d2957610d29615189565b975091955093509150505b945094509450949050565b6001600160a01b03831660009081526014602052604081205460ff1615610d975760405162461bcd60e51b815260206004820152600c60248201526b085b5a5b9d0e9c185d5cd95960a21b6044820152606401610acf565b6001600160a01b03841660009081526008602052604090205460ff16610dc15760085b9050610bd4565b600f5460ff168015610dec57506001600160a01b03831660009081526010602052604090205460ff16155b15610df8576011610dba565b6001600160a01b0384166000908152601860205260409020548015801590610e3e57506001600160a01b03851660009081526020805260409020610e3c90856140f0565b155b15610f82576000856001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea79190615170565b9050600030604051637db121fd60e11b81526001600160a01b038981166004830152919091169063fb6243fa90602401602060405180830381865afa158015610ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f189190615170565b90506000828210610f2b57506000610f38565b610f3582846151b5565b90505b83610f4387836151cc565b10610f7e5760405162461bcd60e51b815260206004820152600b60248201526a021737570706c79206361760ac1b6044820152606401610acf565b5050505b610f8c8585614112565b600095945050505050565b6000610fa1614023565b610fb157610c376001600d614077565b60408051602080820183528482528251908101909252670de0b6b3a764000080835281519192911015610fea57610c156007600e614077565b60408051602081019091526714d1120d7b1600008082528351111561101557610c9f6007600e614077565b600580549086905560408051828152602081018890527faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec13169101610ce2565b3360009081526008602052604090205460ff1661109c5760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b6044820152606401610acf565b801580156110aa5750600082115b156110df5760405162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b6044820152606401610acf565b50505050565b600981815481106110f557600080fd5b6000918252602090912001546001600160a01b0316905081565b6000611119614023565b61112957610c3760016012614077565b600380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22910160405180910390a160009392505050565b3330146111cb5760405162461bcd60e51b815260206004820152600a602482015269085cd95b198818d85b1b60b21b6044820152606401610acf565b601a54610100900460ff166111ea57601a805461ffff19166101011790555b565b600080600080600080600080611206896000806000613a2f565b935093509350935083601481111561122057611220615189565b99929850909650945092505050565b6001600160a01b03851660009081526008602052604081205460ff16158061127057506001600160a01b03851660009081526008602052604090205460ff16155b1561127f5760085b9050610c9f565b6040516305eff7ef60e21b81526001600160a01b038481166004830152600091908816906317bfdfbc90602401602060405180830381865afa1580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed9190615170565b90506112f887611df2565b15611342578281101561133d5760405162461bcd60e51b815260206004820152600d60248201526c21626f72726f773e726570617960981b6044820152606401610acf565b6113e2565b600080611353866000806000613a2f565b9350505091506000601481111561136c5761136c615189565b82601481111561137e5761137e615189565b1461139f5781601481111561139557611395615189565b9350505050610c9f565b806113ab576003611395565b60006113c76040518060200160405280600454815250856141b4565b9050808611156113de576010945050505050610c9f565b5050505b5060009695505050505050565b3360009081526008602052604090205460ff1661144e5760405162461bcd60e51b815260206004820152601f60248201527f21436f6d7074726f6c6c65723a5f61667465724e6f6e5265656e7472616e74006044820152606401610acf565b601a805460ff19166001179055565b601b81815481106110f557600080fd5b600b81815481106110f557600080fd5b600080546040805163fdb25fb160e01b8152905183926001600160a01b03169163fdb25fb19160048083019260209291908290030181865afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb9190615170565b905080156115ce5760035460405163fc57d4df60e01b81526001600160a01b038681166004830152600092169063fc57d4df90602401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190615170565b90508061157457600c92505050610c37565b60008061158f604051806020016040528085815250876141cc565b909250905060008260038111156115a8576115a8615189565b146115bb57600a5b945050505050610c37565b838110156115ca5760126115b0565b5050505b6000949350505050565b60408051601e8082526103e082019092526060919081602082016103c0803683370190505091506394543c1560e01b82611611836151e4565b92508260ff168151811061162757611627615201565b6001600160e01b031990921660209283029190910190910152635a2977b160e11b82611652836151e4565b92508260ff168151811061166857611668615201565b6001600160e01b031990921660209283029190910190910152632aff3bff60e21b82611693836151e4565b92508260ff16815181106116a9576116a9615201565b6001600160e01b03199092166020928302919091019091015263929fe9a160e01b826116d4836151e4565b92508260ff16815181106116ea576116ea615201565b6001600160e01b0319909216602092830291909101909101526355ee1fe160e01b82611715836151e4565b92508260ff168151811061172b5761172b615201565b6001600160e01b03199092166020928302919091019091015263317b0b7760e01b82611756836151e4565b92508260ff168151811061176c5761176c615201565b6001600160e01b031990921660209283029190910190910152637201477760e11b82611797836151e4565b92508260ff16815181106117ad576117ad615201565b6001600160e01b031990921660209283029190910190910152634fd42e1760e01b826117d8836151e4565b92508260ff16815181106117ee576117ee615201565b6001600160e01b031990921660209283029190910190910152634a956fad60e11b82611819836151e4565b92508260ff168151811061182f5761182f615201565b6001600160e01b03199092166020928302919091019091015263c8c9c97560e01b8261185a836151e4565b92508260ff168151811061187057611870615201565b6001600160e01b03199092166020928302919091019091015263b9b5b15360e01b8261189b836151e4565b92508260ff16815181106118b1576118b1615201565b6001600160e01b031990921660209283029190910190910152634e79238f60e01b826118dc836151e4565b92508260ff16815181106118f2576118f2615201565b6001600160e01b031990921660209283029190910190910152630cbb414760e11b8261191d836151e4565b92508260ff168151811061193357611933615201565b6001600160e01b031990921660209283029190910190910152631853304760e31b8261195e836151e4565b92508260ff168151811061197457611974615201565b6001600160e01b031990921660209283029190910190910152630ede4edd60e41b8261199f836151e4565b92508260ff16815181106119b5576119b5615201565b6001600160e01b031990921660209283029190910190910152634ef4c3e160e01b826119e0836151e4565b92508260ff16815181106119f6576119f6615201565b6001600160e01b03199092166020928302919091019091015263eabe7d9160e01b82611a21836151e4565b92508260ff1681518110611a3757611a37615201565b6001600160e01b0319909216602092830291909101909101526351dff98960e01b82611a62836151e4565b92508260ff1681518110611a7857611a78615201565b6001600160e01b03199092166020928302919091019091015263368f515360e21b82611aa3836151e4565b92508260ff1681518110611ab957611ab9615201565b6001600160e01b031990921660209283029190910190910152631de6c8a560e21b82611ae4836151e4565b92508260ff1681518110611afa57611afa615201565b6001600160e01b031990921660209283029190910190910152631200453160e11b82611b25836151e4565b92508260ff1681518110611b3b57611b3b615201565b6001600160e01b031990921660209283029190910190910152632fe3f38f60e11b82611b66836151e4565b92508260ff1681518110611b7c57611b7c615201565b6001600160e01b03199092166020928302919091019091015263d02f735160e01b82611ba7836151e4565b92508260ff1681518110611bbd57611bbd615201565b6001600160e01b0319909216602092830291909101909101526317b9b84b60e31b82611be8836151e4565b92508260ff1681518110611bfe57611bfe615201565b6001600160e01b0319909216602092830291909101909101526341c728b960e01b82611c29836151e4565b92508260ff1681518110611c3f57611c3f615201565b6001600160e01b031990921660209283029190910190910152635ec88c7960e01b82611c6a836151e4565b92508260ff1681518110611c8057611c80615201565b6001600160e01b03199092166020928302919091019091015263c488847b60e01b82611cab836151e4565b92508260ff1681518110611cc157611cc1615201565b6001600160e01b03199092166020928302919091019091015263c90c20b160e01b82611cec836151e4565b92508260ff1681518110611d0257611d02615201565b6001600160e01b03199092166020928302919091019091015263319728a160e11b82611d2d836151e4565b92508260ff1681518110611d4357611d43615201565b6001600160e01b031990921660209283029190910190910152632eb96f3160e11b82611d6e836151e4565b92508260ff1681518110611d8457611d84615201565b6001600160e01b03199092166020928302919091019091015260ff811615611dee5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610acf565b5090565b6001600160a01b038116600090815260086020526040812060010154158015611e3857506001600160a01b03821660009081526015602052604090205460ff1615156001145b8015610c375750611f4c611f0e836001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea79190615170565b846001600160a01b0316638d02d9a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f099190615170565b61421f565b836001600160a01b031663c3bf11cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee5573d6000803e3d6000fd5b670de0b6b3a76400001492915050565b6000611f66614023565b611f7657610c3760016013614077565b600f5460ff1615158215151415611f8e576000610c37565b600f805460ff19168315159081179091556040519081527f84c7d948374a180eddab35d27d2f7a94167a1ff4e79467f1e89c061984190a1e906020015b60405180910390a16000610c37565b6001600160a01b038116600090815260076020908152604080832080548251818502810185019093528083526060949383018282801561204357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612025575b5093979650505050505050565b600061205a614023565b6120715761206a60016016614077565b9050610ced565b60028054600160a01b60ff60a01b1982168117909255600080546040516328f816b560e11b81529390920460ff169290916001600160a01b0316906351f02d6a906120c8908c908c908c908c908c90600401615240565b6020604051808303816000875af11580156120e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210b9190615270565b6002805460ff60a01b1916600160a01b851515021790559050600061212f82614255565b905060008054906101000a90046001600160a01b03166001600160a01b0316638aac2f0c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a69190615270565b604051635a89ef5160e01b81523060048201526001600160a01b039190911690635a89ef5190602401600060405180830381600087803b1580156121e957600080fd5b505af11580156121fd573d6000803e3d6000fd5b506000925061220a915050565b81146122165780612220565b61222082866132ff565b9a9950505050505050505050565b6000612238614023565b61226d5760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610acf565b816001600160a01b031663abc6d72d6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156122ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d1919061528d565b6123155760405162461bcd60e51b815260206004820152601560248201527410b4b9a932bbb0b93239a234b9ba3934b13aba37b960591b6044820152606401610acf565b60005b601954811015612397576019818154811061233557612335615201565b6000918252602090912001546001600160a01b03848116911614156123855760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b6044820152606401610acf565b8061238f816152aa565b915050612318565b50601980546001810182556000919091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319166001600160a01b0384169081179091556040519081527f98ef1187fb6fd2bc85f8996489877eb2b5428f9e9bdfc068c9ad6c2ea82eacc790602001611fcb565b601354600090600160b01b900460ff16156124665760405162461bcd60e51b815260206004820152601060248201526f085d1c985b9cd9995c8e9c185d5cd95960821b6044820152606401610acf565b600061247386868561449c565b90508015612482579050610c15565b61248d868686614563565b60009695505050505050565b60008054604051631beb2b9760e31b81526060926001600160a01b039092169163df595cb8916124de9130913391839190356001600160e01b031916906004016152c5565b602060405180830381865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f919061528d565b61255c5760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610acf565b815160008167ffffffffffffffff81111561257957612579614fac565b6040519080825280602002602001820160405280156125a2578160200160208202803683370190505b50905060005b828110156126195760008582815181106125c4576125c4615201565b602002602001015190506125d8813361460e565b60148111156125e9576125e9615189565b8383815181106125fb576125fb615201565b60209081029190910101525080612611816152aa565b9150506125a8565b509150505b919050565b60035460405163fc57d4df60e01b81526001600160a01b038581166004830152600092839283929091169063fc57d4df90602401602060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190615170565b60035460405163fc57d4df60e01b81526001600160a01b0388811660048301529293506000929091169063fc57d4df90602401602060405180830381865afa1580156126e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270c9190615170565b9050811580612719575080155b1561272d57600c6000935093505050612947565b60008690506000816001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127969190615170565b905060006127b06040518060200160405280600081525090565b6040805160208101909152600081526040805160208101909152600081526000866001600160a01b0316636752e7026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561280e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128329190615170565b90506000876001600160a01b031663be99f1196040518163ffffffff1660e01b8152600401602060405180830381865afa158015612874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128989190615170565b905060006128db6128c760405180602001604052806005548152506040518060200160405280878152506147a9565b6040518060200160405280858152506147a9565b90506128f58160405180602001604052808e8152506147de565b955061291d60405180602001604052808c81525060405180602001604052808b8152506147de565b9450612929868661481d565b9350612935848f6141b4565b60009d509b5050505050505050505050505b935093915050565b601981815481106110f557600080fd5b6000612969614023565b61297957610bfe60016014614077565b60005b84811015612bfe57600086868381811061299857612998615201565b90506020020160208101906129ad9190614bfd565b90508484838181106129c1576129c1615201565b90506020020160208101906129d69190614e7b565b15612a8e576001600160a01b03811660009081526010602052604090205460ff16612a89576001600160a01b0381166000818152601060205260408120805460ff19166001908117909155601180548083018255928190527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890920180546001600160a01b03191690931790925554612a6f91906151b5565b6001600160a01b0382166000908152601260205260409020555b612beb565b6001600160a01b03811660009081526010602052604090205460ff1615612beb5760118054612abf906001906151b5565b81548110612acf57612acf615201565b60009182526020808320909101546001600160a01b0384811684526012909252604090922054601180549290931692918110612b0d57612b0d615201565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506011805480612b4c57612b4c6152f8565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038316825260129081905260408220546011805491939184908110612ba057612ba0615201565b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822094909455918416825260128352808220829055601090925220805460ff191690555b5080612bf6816152aa565b91505061297c565b506000610c12565b3360009081526008602052604090205460ff16612c655760405162461bcd60e51b815260206004820181905260248201527f21436f6d7074726f6c6c65723a5f6265666f72654e6f6e5265656e7472616e746044820152606401610acf565b601a5460ff16612ca45760405162461bcd60e51b815260206004820152600a602482015269085c99595b9d195c995960b21b6044820152606401610acf565b601a805460ff19169055565b601354600090600160b81b900460ff1615612cfd5760405162461bcd60e51b815260206004820152600d60248201526c085cd95a5e994e9c185d5cd959609a1b6044820152606401610acf565b6001600160a01b03861660009081526008602052604090205460ff161580612d3e57506001600160a01b03851660009081526008602052604090205460ff16155b15612d4a576008611278565b846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dac9190615270565b6001600160a01b0316866001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e179190615270565b6001600160a01b031614612e2c576002611278565b61248d868486614563565b601181815481106110f557600080fd5b6001600160a01b03831660009081526015602052604081205460ff1615612ea15760405162461bcd60e51b815260206004820152600e60248201526d08589bdc9c9bddce9c185d5cd95960921b6044820152606401610acf565b6001600160a01b03841660009081526008602052604090205460ff16612ec8576008610dba565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16612fb757336001600160a01b03851614612f3b5760405162461bcd60e51b815260206004820152600760248201526610b1ba37b5b2b760c91b6044820152606401610acf565b6000612f47338561460e565b90506000816014811115612f5d57612f5d615189565b14612f7c57806014811115612f7457612f74615189565b915050610bd4565b6001600160a01b038086166000908152600860209081526040808320938816835260029093019052205460ff16612fb557612fb561530e565b505b60035460405163fc57d4df60e01b81526001600160a01b0386811660048301529091169063fc57d4df90602401602060405180830381865afa158015613001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130259190615170565b61303057600c610dba565b600f5460ff16801561305b57506001600160a01b03831660009081526010602052604090205460ff16155b15613067576011610dba565b6001600160a01b03841660009081526017602052604090205480158015906130ae57506001600160a01b03851660009081526021602052604090206130ac90856140f0565b155b156131f2576000856001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131179190615170565b9050600030604051631d3965af60e11b81526001600160a01b0389811660048301529190911690633a72cb5e90602401602060405180830381865afa158015613164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131889190615170565b9050600082821061319b575060006131a8565b6131a582846151b5565b90505b836131b387836151cc565b106131ee5760405162461bcd60e51b815260206004820152600b60248201526a021626f72726f773a6361760ac1b6044820152606401610acf565b5050505b6131fc8585613f7b565b604051634e79238f60e01b81526001600160a01b03808616600483015286166024820152600060448201819052606482018590529081903090634e79238f90608401608060405180830381865afa15801561325b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327f9190615324565b9350505091506000601481111561329857613298615189565b82146132a857509150610bd49050565b80156132ba5760049350505050610bd4565b6000979650505050505050565b600760205281600052604060002081815481106132e357600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000613309614023565b6133205761331960016009614077565b9050610c37565b6001600160a01b0383166000908152600860205260409020805460ff166133555761334d6008600a614077565b915050610c37565b60408051602080820183528582528251908101909252670c7d713b49da000082529061338381835190511090565b1561339e576133946006600b614077565b9350505050610c37565b8415801590613418575060035460405163fc57d4df60e01b81526001600160a01b0388811660048301529091169063fc57d4df90602401602060405180830381865afa1580156133f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134169190615170565b155b1561342857613394600c80614077565b60018301805490869055604080516001600160a01b0389168152602081018390529081018790527f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc59060600160405180910390a16000979650505050505050565b60008061349785858561449c565b90508015610f82579050610bd4565b60008054604051631beb2b9760e31b81526001600160a01b039091169063df595cb8906134e8903090339082906001600160e01b0319883516906004016152c5565b602060405180830381865afa158015613505573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613529919061528d565b6135665760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610acf565b6001600160a01b03821660009081526008602052604090205460ff166135ce5760405162461bcd60e51b815260206004820152601760248201527f21436f6d7074726f6c6c65723a657869744d61726b65740000000000000000006044820152606401610acf565b6040516361bfb47160e11b81523360048201528290600090819081906001600160a01b0385169063c37f68e290602401608060405180830381865afa15801561361b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363f9190615324565b50925092509250826000146136845760405162461bcd60e51b815260206004820152600b60248201526a08595e1a5d13585c9ad95d60aa1b6044820152606401610acf565b801561369657610ced600b6003614077565b60006136a387338561449c565b905080156136c3576136b8600d600483614857565b979650505050505050565b6001600160a01b0387166000908152600860209081526040808320338452600281019092529091205460ff1661370157600098975050505050505050565b3360009081526002820160209081526040808320805460ff19169055600782528083208054825181850281018501909352808352919290919083018282801561377357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613755575b5050835193945083925060009150505b828110156137d8578b6001600160a01b03168482815181106137a7576137a7615201565b60200260200101516001600160a01b031614156137c6578091506137d8565b806137d0816152aa565b915050613783565b508181106137e8576137e861530e565b33600090815260076020526040902080548190613807906001906151b5565b8154811061381757613817615201565b9060005260206000200160009054906101000a90046001600160a01b031681838154811061384757613847615201565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080805480613885576138856152f8565b600082815260209020810160001990810180546001600160a01b031916905501905580546139dc57600b80546138bd906001906151b5565b815481106138cd576138cd615201565b6000918252602080832090910154338352600c909152604090912054600b80546001600160a01b0390931692909190811061390a5761390a615201565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b805480613949576139496152f8565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252600c908190526040822054600b80549193918490811061399457613994615201565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812093909355338352600c8252808320839055600a9091529020805460ff191690555b604080516001600160a01b038e1681523360208201527fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d910160405180910390a160009c9b505050505050505050505050565b600080600080613a3d614b19565b6001600160a01b03881615613ac15760035460405163fc57d4df60e01b81526001600160a01b038a811660048301529091169063fc57d4df90602401602060405180830381865afa158015613a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aba9190615170565b6101808201525b60005b6001600160a01b038a16600090815260076020526040902054811015613dfe576001600160a01b038a166000908152600760205260409020805482908110613b0e57613b0e615201565b60009182526020822001546001600160a01b039081168085526040516361bfb47160e11b8152918d1660048301529063c37f68e290602401608060405180830381865afa158015613b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b879190615324565b60a08701526080860152606085015290508015613bb557600e60008060009650965096509650505050610d34565b50604080516020808201835284516001600160a01b0390811660009081526008835284902060010154835260e08601929092528251908101835260a085015181526101008501526003548451925163fc57d4df60e01b81529282166004840152169063fc57d4df90602401602060405180830381865afa158015613c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c619190615170565b60c08301819052613c8257600c600080600095509550955095505050610d34565b604080516020810190915260c0830151815261012083015260e0820151610100830151613cbd91613cb2916147de565b8361012001516147de565b6101408301526000308351604051633c1f884b60e11b81526001600160a01b0391821660048201528c821660248201528b151560448201528d8216606482015291169063783f109690608401602060405180830381865afa158015613d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4a9190615170565b90506000613d6184610140015185606001516141b4565b905081811115613d6e5750805b8084602001818151613d8091906151cc565b905250505061012082015160808301516040840151613da09291906148cf565b604083015281516001600160a01b038a811691161415613dec57613dce8261014001518984604001516148cf565b60408301819052610120830151613de69189906148cf565b60408301525b80613df6816152aa565b915050613ac4565b50806040015181602001511115613e37576020810151604082015160009190613e2790826151b5565b6000945094509450945050610d34565b60008160200151600083602001518460400151613e5491906151b5565b945094509450945050610d34565b600083613e7157506000610bd4565b60035460405163fc57d4df60e01b81526001600160a01b038581166004830152600092169063fc57d4df90602401602060405180830381865afa158015613ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee09190615170565b905060008111613f1c5760405162461bcd60e51b8152602060048201526007602482015266216f7261636c6560c81b6044820152606401610acf565b82613f5e576001600160a01b038416600090815260086020526040902060010154670de0b6b3a7640000613f50838361535a565b613f5a9190615379565b9150505b80613f7186670de0b6b3a764000061535a565b610c9f9190615379565b60005b60195481101561401e5760198181548110613f9b57613f9b615201565b600091825260209091200154604051631cdc2c5d60e31b81526001600160a01b03858116600483015284811660248301529091169063e6e162e890604401600060405180830381600087803b158015613ff357600080fd5b505af1158015614007573d6000803e3d6000fd5b505050508080614016906152aa565b915050613f7e565b505050565b6001546000906001600160a01b0316331480156140495750600254600160a81b900460ff165b8061407257506000546001600160a01b0316331480156140725750600254600160a01b900460ff165b905090565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08360148111156140ac576140ac615189565b83601a8111156140be576140be615189565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610bd457610bd4615189565b6001600160a01b03811660009081526001830160205260408120541515610bd4565b60005b60195481101561401e576019818154811061413257614132615201565b60009182526020909120015460405162e48b0f60e51b81526001600160a01b038581166004830152848116602483015290911690631c9161e090604401600060405180830381600087803b15801561418957600080fd5b505af115801561419d573d6000803e3d6000fd5b5050505080806141ac906152aa565b915050614115565b6000806141c184846148f0565b9050610c1581614918565b6000806000806141dc8686614930565b909250905060008260038111156141f5576141f5615189565b146142065750915060009050614218565b600061421182614918565b9350935050505b9250929050565b6000610bd48383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b8152506149ac565b600061425f614023565b61426f57610c3760016016614077565b6001600160a01b03821660009081526008602052604090205460ff161561429c57610c3760096015614077565b306001600160a01b0316826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143089190615270565b6001600160a01b03161461434d5760405162461bcd60e51b815260206004820152600c60248201526b10b1b7b6b83a3937b63632b960a11b6044820152606401610acf565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561438d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143b19190615270565b6001600160a01b038082166000908152600e602052604090205491925016156143e057610bd460096015614077565b6001600160a01b038381166000818152600860209081526040808320805460ff1916600190811782558082018590556009805491820190557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b031990811687179091559587168452600e835292819020805490951684179094559251918252917fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f910160405180910390a16000610c15565b6001600160a01b03831660009081526008602052604081205460ff166144c3576008610dba565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff166144fb576000610dba565b60008061450b8587866000613a2f565b9350505091506000601481111561452457614524615189565b82601481111561453657614536615189565b146145565781601481111561454d5761454d615189565b92505050610bd4565b801561248d57600461454d565b60005b6019548110156110df576019818154811061458357614583615201565b600091825260209091200154604051634e081c9560e01b81526001600160a01b0386811660048301528581166024830152848116604483015290911690634e081c9590606401600060405180830381600087803b1580156145e357600080fd5b505af11580156145f7573d6000803e3d6000fd5b505050508080614606906152aa565b915050614566565b6001600160a01b0382166000908152600860205260408120805460ff16614639576008915050610c37565b6001600160a01b038316600090815260028201602052604090205460ff1615156001141561466b576000915050610c37565b6001600160a01b03838116600081815260028401602090815260408083208054600160ff199091168117909155600783528184208054918201815584528284200180546001600160a01b031916958a1695909517909455918152600a909152205460ff1661475c57600b8054600180820183557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180546001600160a01b0319166001600160a01b0387169081179091556000908152600a60205260409020805460ff191682179055905461474291906151b5565b6001600160a01b0384166000908152600c60205260409020555b604080516001600160a01b038087168252851660208201527f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5910160405180910390a15060009392505050565b60408051602081019091526000815260405180602001604052806147d58560000151856000015161421f565b90529392505050565b6040805160208101909152600081526040518060200160405280670de0b6b3a7640000614813866000015186600001516149e6565b6147d59190615379565b60408051602081019091526000815260405180602001604052806147d56148508660000151670de0b6b3a76400006149e6565b8551614a28565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601481111561488c5761488c615189565b84601a81111561489e5761489e615189565b604080519283526020830191909152810184905260600160405180910390a1836014811115610c1557610c15615189565b6000806148dc85856148f0565b9050610c9f6148ea82614918565b8461421f565b60408051602081019091526000815260405180602001604052806147d58560000151856149e6565b8051600090610c3790670de0b6b3a764000090615379565b60006149486040518060200160405280600081525090565b600080614959866000015186614a5b565b9092509050600082600381111561497257614972615189565b1461499157506040805160208101909152600081529092509050614218565b60408051602081019091529081526000969095509350505050565b6000806149b984866151cc565b905082858210156149dd5760405162461bcd60e51b8152600401610acf919061539b565b50949350505050565b6000610bd483836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250614a9a565b6000610bd483836040518060400160405280600e81526020016d646976696465206279207a65726f60901b815250614aed565b60008083614a6e57506000905080614218565b83830283614a7c8683615379565b14614a8f57600260009250925050614218565b600092509050614218565b6000831580614aa7575082155b15614ab457506000610bd4565b6000614ac0848661535a565b905083614acd8683615379565b1483906149dd5760405162461bcd60e51b8152600401610acf919061539b565b60008183614b0e5760405162461bcd60e51b8152600401610acf919061539b565b50610c158385615379565b604051806101a0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001614b756040518060200160405280600081525090565b8152602001614b906040518060200160405280600081525090565b8152602001614bab6040518060200160405280600081525090565b8152602001614bc66040518060200160405280600081525090565b815260200160008152602001600081525090565b6001600160a01b0381168114614bef57600080fd5b50565b803561261e81614bda565b600060208284031215614c0f57600080fd5b8135610bd481614bda565b8015158114614bef57600080fd5b600080600060608486031215614c3d57600080fd5b8335614c4881614bda565b92506020840135614c5881614bda565b91506040840135614c6881614c1a565b809150509250925092565b60008060408385031215614c8657600080fd5b8235614c9181614bda565b91506020830135614ca181614bda565b809150509250929050565b60008060008060808587031215614cc257600080fd5b8435614ccd81614bda565b93506020850135614cdd81614bda565b92506040850135614ced81614bda565b9396929550929360600135925050565b600060208284031215614d0f57600080fd5b5035919050565b60008060008060808587031215614d2c57600080fd5b8435614d3781614bda565b93506020850135614d4781614bda565b93969395505050506040820135916060013590565b600080600060608486031215614d7157600080fd5b8335614d7c81614bda565b92506020840135614d8c81614bda565b929592945050506040919091013590565b600080600080600060a08688031215614db557600080fd5b8535614dc081614bda565b94506020860135614dd081614bda565b93506040860135614de081614bda565b92506060860135614df081614bda565b949793965091946080013592915050565b60008060408385031215614e1457600080fd5b8235614e1f81614bda565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b81811015614e6f5783516001600160e01b03191683529284019291840191600101614e49565b50909695505050505050565b600060208284031215614e8d57600080fd5b8135610bd481614c1a565b6020808252825182820181905260009190848201906040850190845b81811015614e6f5783516001600160a01b031683529284019291840191600101614eb4565b60008083601f840112614eeb57600080fd5b50813567ffffffffffffffff811115614f0357600080fd5b60208301915083602082850101111561421857600080fd5b60008060008060008060808789031215614f3457600080fd5b863560ff81168114614f4557600080fd5b9550602087013567ffffffffffffffff80821115614f6257600080fd5b614f6e8a838b01614ed9565b90975095506040890135915080821115614f8757600080fd5b50614f9489828a01614ed9565b979a9699509497949695606090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215614fd557600080fd5b823567ffffffffffffffff80821115614fed57600080fd5b818501915085601f83011261500157600080fd5b81358181111561501357615013614fac565b8060051b604051601f19603f8301168101818110858211171561503857615038614fac565b60405291825284820192508381018501918883111561505657600080fd5b938501935b8285101561507b5761506c85614bf2565b8452938501939285019261505b565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614e6f578351835292840192918401916001016150a3565b60008083601f8401126150d157600080fd5b50813567ffffffffffffffff8111156150e957600080fd5b6020830191508360208260051b850101111561421857600080fd5b6000806000806040858703121561511a57600080fd5b843567ffffffffffffffff8082111561513257600080fd5b61513e888389016150bf565b9096509450602087013591508082111561515757600080fd5b50615164878288016150bf565b95989497509550505050565b60006020828403121561518257600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156151c7576151c761519f565b500390565b600082198211156151df576151df61519f565b500190565b600060ff8216806151f7576151f761519f565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60ff8616815260606020820152600061525d606083018688615217565b828103604084015261507b818587615217565b60006020828403121561528257600080fd5b8151610bd481614bda565b60006020828403121561529f57600080fd5b8151610bd481614c1a565b60006000198214156152be576152be61519f565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b6000806000806080858703121561533a57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60008160001904831182151516156153745761537461519f565b500290565b60008261539657634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b818110156153c8578581018301518582016040015282016153ac565b818111156153da576000604083870101525b50601f01601f191692909201604001939250505056fea164736f6c634300080a000a", + "sourceMap": "987:50468:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9511:41:16;;9548:4;9511:41;;;;;179:14:486;;172:22;154:41;;142:2;127:18;9511:41:16;;;;;;;;4769:45:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;879:25:486;;;867:2;852:18;4769:45:17;733:177:486;732:33:17;;;;;-1:-1:-1;;;732:33:17;;;;;;3013:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13949:1496:14;;;;;;:::i;:::-;;:::i;5549:87:17:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4412:32;;;;;-1:-1:-1;;;;;4412:32:17;;;;;;-1:-1:-1;;;;;2140:32:486;;;2122:51;;2110:2;2095:18;4412:32:17;1976:203:486;20755:402:14;;;;;;:::i;:::-;;:::i;3912:28:17:-;;;;;-1:-1:-1;;;;;3912:28:17;;;517:27;;;;;-1:-1:-1;;;;;517:27:17;;;39982:1077:14;;;;;;:::i;:::-;;:::i;3138:54:17:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3138:54:17;;;3944:31;;;;;-1:-1:-1;;;3944:31:17;;;;;;13098:201:14;;;;;;:::i;:::-;-1:-1:-1;;;;;;;13270:17:14;;;;;:9;:17;;;;;:24;;-1:-1:-1;;13270:24:14;13290:4;13270:24;;;-1:-1:-1;13098:201:14;;;4585:45:17;;;;;;:::i;:::-;;;;;;;;;;;;;;1446:43;;;;;;28411:528:14;;;;;;:::i;:::-;;:::i;:::-;;;;3958:25:486;;;4014:2;3999:18;;3992:34;;;;4042:18;;;4035:34;4100:2;4085:18;;4078:34;3945:3;3930:19;28411:528:14;3727:391:486;9687:1418:14;;;;;;:::i;:::-;;:::i;43185:1400::-;;;;;;:::i;:::-;;:::i;13616:329::-;;;;;;:::i;:::-;;:::i;2513:27:17:-;;;;;;:::i;:::-;;:::i;39188:520:14:-;;;;;;:::i;:::-;;:::i;47377:208::-;;;:::i;27371:419::-;;;;;;:::i;:::-;;:::i;21583:1385::-;;;;;;:::i;:::-;;:::i;51264:189::-;;;:::i;5229:47:17:-;;;;;;:::i;:::-;;:::i;4143:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4089:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2749:29;;;;;;:::i;:::-;;:::i;19399:887:14:-;;;;;;:::i;:::-;;:::i;1166:29:17:-;;;;;-1:-1:-1;;;;;1166:29:17;;;4016:34;;;;;-1:-1:-1;;;4016:34:17;;;;;;48309:2325:14;;;:::i;:::-;;;;;;;:::i;2431:41:17:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7014:14:486;;7007:22;6989:41;;7061:2;7046:18;;7039:34;;;;6962:18;2431:41:17;6821:258:486;3880:156:14;;;;;;:::i;:::-;-1:-1:-1;;;;;3980:24:14;;;3961:4;3980:24;;;:7;:24;;;;;;;;:51;;;;;:42;;;;:51;;;;;;3880:156;;;;;5380:77:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;47839:312:14;;;;;;:::i;:::-;;:::i;36732:608::-;;;;;;:::i;:::-;;:::i;3404:41:17:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3463:162:14;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4054:31:17:-;;;;;-1:-1:-1;;;4054:31:17;;;;;;3261:28;;;;;;;;;46285:1088:14;;;;;;:::i;:::-;;:::i;35923:576::-;;;;;;:::i;:::-;;:::i;24680:665::-;;;;;;:::i;:::-;;:::i;4283:376::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33655:2027::-;;;;;;:::i;:::-;;:::i;:::-;;;;12058:25:486;;;12114:2;12099:18;;12092:34;;;;12031:18;33655:2027:14;11884:248:486;4893:36:17;;;;;;:::i;:::-;;:::i;37573:1406:14:-;;;;;;:::i;:::-;;:::i;50879:198::-;;;:::i;332:33:17:-;;;;;-1:-1:-1;;;;;332:33:17;;;622:38;;;;;-1:-1:-1;;;622:38:17;;;;;;23403:838:14;;;;;;:::i;:::-;;:::i;3501:31:17:-;;;;;;:::i;:::-;;:::i;16792:2343:14:-;;;;;;:::i;:::-;;:::i;1739:50:17:-;;;;;;:::i;:::-;;:::i;41402:1509:14:-;;;;;;:::i;:::-;;:::i;3979:33:17:-;;;;;-1:-1:-1;;;3979:33:17;;;;;;1304:34;;;;;;11531:406:14;;;;;;:::i;:::-;;:::i;6398:2832::-;;;;;;:::i;:::-;;:::i;427:20:17:-;;;;;-1:-1:-1;;;;;427:20:17;;;13949:1496:14;14193:41;;-1:-1:-1;;;14193:41:14;;-1:-1:-1;;;;;2140:32:486;;;14193:41:14;;;2122:51:486;14081:7:14;;14121:12;;14081:7;;14193:32;;;;;;2095:18:486;;14193:41:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14163:71;;14271:9;14284:17;14303;14324:131;14371:7;14386:8;:45;;14428:1;14386:45;;;14397:12;14386:45;14439:1;14448;14324:39;:131::i;:::-;14270:185;;-1:-1:-1;14270:185:14;-1:-1:-1;14270:185:14;;-1:-1:-1;14476:14:14;;-1:-1:-1;14469:3:14;:21;;;;;;;;:::i;:::-;;14461:44;;;;-1:-1:-1;;;14461:44:14;;14368:2:486;14461:44:14;;;14350:21:486;14407:2;14387:18;;;14380:30;-1:-1:-1;;;14426:18:486;;;14419:40;14476:18;;14461:44:14;;;;;;;;;14515:13;;14511:27;;14537:1;14530:8;;;;;;;;;14511:27;14613:31;14656:8;14655:9;:56;;;;-1:-1:-1;;;;;;14669:15:14;;;;;;;:7;:15;;;;;;;;:42;;;;;:33;;;;:42;;;;;;14668:43;14655:56;14651:528;;;-1:-1:-1;14817:19:14;14651:528;;;14946:56;14968:9;14979:12;14993:8;14946:21;:56::i;:::-;14920:82;;15068:8;15067:9;:58;;;;;15102:23;15080:19;:45;15067:58;15063:109;;;-1:-1:-1;15153:19:14;15063:109;15246:23;15272:12;-1:-1:-1;;;;;15272:20:14;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15246:48;;15381:15;15354:23;:42;;:86;;15425:15;15354:86;;;15399:23;15354:86;15347:93;;;;;;;;;13949:1496;;;;;;:::o;20755:402::-;-1:-1:-1;;;;;20954:15:14;;20900:7;20954:15;;;:7;:15;;;;;:24;;;20949:85;;21003:23;20995:32;20988:39;;;;20949:85;21072:43;21098:6;21106:8;21072:25;:43::i;:::-;21137:14;21129:23;21122:30;;20755:402;;;;;;;:::o;39982:1077::-;40057:7;40106:16;:14;:16::i;:::-;40101:111;;40139:66;40144:18;40164:40;40139:4;:66::i;:::-;40132:73;39982:1077;-1:-1:-1;;39982:1077:14:o;40101:111::-;40269:41;;;;;;;;;;;;40338;;;;;;;;2511:7;40338:41;;;2004:13:22;;40269:41:14;;40338;2004:31:22;40385:148:14;;40453:73;40458:26;40486:39;40453:4;:73::i;40385:148::-;40562:41;;;;;;;;;2634:6;40562:41;;;1821:14:22;;-1:-1:-1;40609:142:14;;;40671:73;40676:26;40704:39;40671:4;:73::i;:::-;40664:80;39982:1077;-1:-1:-1;;;;;39982:1077:14:o;40609:142::-;40859:19;;;40884:44;;;;40958:59;;;12058:25:486;;;12114:2;12099:18;;12092:34;;;40958:59:14;;12031:18:486;40958:59:14;;;;;;;;41039:14;41031:23;41024:30;39982:1077;-1:-1:-1;;;;;;39982:1077:14:o;28411:528::-;28595:7;28610;28625;28640;28670:9;28687:23;28718:17;28743;28769:99;28809:7;28826:12;28841;28855;28769:39;:99::i;:::-;28662:206;;;;;;;;28890:3;28882:12;;;;;;;;:::i;:::-;28874:60;-1:-1:-1;28896:15:14;;-1:-1:-1;28913:9:14;-1:-1:-1;28924:9:14;-1:-1:-1;;28411:528:14;;;;;;;;;;:::o;9687:1418::-;-1:-1:-1;;;;;9909:33:14;;9810:7;9909:33;;;:18;:33;;;;;;;;9908:34;9900:59;;;;-1:-1:-1;;;9900:59:14;;14707:2:486;9900:59:14;;;14689:21:486;14746:2;14726:18;;;14719:30;-1:-1:-1;;;14765:18:486;;;14758:42;14817:18;;9900:59:14;14505:336:486;9900:59:14;-1:-1:-1;;;;;10005:22:14;;;;;;:7;:22;;;;;:31;;;10000:92;;10061:23;10053:32;10046:39;;;;10000:92;10141:16;;;;:38;;;;-1:-1:-1;;;;;;10162:17:14;;;;;;:9;:17;;;;;;;;10161:18;10141:38;10137:105;;;10204:30;10196:39;;10137:105;-1:-1:-1;;;;;10292:25:14;;10272:17;10292:25;;;:10;:25;;;;;;10385:14;;;;;:69;;-1:-1:-1;;;;;;10404:33:14;;;;;;:18;:33;;;;;:50;;10447:6;10404:42;:50::i;:::-;10403:51;10385:69;10381:596;;;10464:29;10504:13;-1:-1:-1;;;;;10496:49:14;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10464:83;-1:-1:-1;10555:34:14;48294:4;10592:69;;-1:-1:-1;;;10592:69:14;;-1:-1:-1;;;;;2140:32:486;;;10592:69:14;;;2122:51:486;10592:54:14;;;;;;;2095:18:486;;10592:69:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10555:106;;10669:33;10744:21;10714:26;:51;10710:177;;-1:-1:-1;10795:1:14;10710:177;;;10837:50;10861:26;10837:21;:50;:::i;:::-;10809:78;;10710:177;10945:9;10904:38;10932:10;10904:25;:38;:::i;:::-;:50;10896:74;;;;-1:-1:-1;;;10896:74:14;;15443:2:486;10896:74:14;;;15425:21:486;15482:2;15462:18;;;15455:30;-1:-1:-1;;;15501:18:486;;;15494:41;15552:18;;10896:74:14;15241:335:486;10896:74:14;10456:521;;;10381:596;11015:48;11041:13;11056:6;11015:25;:48::i;:::-;11085:14;11070:30;9687:1418;-1:-1:-1;;;;;9687:1418:14:o;43185:1400::-;43278:7;43327:16;:14;:16::i;:::-;43322:120;;43360:75;43365:18;43385:49;43360:4;:75::i;43322:120::-;43546:50;;;;;;;;;;;;43639;;;;;;;;2907:6;43639:50;;;1805:13:22;;43546:50:14;;43639;1805:30:22;43695:180:14;;;43777:91;43782:35;43819:48;43777:4;:91::i;43695:180::-;43918:50;;;;;;;;;3054:6;43918:50;;;1821:14:22;;-1:-1:-1;43974:180:14;;;44056:91;44061:35;44098:48;44056:4;:91::i;43974:180::-;44243:28;;;44328:62;;;;44454:89;;;12058:25:486;;;12114:2;12099:18;;12092:34;;;44454:89:14;;12031:18:486;44454:89:14;11884:248:486;13616:329:14;13776:10;13768:19;;;;:7;:19;;;;;:28;;;13760:48;;;;-1:-1:-1;;;13760:48:14;;15783:2:486;13760:48:14;;;15765:21:486;15822:1;15802:18;;;15795:29;-1:-1:-1;;;15840:18:486;;;15833:37;15887:18;;13760:48:14;15581:330:486;13760:48:14;13872:17;;:37;;;;;13908:1;13893:12;:16;13872:37;13868:73;;;13919:15;;-1:-1:-1;;;13919:15:14;;16118:2:486;13919:15:14;;;16100:21:486;16157:1;16137:18;;;16130:29;-1:-1:-1;;;16175:18:486;;;16168:35;16220:18;;13919:15:14;15916:328:486;13868:73:14;13616:329;;;;:::o;2513:27:17:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2513:27:17;;-1:-1:-1;2513:27:17;:::o;39188:520:14:-;39256:7;39305:16;:14;:16::i;:::-;39300:111;;39338:66;39343:18;39363:40;39338:4;:66::i;39300:111::-;39493:6;;;-1:-1:-1;;;;;39551:18:14;;;-1:-1:-1;;;;;;39551:18:14;;;;;;;39630:36;;;39493:6;;;;16511:34:486;;;16576:2;16561:18;;16554:43;;;;39630:36:14;;16446:18:486;39630:36:14;;;;;;;39688:14;39673:30;39188:520;-1:-1:-1;;;39188:520:14:o;47377:208::-;47433:10;47455:4;47433:27;47425:50;;;;-1:-1:-1;;;47425:50:14;;16810:2:486;47425:50:14;;;16792:21:486;16849:2;16829:18;;;16822:30;-1:-1:-1;;;16868:18:486;;;16861:40;16918:18;;47425:50:14;16608:334:486;47425:50:14;47487:22;;;;;;;47482:99;;47519:11;:18;;-1:-1:-1;;47545:29:14;;;;;47482:99;47377:208::o;27371:419::-;27470:7;27485;27500;27515;27545:9;27562:23;27593:17;27618;27644:75;27684:7;27709:1;27714;27717;27644:39;:75::i;:::-;27537:182;;;;;;;;27741:3;27733:12;;;;;;;;:::i;:::-;27725:60;27747:15;;-1:-1:-1;27764:9:14;;-1:-1:-1;27747:15:14;-1:-1:-1;27371:419:14;-1:-1:-1;;;27371:419:14:o;21583:1385::-;-1:-1:-1;;;;;21831:23:14;;21775:7;21831:23;;;:7;:23;;;;;:32;;;21830:33;;:72;;-1:-1:-1;;;;;;21868:25:14;;;;;;:7;:25;;;;;:34;;;21867:35;21830:72;21826:132;;;21927:23;21919:32;21912:39;;;;21826:132;22036:54;;-1:-1:-1;;;22036:54:14;;-1:-1:-1;;;;;2140:32:486;;;22036:54:14;;;2122:51:486;22012:21:14;;22036:44;;;;;;2095:18:486;;22036:54:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22012:78;;22171:37;22192:14;22171:12;:37::i;:::-;22167:760;;;22243:11;22226:13;:28;;22218:54;;;;-1:-1:-1;;;22218:54:14;;17149:2:486;22218:54:14;;;17131:21:486;17188:2;17168:18;;;17161:30;-1:-1:-1;;;17207:18:486;;;17200:43;17260:18;;22218:54:14;16947:337:486;22218:54:14;22167:760;;;22368:9;22383:17;22404:76;22444:8;22470:1;22475;22478;22404:39;:76::i;:::-;22367:113;;;;;;22499:14;22492:21;;;;;;;;:::i;:::-;:3;:21;;;;;;;;:::i;:::-;;22488:65;;22540:3;22532:12;;;;;;;;:::i;:::-;22525:19;;;;;;;22488:65;22565:14;22561:83;;22606:28;22598:37;;22561:83;22738:16;22757:73;22776:38;;;;;;;;22792:19;;22776:38;;;22816:13;22757:18;:73::i;:::-;22738:92;;22856:8;22842:11;:22;22838:83;;;22891:20;22876:36;;;;;;;;22838:83;22285:642;;;22167:760;-1:-1:-1;22948:14:14;;21583:1385;-1:-1:-1;;;;;;21583:1385:14:o;51264:189::-;51334:10;51326:19;;;;:7;:19;;;;;:28;;;51318:72;;;;-1:-1:-1;;;51318:72:14;;17491:2:486;51318:72:14;;;17473:21:486;17530:2;17510:18;;;17503:30;17569:33;17549:18;;;17542:61;17620:18;;51318:72:14;17289:355:486;51318:72:14;51396:11;:18;;-1:-1:-1;;51396:18:14;51410:4;51396:18;;;51264:189::o;5229:47:17:-;;;;;;;;;;;;2749:29;;;;;;;;;;;;19399:887:14;19502:7;19590:10;;19574:42;;;-1:-1:-1;;;19574:42:14;;;;19502:7;;-1:-1:-1;;;;;19590:10:14;;19574:40;;:42;;;;;;;;;;;;;;19590:10;19574:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19551:65;-1:-1:-1;19627:16:14;;19623:599;;19753:6;;:42;;-1:-1:-1;;;19753:42:14;;-1:-1:-1;;;;;2140:32:486;;;19753:42:14;;;2122:51:486;19723:27:14;;19753:6;;:25;;2095:18:486;;19753:42:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19723:72;-1:-1:-1;19807:24:14;19803:63;;19848:17;19833:33;;;;;;19803:63;19875:17;19894:24;19922:100;19949:38;;;;;;;;19965:19;19949:38;;;19997:17;19922;:100::i;:::-;19874:148;;-1:-1:-1;19874:148:14;-1:-1:-1;20045:18:14;20034:7;:29;;;;;;;;:::i;:::-;;20030:67;;20080:16;20072:25;20065:32;;;;;;;;20030:67;20163:12;20144:16;:31;20140:75;;;20192:22;20184:31;;20140:75;19645:577;;;19623:599;20266:14;20251:30;19399:887;-1:-1:-1;;;;19399:887:14:o;48309:2325::-;48470:22;;;48441:2;48470:22;;;;;;;;;48383:33;;48441:2;;48470:22;;;;;;;;;;-1:-1:-1;;48450:42:14;-1:-1:-1;;;;48450:42:14;48517:10;;;:::i;:::-;;;;48499:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48499:58:14;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;48563:17:14;48581:10;;;:::i;:::-;;;;48563:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48563:59:14;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;48628:17:14;48646:10;;;:::i;:::-;;;;48628:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48628:57:14;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;48691:17:14;48709:10;;;:::i;:::-;;;;48691:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48691:61:14;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;48758:17:14;48776:10;;;:::i;:::-;;;;48758:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48758:61:14;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;48825:17:14;48843:10;;;:::i;:::-;;;;48825:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48825:61:14;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;48892:17:14;48910:10;;;:::i;:::-;;;;48892:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48892:66:14;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;48964:17:14;48982:10;;;:::i;:::-;;;;48964:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48964:70:14;;;:29;;;;;;;;;;;:70;-1:-1:-1;;;49040:17:14;49058:10;;;:::i;:::-;;;;49040:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49040:70:14;;;:29;;;;;;;;;;;:70;-1:-1:-1;;;49116:17:14;49134:10;;;:::i;:::-;;;;49116:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49116:67:14;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;49189:17:14;49207:10;;;:::i;:::-;;;;49189:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49189:68:14;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;49263:17:14;49281:10;;;:::i;:::-;;;;49263:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49263:77:14;;;:29;;;;;;;;;;;:77;-1:-1:-1;;;49346:17:14;49364:10;;;:::i;:::-;;;;49346:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49346:66:14;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;49418:17:14;49436:10;;;:::i;:::-;;;;49418:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49418:58:14;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;49482:17:14;49500:10;;;:::i;:::-;;;;49482:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49482:56:14;;;:29;;;;;;;;;;;:56;-1:-1:-1;;;49544:17:14;49562:10;;;:::i;:::-;;;;49544:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49544:57:14;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;49607:17:14;49625:10;;;:::i;:::-;;;;49607:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49607:59:14;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;49672:17:14;49690:10;;;:::i;:::-;;;;49672:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49672:58:14;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;49736:17:14;49754:10;;;:::i;:::-;;;;49736:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49736:59:14;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;49801:17:14;49819:10;;;:::i;:::-;;;;49801:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49801:64:14;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;49871:17:14;49889:10;;;:::i;:::-;;;;49871:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49871:64:14;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;49941:17:14;49959:10;;;:::i;:::-;;;;49941:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49941:68:14;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;50015:17:14;50033:10;;;:::i;:::-;;;;50015:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50015:58:14;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;50079:17:14;50097:10;;;:::i;:::-;;;;50079:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50079:61:14;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;50146:17:14;50164:10;;;:::i;:::-;;;;50146:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50146:56:14;;;:29;;;;;;;;;;;:56;-1:-1:-1;;;50208:17:14;50226:10;;;:::i;:::-;;;;50208:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50208:65:14;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;50279:17:14;50297:10;;;:::i;:::-;;;;50279:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50279:75:14;;;:29;;;;;;;;;;;:75;-1:-1:-1;;;50360:17:14;50378:10;;;:::i;:::-;;;;50360:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50360:65:14;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;50431:17:14;50449:10;;;:::i;:::-;;;;50431:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50431:64:14;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;50501:17:14;50519:10;;;:::i;:::-;;;;50501:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50501:67:14;;;:29;;;;;;;;;;;:67;50583:13;;;;50575:54;;;;-1:-1:-1;;;50575:54:14;;18166:2:486;50575:54:14;;;18148:21:486;18205:2;18185:18;;;18178:30;18244;18224:18;;;18217:58;18292:18;;50575:54:14;17964:352:486;50575:54:14;48418:2216;48309:2325;:::o;47839:312::-;-1:-1:-1;;;;;47923:24:14;;47898:4;47923:24;;;:7;:24;;;;;:49;;;:54;:109;;;;-1:-1:-1;;;;;;47987:37:14;;;;;;:20;:37;;;;;;;;:45;;:37;:45;47923:109;:223;;;;;48042:96;48047:63;48052:6;-1:-1:-1;;;;;48052:28:14;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48084:6;-1:-1:-1;;;;;48084:23:14;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48047:4;:63::i;:::-;48112:6;-1:-1:-1;;;;;48112:23:14;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48042:96;48142:4;48042:104;47910:236;47839:312;-1:-1:-1;;47839:312:14:o;36732:608::-;36798:7;36847:16;:14;:16::i;:::-;36842:120;;36880:75;36885:18;36905:49;36880:4;:75::i;36842:120::-;37032:16;;;;:27;;;;;;37028:78;;;37084:14;37076:23;;37028:78;37169:16;:26;;-1:-1:-1;;37169:26:14;;;;;;;;;;37262:36;;154:41:486;;;37262:36:14;;142:2:486;127:18;37262:36:14;;;;;;;;37320:14;37312:23;;3463:162;-1:-1:-1;;;;;3576:22:14;;3548:25;3576:22;;;:13;:22;;;;;;;;3548:50;;;;;;;;;;;;;;;;;3524:16;;3548:25;:50;;3576:22;3548:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3548:50:14;;;;;;;;;;;;;;;;-1:-1:-1;3548:50:14;;3463:162;-1:-1:-1;;;;;;;3463:162:14:o;46285:1088::-;46463:7;46512:16;:14;:16::i;:::-;46507:109;;46545:64;46550:18;46570:38;46545:4;:64::i;:::-;46538:71;;;;46507:109;46747:19;;;-1:-1:-1;;;;;;;46772:26:14;;;;;;;-1:-1:-1;46876:10:14;;46860:87;;-1:-1:-1;;;46860:87:14;;46747:19;;;;;;;-1:-1:-1;;;;;;;46876:10:14;;46860:40;;:87;;46901:12;;46915:15;;;;46932:14;;;;46860:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47008:19;:44;;-1:-1:-1;;;;47008:44:14;-1:-1:-1;;;47008:44:14;;;;;;;46835:113;-1:-1:-1;;47118:22:14;46835:113;47118:14;:22::i;:::-;47104:36;;47163:10;;;;;;;;-1:-1:-1;;;;;47163:10:14;-1:-1:-1;;;;;47147:47:14;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:85;;-1:-1:-1;;;47147:85:14;;47226:4;47147:85;;;2122:51:486;-1:-1:-1;;;;;47147:70:14;;;;;;;2095:18:486;;47147:85:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47290:14:14;;-1:-1:-1;47282:23:14;;-1:-1:-1;;47282:23:14;;47275:3;:30;:93;;47365:3;47275:93;;;47308:54;47329:6;47337:24;47308:20;:54::i;:::-;47268:100;46285:1088;-1:-1:-1;;;;;;;;;;46285:1088:14:o;35923:576::-;35994:7;36017:16;:14;:16::i;:::-;36009:35;;;;-1:-1:-1;;;36009:35:14;;19849:2:486;36009:35:14;;;19831:21:486;19888:1;19868:18;;;19861:29;-1:-1:-1;;;19906:18:486;;;19899:36;19952:18;;36009:35:14;19647:329:486;36009:35:14;36101:11;-1:-1:-1;;;;;36086:48:14;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36078:84;;;;-1:-1:-1;;;36078:84:14;;20433:2:486;36078:84:14;;;20415:21:486;20472:2;20452:18;;;20445:30;-1:-1:-1;;;20491:18:486;;;20484:51;20552:18;;36078:84:14;20231:345:486;36078:84:14;36219:9;36214:113;36238:19;:26;36234:30;;36214:113;;;36294:19;36314:1;36294:22;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;36279:37:14;;;36294:22;;36279:37;;36271:56;;;;-1:-1:-1;;;36271:56:14;;20783:2:486;36271:56:14;;;20765:21:486;20822:1;20802:18;;;20795:29;-1:-1:-1;;;20840:18:486;;;20833:36;20886:18;;36271:56:14;20581:329:486;36271:56:14;36266:3;;;;:::i;:::-;;;;36214:113;;;-1:-1:-1;36373:19:14;:37;;;;;;;-1:-1:-1;36373:37:14;;;;;;;;-1:-1:-1;;;;;;36373:37:14;-1:-1:-1;;;;;36373:37:14;;;;;;;;36421:36;;2122:51:486;;;36421:36:14;;2110:2:486;2095:18;36421:36:14;1976:203:486;24680:665:14;24917:22;;24818:7;;-1:-1:-1;;;24917:22:14;;;;24916:23;24908:52;;;;-1:-1:-1;;;24908:52:14;;21257:2:486;24908:52:14;;;21239:21:486;21296:2;21276:18;;;21269:30;-1:-1:-1;;;21315:18:486;;;21308:46;21371:18;;24908:52:14;21055:340:486;24908:52:14;25079:15;25097:50;25119:6;25127:3;25132:14;25097:21;:50::i;:::-;25079:68;-1:-1:-1;25157:34:14;;25153:69;;25208:7;-1:-1:-1;25201:14:14;;25153:69;25260:43;25286:6;25294:3;25299;25260:25;:43::i;:::-;25325:14;25310:30;24680:665;-1:-1:-1;;;;;;24680:665:14:o;4283:376::-;3126:10;;;3110:86;;-1:-1:-1;;;3110:86:14;;4369:16;;-1:-1:-1;;;;;3126:10:14;;;;3110:35;;:86;;3154:4;;3161:10;;3154:4;;3188:7;;-1:-1:-1;;;;;;3188:7:14;;3110:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3102:113;;;;-1:-1:-1;;;3102:113:14;;22088:2:486;3102:113:14;;;22070:21:486;22127:2;22107:18;;;22100:30;-1:-1:-1;;;22146:18:486;;;22139:44;22200:18;;3102:113:14;21886:338:486;3102:113:14;4407:14;;4393:11:::1;4407:14:::0;4455:18:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;4455:18:14::1;;4428:45;;4484:9;4479:155;4503:3;4499:1;:7;4479:155;;;4521:14;4546:7;4554:1;4546:10;;;;;;;;:::i;:::-;;;;;;;4521:36;;4587:39;4607:6;4615:10;4587:19;:39::i;:::-;4579:48;;;;;;;;:::i;:::-;4566:7;4574:1;4566:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:61;-1:-1:-1;4508:3:14;::::1;::::0;::::1;:::i;:::-;;;;4479:155;;;-1:-1:-1::0;4647:7:14;-1:-1:-1;;3221:1:14::1;4283:376:::0;;;:::o;33655:2027::-;33940:6;;:50;;-1:-1:-1;;;33940:50:14;;-1:-1:-1;;;;;2140:32:486;;;33940:50:14;;;2122:51:486;33819:7:14;;;;;;33940:6;;;;:25;;2095:18:486;;33940:50:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34030:6;;:52;;-1:-1:-1;;;34030:52:14;;-1:-1:-1;;;;;2140:32:486;;;34030:52:14;;;2122:51:486;33908:82:14;;-1:-1:-1;33996:31:14;;34030:6;;;;:25;;2095:18:486;;34030:52:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33996:86;-1:-1:-1;34092:26:14;;;:58;;-1:-1:-1;34122:28:14;;34092:58;34088:117;;;34176:17;34196:1;34160:38;;;;;;;;34088:117;34562:24;34597:16;34562:52;;34620:28;34651:16;-1:-1:-1;;;;;34651:36:14;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34620:69;;34695:19;34720:20;-1:-1:-1;;;;;;;;;;;;;;34720:20:14;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;34797:34:14;34834:16;-1:-1:-1;;;;;34834:43:14;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34797:82;;34885:29;34917:16;-1:-1:-1;;;;;34917:38:14;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34885:72;;35123:31;35157:166;35169:100;35174:47;;;;;;;;35190:28;;35174:47;;;35223:45;;;;;;;;35239:26;35223:45;;;35169:4;:100::i;:::-;35277:40;;;;;;;;35293:21;35277:40;;;35157:4;:166::i;:::-;35123:200;;35342:68;35347:20;35369:40;;;;;;;;35385:21;35369:40;;;35342:4;:68::i;:::-;35330:80;;35430:89;35435:42;;;;;;;;35451:23;35435:42;;;35479:39;;;;;;;;35495:20;35479:39;;;35430:4;:89::i;:::-;35416:103;;35533:28;35538:9;35549:11;35533:4;:28::i;:::-;35525:36;;35582:44;35601:5;35608:17;35582:18;:44::i;:::-;35648:14;;-1:-1:-1;35568:58:14;-1:-1:-1;;;;;;;;;;;;33655:2027:14;;;;;;;:::o;4893:36:17:-;;;;;;;;;;;;37573:1406:14;37678:7;37727:16;:14;:16::i;:::-;37722:115;;37760:70;37765:18;37785:44;37760:4;:70::i;37722:115::-;37892:9;37887:1051;37907:20;;;37887:1051;;;37942:16;37961:9;;37971:1;37961:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37942:31;;37986:8;;37995:1;37986:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37982:950;;;-1:-1:-1;;;;;38070:19:14;;;;;;:9;:19;;;;;;;;38065:182;;-1:-1:-1;;;;;38103:19:14;;;;;;:9;:19;;;;;:26;;-1:-1:-1;;38103:26:14;38125:4;38103:26;;;;;;38141:14;:29;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38141:29:14;;;;;;;38211:21;:25;;38125:4;38211:25;:::i;:::-;-1:-1:-1;;;;;38182:26:14;;;;;;:16;:26;;;;;:54;38065:182;37982:950;;;-1:-1:-1;;;;;38324:19:14;;;;;;:9;:19;;;;;;;;38320:604;;;38402:14;38417:21;;:25;;38441:1;;38417:25;:::i;:::-;38402:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38372:26:14;;;;;:16;:26;;;;;;;;38357:14;:42;;38402:41;;;;;38357:14;:42;;;;;;:::i;:::-;;;;;;;;;:86;;;;;-1:-1:-1;;;;;38357:86:14;;;;;-1:-1:-1;;;;;38357:86:14;;;;;;38515:14;:20;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;38515:20:14;;;;;-1:-1:-1;;;;;;38515:20:14;;;;;;;;;-1:-1:-1;;;;;38632:26:14;;;;:16;:26;;;;;;;;38586:14;:42;;38632:26;;38515:20;38632:26;;38586:42;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38586:42:14;;;38569:60;;;;;;;;;;;;;;;:89;;;;38724:26;;;;;:16;:26;;;;;:30;;;38822:9;:19;;;;:27;;-1:-1:-1;;38822:27:14;;;38320:604;-1:-1:-1;37929:3:14;;;;:::i;:::-;;;;37887:1051;;;-1:-1:-1;38959:14:14;38951:23;;50879:198;50950:10;50942:19;;;;:7;:19;;;;;:28;;;50934:73;;;;-1:-1:-1;;;50934:73:14;;22563:2:486;50934:73:14;;;22545:21:486;;;22582:18;;;22575:30;22641:34;22621:18;;;22614:62;22693:18;;50934:73:14;22361:356:486;50934:73:14;51021:11;;;;51013:34;;;;-1:-1:-1;;;51013:34:14;;22924:2:486;51013:34:14;;;22906:21:486;22963:2;22943:18;;;22936:30;-1:-1:-1;;;22982:18:486;;;22975:40;23032:18;;51013:34:14;22722:334:486;51013:34:14;51053:11;:19;;-1:-1:-1;;51053:19:14;;;50879:198::o;23403:838::-;23684:19;;23585:7;;-1:-1:-1;;;23684:19:14;;;;23683:20;23675:46;;;;-1:-1:-1;;;23675:46:14;;23263:2:486;23675:46:14;;;23245:21:486;23302:2;23282:18;;;23275:30;-1:-1:-1;;;23321:18:486;;;23314:43;23374:18;;23675:46:14;23061:337:486;23675:46:14;-1:-1:-1;;;;;23769:25:14;;;;;;:7;:25;;;;;:34;;;23768:35;;:72;;-1:-1:-1;;;;;;23808:23:14;;;;;;:7;:23;;;;;:32;;;23807:33;23768:72;23764:132;;;23865:23;23857:32;;23764:132;24008:14;-1:-1:-1;;;;;24000:35:14;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23957:80:14;23965:16;-1:-1:-1;;;;;23957:37:14;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23957:80:14;;23953:143;;24062:26;24054:35;;23953:143;24134:65;24160:16;24178:8;24188:10;24134:25;:65::i;3501:31:17:-;;;;;;;;;;;;16792:2343:14;-1:-1:-1;;;;;17013:28:14;;16914:7;17013:28;;;:20;:28;;;;;;;;17012:29;17004:56;;;;-1:-1:-1;;;17004:56:14;;23887:2:486;17004:56:14;;;23869:21:486;23926:2;23906:18;;;23899:30;-1:-1:-1;;;23945:18:486;;;23938:44;23999:18;;17004:56:14;23685:338:486;17004:56:14;-1:-1:-1;;;;;17106:15:14;;;;;;:7;:15;;;;;:24;;;17101:85;;17155:23;17147:32;;17101:85;-1:-1:-1;;;;;17197:15:14;;;;;;;:7;:15;;;;;;;;:43;;;;;:33;;;;:43;;;;;;17192:492;;17329:10;-1:-1:-1;;;;;17329:20:14;;;17321:40;;;;-1:-1:-1;;;17321:40:14;;24230:2:486;17321:40:14;;;24212:21:486;24269:1;24249:18;;;24242:29;-1:-1:-1;;;24287:18:486;;;24280:37;24334:18;;17321:40:14;24028:330:486;17321:40:14;17417:9;17429:50;17457:10;17470:8;17429:19;:50::i;:::-;17417:62;-1:-1:-1;17498:14:14;17491:3;:21;;;;;;;;:::i;:::-;;17487:65;;17539:3;17531:12;;;;;;;;:::i;:::-;17524:19;;;;;17487:65;-1:-1:-1;;;;;17633:15:14;;;;;;;:7;:15;;;;;;;;:43;;;;;:33;;;;:43;;;;;;17626:51;;;;:::i;:::-;17242:442;17192:492;17737:6;;:42;;-1:-1:-1;;;17737:42:14;;-1:-1:-1;;;;;2140:32:486;;;17737:42:14;;;2122:51:486;17737:6:14;;;;:25;;2095:18:486;;17737:42:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17733:101;;17809:17;17801:26;;17733:101;17885:16;;;;:40;;;;-1:-1:-1;;;;;;17906:19:14;;;;;;:9;:19;;;;;;;;17905:20;17885:40;17881:107;;;17950:30;17942:39;;17881:107;-1:-1:-1;;;;;18038:18:14;;18018:17;18038:18;;;:10;:18;;;;;;18124:14;;;;;:64;;-1:-1:-1;;;;;;18143:26:14;;;;;;:18;:26;;;;;:45;;18179:8;18143:35;:45::i;:::-;18142:46;18124:64;18120:553;;;18198:20;18229:6;-1:-1:-1;;;;;18221:35:14;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18198:60;-1:-1:-1;18266:35:14;48294:4;18304:63;;-1:-1:-1;;;18304:63:14;;-1:-1:-1;;;;;2140:32:486;;;18304:63:14;;;2122:51:486;18304:55:14;;;;;;;2095:18:486;;18304:63:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18266:101;;18375:34;18452:12;18421:27;:43;18417:163;;-1:-1:-1;18495:1:14;18417:163;;;18538:42;18553:27;18538:12;:42;:::i;:::-;18509:71;;18417:163;18641:9;18597:41;18626:12;18597:26;:41;:::i;:::-;:53;18589:77;;;;-1:-1:-1;;;18589:77:14;;24697:2:486;18589:77:14;;;24679:21:486;24736:2;24716:18;;;24709:30;-1:-1:-1;;;24755:18:486;;;24748:41;24806:18;;18589:77:14;24495:335:486;18589:77:14;18190:483;;;18120:553;18711:43;18737:6;18745:8;18711:25;:43::i;:::-;18873:71;;-1:-1:-1;;;18873:71:14;;-1:-1:-1;;;;;25130:15:486;;;18873:71:14;;;25112:34:486;25182:15;;25162:18;;;25155:43;18835:11:14;25214:18:486;;;25207:34;;;25257:18;;;25250:34;;;18835:11:14;;;18873:4;;:36;;25046:19:486;;18873:71:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18834:110;;;;;;18969:14;18961:23;;;;;;;;:::i;:::-;18954:3;:30;18950:61;;-1:-1:-1;19001:3:14;-1:-1:-1;18994:10:14;;-1:-1:-1;18994:10:14;18950:61;19020:13;;19016:78;;19058:28;19043:44;;;;;;;19016:78;19115:14;19100:30;16792:2343;-1:-1:-1;;;;;;;16792:2343:14:o;1739:50:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1739:50:17;;-1:-1:-1;1739:50:17;;-1:-1:-1;1739:50:17:o;41402:1509:14:-;41501:7;41550:16;:14;:16::i;:::-;41545:116;;41583:71;41588:18;41608:45;41583:4;:71::i;:::-;41576:78;;;;41545:116;-1:-1:-1;;;;;41722:24:14;;41698:21;41722:24;;;:7;:24;;;;;41757:15;;;;41752:118;;41789:74;41794:23;41819:43;41789:4;:74::i;:::-;41782:81;;;;;41752:118;41912:46;;;;;;;;;;;;42026;;;;;;;;2763:6;42026:46;;41912;42082;42026;41912;1821:14:22;1805:13;;:30;;1707:133;42082:46:14;42078:157;;;42145:83;42150:31;42183:44;42145:4;:83::i;:::-;42138:90;;;;;;;42078:157;42298:32;;;;;:74;;-1:-1:-1;42334:6:14;;:33;;-1:-1:-1;;;42334:33:14;;-1:-1:-1;;;;;2140:32:486;;;42334:33:14;;;2122:51:486;42334:6:14;;;;:25;;2095:18:486;;42334:33:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;42298:74;42294:174;;;42389:72;42394:17;42413:47;42389:4;:72::i;42294:174::-;42595:31;;;;;42632:61;;;;42784:85;;;-1:-1:-1;;;;;25905:32:486;;25887:51;;25969:2;25954:18;;25947:34;;;25997:18;;;25990:34;;;42784:85:14;;25875:2:486;25860:18;42784:85:14;;;;;;;42891:14;42876:30;41402:1509;-1:-1:-1;;;;;;;41402:1509:14:o;11531:406::-;11653:7;11668:15;11686:53;11708:6;11716:8;11726:12;11686:21;:53::i;:::-;11668:71;-1:-1:-1;11749:34:14;;11745:69;;11800:7;-1:-1:-1;11793:14:14;;6398:2832;6481:7;3126:10;;3110:86;;-1:-1:-1;;;3110:86:14;;-1:-1:-1;;;;;3126:10:14;;;;3110:35;;:86;;3154:4;;3161:10;;3154:4;;-1:-1:-1;;;;;;3188:7:14;;;;3110:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3102:113;;;;-1:-1:-1;;;3102:113:14;;22088:2:486;3102:113:14;;;22070:21:486;22127:2;22107:18;;;22100:30;-1:-1:-1;;;22146:18:486;;;22139:44;22200:18;;3102:113:14;21886:338:486;3102:113:14;-1:-1:-1;;;;;6516:22:14;::::1;;::::0;;;:7:::1;:22;::::0;;;;:31;::::1;;6508:67;;;::::0;-1:-1:-1;;;6508:67:14;;26237:2:486;6508:67:14::1;::::0;::::1;26219:21:486::0;26276:2;26256:18;;;26249:30;26315:25;26295:18;;;26288:53;26358:18;;6508:67:14::1;26035:347:486::0;6508:67:14::1;6760:37;::::0;-1:-1:-1;;;6760:37:14;;6786:10:::1;6760:37;::::0;::::1;2122:51:486::0;6607:13:14;;6582:14:::1;::::0;;;;;-1:-1:-1;;;;;6760:25:14;::::1;::::0;::::1;::::0;2095:18:486;;6760:37:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6701:96;;;;;;;6811:4;6819:1;6811:9;6803:33;;;::::0;-1:-1:-1;;;6803:33:14;;26589:2:486;6803:33:14::1;::::0;::::1;26571:21:486::0;26628:2;26608:18;;;26601:30;-1:-1:-1;;;26647:18:486;;;26640:41;26698:18;;6803:33:14::1;26387:335:486::0;6803:33:14::1;6923:15:::0;;6919:115:::1;;6955:72;6960:28;6990:36;6955:4;:72::i;6919:115::-;7116:15;7134:60;7156:13;7171:10;7183;7134:21;:60::i;:::-;7116:78:::0;-1:-1:-1;7204:12:14;;7200:111:::1;;7233:71;7244:15;7261:33;7296:7;7233:10;:71::i;:::-;7226:78:::0;4283:376;-1:-1:-1;;;;;;;4283:376:14:o;7200:111::-:1;-1:-1:-1::0;;;;;7347:22:14;::::1;7317:27;7347:22:::0;;;:7:::1;:22;::::0;;;;;;;7483:10:::1;7452:42:::0;;:30:::1;::::0;::::1;:42:::0;;;;;;;::::1;;7447:94;;7519:14;7504:30:::0;4283:376;-1:-1:-1;;;;;;;;4283:376:14:o;7447:94::-:1;7634:10;7603:42;::::0;;;:30:::1;::::0;::::1;:42;::::0;;;;;;;7596:49;;-1:-1:-1;;7596:49:14::1;::::0;;7790:13:::1;:25:::0;;;;;7757:58;;;;;;::::1;::::0;;;;;;;;;;;;7790:25;;7757:58;;::::1;7790:25:::0;7757:58;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;7757:58:14::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;-1:-1:-1::0;;7835:20:14;;7757:58;;-1:-1:-1;7835:20:14;;-1:-1:-1;7821:11:14::1;::::0;-1:-1:-1;;7891:144:14::1;7915:3;7911:1;:7;7891:144;;;7965:13;-1:-1:-1::0;;;;;7937:42:14::1;:13;7951:1;7937:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;7937:42:14::1;;7933:96;;;8004:1;7991:14;;8015:5;;7933:96;7920:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7891:144;;;;8153:3;8140:10;:16;8133:24;;;;:::i;:::-;8293:10;8248:28;8279:25:::0;;;:13:::1;:25;::::0;;;;8346:17;;8279:25;;8346:21:::1;::::0;8366:1:::1;::::0;8346:21:::1;:::i;:::-;8335:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;8335:33:14::1;8310:10;8321;8310:22;;;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1::0;;;;;8310:58:14::1;;;;;-1:-1:-1::0;;;;;8310:58:14::1;;;;;;8374:10;:16;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8374:16:14;;;;;-1:-1:-1;;;;;;8374:16:14::1;::::0;;;;;8486:17;;8482:647:::1;;8562:12;8575:19:::0;;:23:::1;::::0;8597:1:::1;::::0;8575:23:::1;:::i;:::-;8562:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;8547:10:::1;8531:27:::0;;:15:::1;:27:::0;;;;;;;;8518:12:::1;:41:::0;;-1:-1:-1;;;;;8562:37:14;;::::1;::::0;8518:12;;8531:27;8518:41;::::1;;;;;:::i;:::-;;;;;;;;;:81;;;;;-1:-1:-1::0;;;;;8518:81:14::1;;;;;-1:-1:-1::0;;;;;8518:81:14::1;;;;;;8667:12;:18;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;8667:18:14;;;;;-1:-1:-1;;;;;;8667:18:14::1;::::0;;;;;;;;8792:10:::1;8776:27:::0;;:15:::1;:27:::0;;;;;;;;8731:12:::1;:41:::0;;8776:27;;8667:18;8776:27;;8731:41;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;8731:41:14::1;8715:58:::0;;;;::::1;::::0;;;;;;;;;;:88;;;;8880:10:::1;8864:27:::0;;:15:::1;:27:::0;;;;;:31;;;8956:9:::1;:21:::0;;;;;:29;;-1:-1:-1;;8956:29:14::1;::::0;;8482:647:::1;9140:48;::::0;;-1:-1:-1;;;;;16529:15:486;;16511:34;;9177:10:14::1;16576:2:486::0;16561:18;;16554:43;9140:48:14::1;::::0;16446:18:486;9140:48:14::1;;;;;;;9210:14;9195:30:::0;6398:2832;-1:-1:-1;;;;;;;;;;;;6398:2832:14:o;29601:3544::-;29795:5;29808:7;29823;29838;29860:37;;:::i;:::-;-1:-1:-1;;;;;29945:35:14;;;29941:121;;30016:6;;:39;;-1:-1:-1;;;30016:39:14;;-1:-1:-1;;;;;2140:32:486;;;30016:39:14;;;2122:51:486;30016:6:14;;;;:25;;2095:18:486;;30016:39:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29990:23;;;:65;29941:121;30113:9;30108:2684;-1:-1:-1;;;;;30132:22:14;;;;;;:13;:22;;;;;:29;30128:33;;30108:2684;;;-1:-1:-1;;;;;30189:22:14;;;;;;:13;:22;;;;;:25;;30212:1;;30189:25;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;30189:25:14;;;30176:38;;;30394:58;;-1:-1:-1;;;30394:58:14;;2140:32:486;;;30394:58:14;;;2122:51:486;30189:25:14;30394:29;;2095:18:486;;30394:58:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30365:25;;;30318:134;30345:18;;;30318:134;30325:18;;;30318:134;;-1:-1:-1;30466:9:14;;30462:167;;30588:20;30610:1;30613;30616;30580:38;;;;;;;;;;;;;30462:167;-1:-1:-1;30678:72:14;;;;;;;;;30710:10;;-1:-1:-1;;;;;30694:28:14;;;-1:-1:-1;30694:28:14;;;:7;:28;;;;;:53;;;30678:72;;30654:21;;;:96;;;;30780:44;;;;;;;-1:-1:-1;;;30796:25:14;30780:44;;30760:17;;;:64;30911:6;;30937:10;;30911:37;;-1:-1:-1;;;30911:37:14;;2140:32:486;;;30911:37:14;;;2122:51:486;30911:6:14;;:25;;2095:18:486;;30911:37:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30884:24;;;:64;;;30958:93;;31013:17;31032:1;31035;31038;31005:35;;;;;;;;;;;;30958:93;31079:43;;;;;;;;;31095:24;;;;31079:43;;31060:16;;;:62;31253:21;;;;31276:17;;;;31243:70;;31248:46;;:4;:46::i;:::-;31296:4;:16;;;31243:4;:70::i;:::-;31222:18;;;:91;31429:33;48294:4;31530:10;;31465:156;;-1:-1:-1;;;31465:156:14;;-1:-1:-1;;;;;27368:15:486;;;31465:156:14;;;27350:34:486;27420:15;;;27400:18;;;27393:43;31576:16:14;;;27452:18:486;;;27445:50;27531:15;;;27511:18;;;27504:43;31465:53:14;;;;;27284:19:486;;31465:156:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31429:192;;31692:28;31723:58;31742:4;:18;;;31762:4;:18;;;31723;:58::i;:::-;31692:89;;31818:25;31795:20;:48;31791:102;;;-1:-1:-1;31868:25:14;31791:102;31925:20;31903:4;:18;;:42;;;;;;;:::i;:::-;;;-1:-1:-1;;;32086:16:14;;;;32112:18;;;;32140:25;;;;32051:122;;32086:16;32112:18;32051:25;:122::i;:::-;32023:25;;;:150;32246:10;;-1:-1:-1;;;;;32246:26:14;;;;;;32242:544;;;32401:126;32438:4;:18;;;32468:12;32492:4;:25;;;32401;:126::i;:::-;32373:25;;;:154;;;32690:16;;;;32653:124;;32718:12;;32653:25;:124::i;:::-;32625:25;;;:152;32242:544;30163:3;;;;:::i;:::-;;;;30108:2684;;;;32890:4;:25;;;32869:4;:18;;;:46;32865:276;;;32949:18;;;;32990:25;;;;32933:14;;32949:18;32969:46;;32949:18;32969:46;:::i;:::-;33017:1;32925:94;;;;;;;;;;;32865:276;33048:14;33064:4;:18;;;33084:1;33115:4;:18;;;33087:4;:25;;;:46;;;;:::i;:::-;33040:94;;;;;;;;;;;15568:808;15694:7;15713:14;15709:28;;-1:-1:-1;15736:1:14;15729:8;;15709:28;15876:6;;:39;;-1:-1:-1;;;15876:39:14;;-1:-1:-1;;;;;2140:32:486;;;15876:39:14;;;2122:51:486;15849:24:14;;15876:6;;:25;;2095:18:486;;15876:39:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15849:66;;15948:1;15929:16;:20;15921:40;;;;-1:-1:-1;;;15921:40:14;;27760:2:486;15921:40:14;;;27742:21:486;27799:1;27779:18;;;27772:29;-1:-1:-1;;;27817:18:486;;;27810:37;27864:18;;15921:40:14;27558:330:486;15921:40:14;16058:8;16053:199;;-1:-1:-1;;;;;16111:30:14;;16076:32;16111:30;;;:7;:30;;;;;:55;;;16241:4;16194:43;16221:16;16111:55;16194:43;:::i;:::-;16193:52;;;;:::i;:::-;16174:71;;16068:184;16053:199;16355:16;16335;:9;16347:4;16335:16;:::i;:::-;16334:37;;;;:::i;25919:234::-;26008:9;26003:145;26027:19;:26;26023:30;;26003:145;;;26081:19;26101:1;26081:22;;;;;;;;:::i;:::-;;;;;;;;;;;26066:82;;-1:-1:-1;;;26066:82:14;;-1:-1:-1;;;;;16529:15:486;;;26066:82:14;;;16511:34:486;16581:15;;;16561:18;;;16554:43;26081:22:14;;;;26066:64;;16446:18:486;;26066:82:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26055:3;;;;;:::i;:::-;;;;26003:145;;;;25919:234;;:::o;855:174:17:-;938:5;;904:4;;-1:-1:-1;;;;;938:5:17;924:10;:19;:37;;;;-1:-1:-1;947:14:17;;-1:-1:-1;;;947:14:17;;;;924:37;923:101;;;-1:-1:-1;989:10:17;;-1:-1:-1;;;;;989:10:17;967;:33;:56;;;;-1:-1:-1;1004:19:17;;-1:-1:-1;;;1004:19:17;;;;967:56;916:108;;855:174;:::o;2065:151:20:-;2126:7;2146:39;2162:3;2154:12;;;;;;;;:::i;:::-;2176:4;2168:13;;;;;;;;:::i;:::-;2146:39;;;28807:25:486;;;28863:2;28848:18;;28841:34;;;;2183:1:20;28891:18:486;;;28884:34;28795:2;28780:18;2146:39:20;;;;;;;2207:3;2199:12;;;;;;;;:::i;8852:165:469:-;-1:-1:-1;;;;;8985:23:469;;8932:4;4343:19;;;:12;;;:19;;;;;;:24;;8955:55;4247:127;25532:234:14;25621:9;25616:145;25640:19;:26;25636:30;;25616:145;;;25694:19;25714:1;25694:22;;;;;;;;:::i;:::-;;;;;;;;;;;25679:82;;-1:-1:-1;;;25679:82:14;;-1:-1:-1;;;;;16529:15:486;;;25679:82:14;;;16511:34:486;16581:15;;;16561:18;;;16554:43;25694:22:14;;;;25679:64;;16446:18:486;;25679:82:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25668:3;;;;;:::i;:::-;;;;25616:145;;1117:167:22;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;2379:288:21:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:21;-1:-1:-1;2560:18:21;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:21;-1:-1:-1;2601:1:21;;-1:-1:-1;2588:15:21;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;;:::o;3021:117:22:-;3080:7;3102:31;3107:1;3110;3102:31;;;;;;;;;;;;;-1:-1:-1;;;3102:31:22;;;:4;:31::i;44885:1069:14:-;44943:7;44992:16;:14;:16::i;:::-;44987:109;;45025:64;45030:18;45050:38;45025:4;:64::i;44987:109::-;-1:-1:-1;;;;;45139:24:14;;;;;;:7;:24;;;;;:33;;;45135:129;;;45189:68;45194:27;45223:33;45189:4;:68::i;45135:129::-;45359:4;-1:-1:-1;;;;;45318:46:14;45326:6;-1:-1:-1;;;;;45326:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45318:46:14;;45310:71;;;;-1:-1:-1;;;45310:71:14;;29131:2:486;45310:71:14;;;29113:21:486;29170:2;29150:18;;;29143:30;-1:-1:-1;;;29189:18:486;;;29182:42;29241:18;;45310:71:14;28929:336:486;45310:71:14;45434:18;45471:6;-1:-1:-1;;;;;45455:35:14;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45511:31:14;;;45555:1;45511:31;;;:19;:31;;;;;;45434:58;;-1:-1:-1;45511:31:14;45503:54;45499:150;;45574:68;45579:27;45608:33;45574:4;:68::i;45499:150::-;-1:-1:-1;;;;;45713:24:14;;;45689:21;45713:24;;;:7;:24;;;;;;;;45743:22;;-1:-1:-1;;45743:22:14;45761:4;45743:22;;;;;45771:31;;;:35;;;45812:10;:23;;;;;;;;;;;-1:-1:-1;;;;;;45812:23:14;;;;;;;;45841:31;;;;;:19;:31;;;;;;:40;;;;;;;;;;45892:20;;2122:51:486;;;45713:24:14;45892:20;;2095:18:486;45892:20:14;;;;;;;45934:14;45926:23;;11941:850;-1:-1:-1;;;;;12087:15:14;;12067:7;12087:15;;;:7;:15;;;;;:24;;;12082:85;;12136:23;12128:32;;12082:85;-1:-1:-1;;;;;12267:15:14;;;;;;;:7;:15;;;;;;;;:43;;;;;:33;;;;:43;;;;;;12262:95;;12335:14;12327:23;;12262:95;12451:9;12466:17;12487:113;12534:8;12558:6;12573:12;12593:1;12487:39;:113::i;:::-;12450:150;;;;;;12617:14;12610:21;;;;;;;;:::i;:::-;:3;:21;;;;;;;;:::i;:::-;;12606:61;;12656:3;12648:12;;;;;;;;:::i;:::-;12641:19;;;;;;12606:61;12676:13;;12672:78;;12714:28;12706:37;;26381:258;26494:9;26489:145;26513:19;:26;26509:30;;26489:145;;;26567:19;26587:1;26567:22;;;;;;;;:::i;:::-;;;;;;;;;;;26552:82;;-1:-1:-1;;;26552:82:14;;-1:-1:-1;;;;;29528:15:486;;;26552:82:14;;;29510:34:486;29580:15;;;29560:18;;;29553:43;29632:15;;;29612:18;;;29605:43;26567:22:14;;;;26552:64;;29445:18:486;;26552:82:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26541:3;;;;;:::i;:::-;;;;26489:145;;4923:1107;-1:-1:-1;;;;;5047:24:14;;5004:5;5047:24;;;:7;:24;;;;;5083:21;;;;5078:116;;5164:23;5157:30;;;;;5078:116;-1:-1:-1;;;;;5204:40:14;;;;;;:30;;;:40;;;;;;;;:48;;:40;:48;5200:114;;;5293:14;5286:21;;;;;5200:114;-1:-1:-1;;;;;5671:40:14;;;;;;;:30;;;:40;;;;;;;;:47;;5714:4;-1:-1:-1;;5671:47:14;;;;;;;;5724:13;:23;;;;;:36;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5724:36:14;;;;;;;;;;;5799:19;;;:9;:19;;;;;5671:47;5799:19;5794:161;;5828:12;:27;;;;;;;;;;;;;;-1:-1:-1;;;;;;5828:27:14;-1:-1:-1;;;;;5828:27:14;;;;;;;;-1:-1:-1;5863:19:14;;;:9;5828:27;5863:19;;;;:26;;-1:-1:-1;;5863:26:14;;;;;5925:19;;:23;;5828:27;5925:23;:::i;:::-;-1:-1:-1;;;;;5897:25:14;;;;;;:15;:25;;;;;:51;5794:161;5966:31;;;-1:-1:-1;;;;;16529:15:486;;;16511:34;;16581:15;;16576:2;16561:18;;16554:43;5966:31:14;;16446:18:486;5966:31:14;;;;;;;-1:-1:-1;6011:14:14;;4923:1107;-1:-1:-1;;;4923:1107:14:o;2717:142:22:-;-1:-1:-1;;;;;;;;;;;;2807:47:22;;;;;;;;2823:28;2828:1;:10;;;2840:1;:10;;;2823:4;:28::i;:::-;2807:47;;2800:54;2717:142;-1:-1:-1;;;2717:142:22:o;3938:153::-;-1:-1:-1;;;;;;;;;;;;4028:58:22;;;;;;;;450:4;4044:28;4049:1;:10;;;4061:1;:10;;;4044:4;:28::i;:::-;:39;;;;:::i;5170:158::-;-1:-1:-1;;;;;;;;;;;;5260:63:22;;;;;;;;5276:44;5281:26;5286:1;:10;;;450:4;5281;:26::i;:::-;5309:10;;5276:4;:44::i;2324:204:20:-;2428:7;2448:49;2464:3;2456:12;;;;;;;;:::i;:::-;2478:4;2470:13;;;;;;;;:::i;:::-;2448:49;;;28807:25:486;;;28863:2;28848:18;;28841:34;;;;28891:18;;28884:34;;;28795:2;28780:18;2448:49:20;;;;;;;2519:3;2511:12;;;;;;;;:::i;1416:220:22:-;1536:7;1551:18;1572:15;1577:1;1580:6;1572:4;:15::i;:::-;1551:36;;1600:31;1605:17;1614:7;1605:8;:17::i;:::-;1624:6;1600:4;:31::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:22;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:21:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:21;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:21;-1:-1:-1;2136:18:21;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:21;;;;;;;;;-1:-1:-1;2178:20:21;;2172:4;;-1:-1:-1;2178:20:21;-1:-1:-1;2164:35:21;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:21;;-1:-1:-1;1947:332:21;-1:-1:-1;;;;1947:332:21:o;3142:189:22:-;3245:7;;3272:5;3276:1;3272;:5;:::i;:::-;3260:17;-1:-1:-1;3299:12:22;3291:6;;;;3283:29;;;;-1:-1:-1;;;3283:29:22;;;;;;;;:::i;:::-;-1:-1:-1;3325:1:22;3142:189;-1:-1:-1;;;;3142:189:22:o;4796:123::-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;6048:114::-;6107:7;6129:28;6134:1;6137;6129:28;;;;;;;;;;;;;-1:-1:-1;;;6129:28:22;;;:4;:28::i;544:330:13:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:13;;-1:-1:-1;660:18:13;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:13;-1:-1:-1;833:30:13;;4923:243:22;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:22;;5045:16;5041:45;;;-1:-1:-1;5078:1:22;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:22;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:22;;;;;;;;:::i;6166:169::-;6269:7;6299:12;6292:5;6284:28;;;;-1:-1:-1;;;6284:28:22;;;;;;;;:::i;:::-;-1:-1:-1;6325:5:22;6329:1;6325;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;206:131:486:-;-1:-1:-1;;;;;281:31:486;;271:42;;261:70;;327:1;324;317:12;261:70;206:131;:::o;342:134::-;410:20;;439:31;410:20;439:31;:::i;481:247::-;540:6;593:2;581:9;572:7;568:23;564:32;561:52;;;609:1;606;599:12;561:52;648:9;635:23;667:31;692:5;667:31;:::i;915:118::-;1001:5;994:13;987:21;980:5;977:32;967:60;;1023:1;1020;1013:12;1038:540;1129:6;1137;1145;1198:2;1186:9;1177:7;1173:23;1169:32;1166:52;;;1214:1;1211;1204:12;1166:52;1253:9;1240:23;1272:31;1297:5;1272:31;:::i;:::-;1322:5;-1:-1:-1;1379:2:486;1364:18;;1351:32;1392:33;1351:32;1392:33;:::i;:::-;1444:7;-1:-1:-1;1503:2:486;1488:18;;1475:32;1516:30;1475:32;1516:30;:::i;:::-;1565:7;1555:17;;;1038:540;;;;;:::o;1583:388::-;1651:6;1659;1712:2;1700:9;1691:7;1687:23;1683:32;1680:52;;;1728:1;1725;1718:12;1680:52;1767:9;1754:23;1786:31;1811:5;1786:31;:::i;:::-;1836:5;-1:-1:-1;1893:2:486;1878:18;;1865:32;1906:33;1865:32;1906:33;:::i;:::-;1958:7;1948:17;;;1583:388;;;;;:::o;2184:598::-;2270:6;2278;2286;2294;2347:3;2335:9;2326:7;2322:23;2318:33;2315:53;;;2364:1;2361;2354:12;2315:53;2403:9;2390:23;2422:31;2447:5;2422:31;:::i;:::-;2472:5;-1:-1:-1;2529:2:486;2514:18;;2501:32;2542:33;2501:32;2542:33;:::i;:::-;2594:7;-1:-1:-1;2653:2:486;2638:18;;2625:32;2666:33;2625:32;2666:33;:::i;:::-;2184:598;;;;-1:-1:-1;2718:7:486;;2772:2;2757:18;2744:32;;-1:-1:-1;;2184:598:486:o;2787:180::-;2846:6;2899:2;2887:9;2878:7;2874:23;2870:32;2867:52;;;2915:1;2912;2905:12;2867:52;-1:-1:-1;2938:23:486;;2787:180;-1:-1:-1;2787:180:486:o;3197:525::-;3283:6;3291;3299;3307;3360:3;3348:9;3339:7;3335:23;3331:33;3328:53;;;3377:1;3374;3367:12;3328:53;3416:9;3403:23;3435:31;3460:5;3435:31;:::i;:::-;3485:5;-1:-1:-1;3542:2:486;3527:18;;3514:32;3555:33;3514:32;3555:33;:::i;:::-;3197:525;;3607:7;;-1:-1:-1;;;;3661:2:486;3646:18;;3633:32;;3712:2;3697:18;3684:32;;3197:525::o;4123:456::-;4200:6;4208;4216;4269:2;4257:9;4248:7;4244:23;4240:32;4237:52;;;4285:1;4282;4275:12;4237:52;4324:9;4311:23;4343:31;4368:5;4343:31;:::i;:::-;4393:5;-1:-1:-1;4450:2:486;4435:18;;4422:32;4463:33;4422:32;4463:33;:::i;:::-;4123:456;;4515:7;;-1:-1:-1;;;4569:2:486;4554:18;;;;4541:32;;4123:456::o;4861:740::-;4956:6;4964;4972;4980;4988;5041:3;5029:9;5020:7;5016:23;5012:33;5009:53;;;5058:1;5055;5048:12;5009:53;5097:9;5084:23;5116:31;5141:5;5116:31;:::i;:::-;5166:5;-1:-1:-1;5223:2:486;5208:18;;5195:32;5236:33;5195:32;5236:33;:::i;:::-;5288:7;-1:-1:-1;5347:2:486;5332:18;;5319:32;5360:33;5319:32;5360:33;:::i;:::-;5412:7;-1:-1:-1;5471:2:486;5456:18;;5443:32;5484:33;5443:32;5484:33;:::i;:::-;4861:740;;;;-1:-1:-1;4861:740:486;;5590:3;5575:19;5562:33;;4861:740;-1:-1:-1;;4861:740:486:o;5606:315::-;5674:6;5682;5735:2;5723:9;5714:7;5710:23;5706:32;5703:52;;;5751:1;5748;5741:12;5703:52;5790:9;5777:23;5809:31;5834:5;5809:31;:::i;:::-;5859:5;5911:2;5896:18;;;;5883:32;;-1:-1:-1;;;5606:315:486:o;6159:657::-;6328:2;6380:21;;;6450:13;;6353:18;;;6472:22;;;6299:4;;6328:2;6551:15;;;;6525:2;6510:18;;;6299:4;6594:196;6608:6;6605:1;6602:13;6594:196;;;6673:13;;-1:-1:-1;;;;;;6669:40:486;6657:53;;6765:15;;;;6730:12;;;;6630:1;6623:9;6594:196;;;-1:-1:-1;6807:3:486;;6159:657;-1:-1:-1;;;;;;6159:657:486:o;7763:241::-;7819:6;7872:2;7860:9;7851:7;7847:23;7843:32;7840:52;;;7888:1;7885;7878:12;7840:52;7927:9;7914:23;7946:28;7968:5;7946:28;:::i;8009:675::-;8197:2;8249:21;;;8319:13;;8222:18;;;8341:22;;;8168:4;;8197:2;8420:15;;;;8394:2;8379:18;;;8168:4;8463:195;8477:6;8474:1;8471:13;8463:195;;;8542:13;;-1:-1:-1;;;;;8538:39:486;8526:52;;8633:15;;;;8598:12;;;;8574:1;8492:9;8463:195;;8689:347;8740:8;8750:6;8804:3;8797:4;8789:6;8785:17;8781:27;8771:55;;8822:1;8819;8812:12;8771:55;-1:-1:-1;8845:20:486;;8888:18;8877:30;;8874:50;;;8920:1;8917;8910:12;8874:50;8957:4;8949:6;8945:17;8933:29;;9009:3;9002:4;8993:6;8985;8981:19;8977:30;8974:39;8971:59;;;9026:1;9023;9016:12;9041:943;9147:6;9155;9163;9171;9179;9187;9240:3;9228:9;9219:7;9215:23;9211:33;9208:53;;;9257:1;9254;9247:12;9208:53;9296:9;9283:23;9346:4;9339:5;9335:16;9328:5;9325:27;9315:55;;9366:1;9363;9356:12;9315:55;9389:5;-1:-1:-1;9445:2:486;9430:18;;9417:32;9468:18;9498:14;;;9495:34;;;9525:1;9522;9515:12;9495:34;9564:58;9614:7;9605:6;9594:9;9590:22;9564:58;:::i;:::-;9641:8;;-1:-1:-1;9538:84:486;-1:-1:-1;9729:2:486;9714:18;;9701:32;;-1:-1:-1;9745:16:486;;;9742:36;;;9774:1;9771;9764:12;9742:36;;9813:60;9865:7;9854:8;9843:9;9839:24;9813:60;:::i;:::-;9041:943;;;;-1:-1:-1;9041:943:486;;;;;9974:2;9959:18;;;9946:32;;9041:943;-1:-1:-1;;;;9041:943:486:o;9989:127::-;10050:10;10045:3;10041:20;10038:1;10031:31;10081:4;10078:1;10071:15;10105:4;10102:1;10095:15;10121:1121;10205:6;10236:2;10279;10267:9;10258:7;10254:23;10250:32;10247:52;;;10295:1;10292;10285:12;10247:52;10335:9;10322:23;10364:18;10405:2;10397:6;10394:14;10391:34;;;10421:1;10418;10411:12;10391:34;10459:6;10448:9;10444:22;10434:32;;10504:7;10497:4;10493:2;10489:13;10485:27;10475:55;;10526:1;10523;10516:12;10475:55;10562:2;10549:16;10584:2;10580;10577:10;10574:36;;;10590:18;;:::i;:::-;10636:2;10633:1;10629:10;10668:2;10662:9;10731:2;10727:7;10722:2;10718;10714:11;10710:25;10702:6;10698:38;10786:6;10774:10;10771:22;10766:2;10754:10;10751:18;10748:46;10745:72;;;10797:18;;:::i;:::-;10833:2;10826:22;10883:18;;;10917:15;;;;-1:-1:-1;10959:11:486;;;10955:20;;;10987:19;;;10984:39;;;11019:1;11016;11009:12;10984:39;11043:11;;;;11063:148;11079:6;11074:3;11071:15;11063:148;;;11145:23;11164:3;11145:23;:::i;:::-;11133:36;;11096:12;;;;11189;;;;11063:148;;;11230:6;10121:1121;-1:-1:-1;;;;;;;;10121:1121:486:o;11247:632::-;11418:2;11470:21;;;11540:13;;11443:18;;;11562:22;;;11389:4;;11418:2;11641:15;;;;11615:2;11600:18;;;11389:4;11684:169;11698:6;11695:1;11692:13;11684:169;;;11759:13;;11747:26;;11828:15;;;;11793:12;;;;11720:1;11713:9;11684:169;;12137:367;12200:8;12210:6;12264:3;12257:4;12249:6;12245:17;12241:27;12231:55;;12282:1;12279;12272:12;12231:55;-1:-1:-1;12305:20:486;;12348:18;12337:30;;12334:50;;;12380:1;12377;12370:12;12334:50;12417:4;12409:6;12405:17;12393:29;;12477:3;12470:4;12460:6;12457:1;12453:14;12445:6;12441:27;12437:38;12434:47;12431:67;;;12494:1;12491;12484:12;12509:770;12628:6;12636;12644;12652;12705:2;12693:9;12684:7;12680:23;12676:32;12673:52;;;12721:1;12718;12711:12;12673:52;12761:9;12748:23;12790:18;12831:2;12823:6;12820:14;12817:34;;;12847:1;12844;12837:12;12817:34;12886:70;12948:7;12939:6;12928:9;12924:22;12886:70;:::i;:::-;12975:8;;-1:-1:-1;12860:96:486;-1:-1:-1;13063:2:486;13048:18;;13035:32;;-1:-1:-1;13079:16:486;;;13076:36;;;13108:1;13105;13098:12;13076:36;;13147:72;13211:7;13200:8;13189:9;13185:24;13147:72;:::i;:::-;12509:770;;;;-1:-1:-1;13238:8:486;-1:-1:-1;;;;12509:770:486:o;13845:184::-;13915:6;13968:2;13956:9;13947:7;13943:23;13939:32;13936:52;;;13984:1;13981;13974:12;13936:52;-1:-1:-1;14007:16:486;;13845:184;-1:-1:-1;13845:184:486:o;14034:127::-;14095:10;14090:3;14086:20;14083:1;14076:31;14126:4;14123:1;14116:15;14150:4;14147:1;14140:15;14846:127;14907:10;14902:3;14898:20;14895:1;14888:31;14938:4;14935:1;14928:15;14962:4;14959:1;14952:15;14978:125;15018:4;15046:1;15043;15040:8;15037:34;;;15051:18;;:::i;:::-;-1:-1:-1;15088:9:486;;14978:125::o;15108:128::-;15148:3;15179:1;15175:6;15172:1;15169:13;15166:39;;;15185:18;;:::i;:::-;-1:-1:-1;15221:9:486;;15108:128::o;17649:178::-;17686:3;17730:4;17723:5;17719:16;17754:7;17744:41;;17765:18;;:::i;:::-;-1:-1:-1;;17801:20:486;;17649:178;-1:-1:-1;;17649:178:486:o;17832:127::-;17893:10;17888:3;17884:20;17881:1;17874:31;17924:4;17921:1;17914:15;17948:4;17945:1;17938:15;18321:266;18409:6;18404:3;18397:19;18461:6;18454:5;18447:4;18442:3;18438:14;18425:43;-1:-1:-1;18513:1:486;18488:16;;;18506:4;18484:27;;;18477:38;;;;18569:2;18548:15;;;-1:-1:-1;;18544:29:486;18535:39;;;18531:50;;18321:266::o;18592:509::-;18841:4;18833:6;18829:17;18818:9;18811:36;18883:2;18878;18867:9;18863:18;18856:30;18792:4;18909:61;18966:2;18955:9;18951:18;18943:6;18935;18909:61;:::i;:::-;19018:9;19010:6;19006:22;19001:2;18990:9;18986:18;18979:50;19046:49;19088:6;19080;19072;19046:49;:::i;19106:251::-;19176:6;19229:2;19217:9;19208:7;19204:23;19200:32;19197:52;;;19245:1;19242;19235:12;19197:52;19277:9;19271:16;19296:31;19321:5;19296:31;:::i;19981:245::-;20048:6;20101:2;20089:9;20080:7;20076:23;20072:32;20069:52;;;20117:1;20114;20107:12;20069:52;20149:9;20143:16;20168:28;20190:5;20168:28;:::i;20915:135::-;20954:3;-1:-1:-1;;20975:17:486;;20972:43;;;20995:18;;:::i;:::-;-1:-1:-1;21042:1:486;21031:13;;20915:135::o;21400:481::-;-1:-1:-1;;;;;21685:15:486;;;21667:34;;21737:15;;;21732:2;21717:18;;21710:43;21789:15;;21784:2;21769:18;;21762:43;-1:-1:-1;;;;;;21841:33:486;;;21836:2;21821:18;;21814:61;21616:3;21601:19;;21400:481::o;22229:127::-;22290:10;22285:3;22281:20;22278:1;22271:31;22321:4;22318:1;22311:15;22345:4;22342:1;22335:15;24363:127;24424:10;24419:3;24415:20;24412:1;24405:31;24455:4;24452:1;24445:15;24479:4;24476:1;24469:15;25295:368;25392:6;25400;25408;25416;25469:3;25457:9;25448:7;25444:23;25440:33;25437:53;;;25486:1;25483;25476:12;25437:53;-1:-1:-1;;25509:16:486;;25565:2;25550:18;;25544:25;25609:2;25594:18;;25588:25;25653:2;25638:18;;;25632:25;25509:16;;25544:25;;-1:-1:-1;25632:25:486;;-1:-1:-1;25295:368:486;-1:-1:-1;25295:368:486:o;27893:168::-;27933:7;27999:1;27995;27991:6;27987:14;27984:1;27981:21;27976:1;27969:9;27962:17;27958:45;27955:71;;;28006:18;;:::i;:::-;-1:-1:-1;28046:9:486;;27893:168::o;28066:217::-;28106:1;28132;28122:132;;28176:10;28171:3;28167:20;28164:1;28157:31;28211:4;28208:1;28201:15;28239:4;28236:1;28229:15;28122:132;-1:-1:-1;28268:9:486;;28066:217::o;29983:597::-;30095:4;30124:2;30153;30142:9;30135:21;30185:6;30179:13;30228:6;30223:2;30212:9;30208:18;30201:34;30253:1;30263:140;30277:6;30274:1;30271:13;30263:140;;;30372:14;;;30368:23;;30362:30;30338:17;;;30357:2;30334:26;30327:66;30292:10;;30263:140;;;30421:6;30418:1;30415:13;30412:91;;;30491:1;30486:2;30477:6;30466:9;30462:22;30458:31;30451:42;30412:91;-1:-1:-1;30564:2:486;30543:15;-1:-1:-1;;30539:29:486;30524:45;;;;30571:2;30520:54;;29983:597;-1:-1:-1;;;29983:597:486:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_addRewardsDistributor(address)": "b9b5b153", + "_afterNonReentrant()": "632e5142", + "_becomeImplementation()": "5d72de62", + "_beforeNonReentrant()": "c90c20b1", + "_borrowGuardianPaused()": "e6653f3d", + "_deployMarket(uint8,bytes,bytes,uint256)": "b452ef62", + "_getExtensionFunctions()": "89f8132e", + "_mintGuardianPaused()": "3c94786f", + "_setCloseFactor(uint256)": "317b0b77", + "_setCollateralFactor(address,uint256)": "e4028eee", + "_setLiquidationIncentive(uint256)": "4fd42e17", + "_setPriceOracle(address)": "55ee1fe1", + "_setWhitelistEnforcement(bool)": "952adf5a", + "_setWhitelistStatuses(address[],bool[])": "c8c9c975", + "accountAssets(address,uint256)": "dce15449", + "admin()": "f851a440", + "adminHasRights()": "0a755ec2", + "allBorrowers(uint256)": "7515bafa", + "allMarkets(uint256)": "52d84d1e", + "borrowAllowed(address,address,uint256)": "da3d454c", + "borrowCapForCollateral(address,address)": "940cd6f1", + "borrowCapGuardian()": "21af4569", + "borrowCaps(address)": "4a584432", + "borrowGuardianPaused(address)": "6d154ea5", + "borrowWithinLimits(address,uint256)": "779b2294", + "borrowingAgainstCollateralBlacklist(address,address)": "1c819e43", + "cTokensByUnderlying(address)": "31ff47fa", + "checkMembership(address,address)": "929fe9a1", + "closeFactorMantissa()": "e8755446", + "enforceWhitelist()": "b0957210", + "enterMarkets(address[])": "c2998238", + "exitMarket(address)": "ede4edd0", + "getAccountLiquidity(address)": "5ec88c79", + "getAssetsIn(address)": "abfceffc", + "getHypotheticalAccountLiquidity(address,address,uint256,uint256)": "4e79238f", + "getMaxRedeemOrBorrow(address,address,bool)": "1976828e", + "ionicAdmin()": "c91a424f", + "ionicAdminHasRights()": "cf6bfd2d", + "isComptroller()": "007e3dd2", + "isDeprecated(address)": "94543c15", + "liquidateBorrowAllowed(address,address,address,address,uint256)": "5fc7e71e", + "liquidateCalculateSeizeTokens(address,address,uint256)": "c488847b", + "liquidationIncentiveMantissa()": "4ada90af", + "markets(address)": "8e8f294b", + "mintAllowed(address,address,uint256)": "4ef4c3e1", + "mintGuardianPaused(address)": "731f0c2b", + "mintVerify(address,address,uint256,uint256)": "41c728b9", + "nonAccruingRewardsDistributors(uint256)": "6bd02b8a", + "oracle()": "7dc0d1d0", + "pauseGuardian()": "24a3d622", + "pendingAdmin()": "26782247", + "redeemAllowed(address,address,uint256)": "eabe7d91", + "redeemVerify(address,address,uint256,uint256)": "51dff989", + "repayBorrowAllowed(address,address,address,uint256)": "24008a62", + "rewardsDistributors(uint256)": "c6c5b0dd", + "seizeAllowed(address,address,address,address,uint256)": "d02f7351", + "seizeGuardianPaused()": "ac0b0bb7", + "suppliers(address)": "16dc15fe", + "supplyCaps(address)": "02c3bcbb", + "transferAllowed(address,address,address,uint256)": "bdcdc258", + "transferGuardianPaused()": "87f76303", + "whitelist(address)": "9b19251a", + "whitelistArray(uint256)": "d251fefc" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/ComptrollerFirstExtension.json b/packages/sdk/deployments/mode/ComptrollerFirstExtension.json new file mode 100644 index 0000000000..68f730f276 --- /dev/null +++ b/packages/sdk/deployments/mode/ComptrollerFirstExtension.json @@ -0,0 +1,3177 @@ +{ + "address": "0xE1A3006be645a80F206311d9f18C866c204bA02f", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "action", + "type": "string" + }, + { + "indexed": false, + "internalType": "bool", + "name": "pauseState", + "type": "bool" + } + ], + "name": "ActionPaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "error", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "info", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "detail", + "type": "uint256" + } + ], + "name": "Failure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "action", + "type": "string" + }, + { + "indexed": false, + "internalType": "bool", + "name": "pauseState", + "type": "bool" + } + ], + "name": "MarketActionPaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "MarketUnlisted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBorrowCap", + "type": "uint256" + } + ], + "name": "NewBorrowCap", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldBorrowCapGuardian", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newBorrowCapGuardian", + "type": "address" + } + ], + "name": "NewBorrowCapGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPauseGuardian", + "type": "address" + } + ], + "name": "NewPauseGuardian", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSupplyCap", + "type": "uint256" + } + ], + "name": "NewSupplyCap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "bool", + "name": "blacklisted", + "type": "bool" + } + ], + "name": "_blacklistBorrowingAgainstCollateral", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "name": "_blacklistBorrowingAgainstCollateralWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "name": "_borrowCapWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "_mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "flywheelAddress", + "type": "address" + } + ], + "name": "_removeFlywheel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "borrowCap", + "type": "uint256" + } + ], + "name": "_setBorrowCapForCollateral", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "name": "_setBorrowCapForCollateralWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newBorrowCapGuardian", + "type": "address" + } + ], + "name": "_setBorrowCapGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "name": "_setBorrowPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20[]", + "name": "cTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "newBorrowCaps", + "type": "uint256[]" + } + ], + "name": "_setMarketBorrowCaps", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20[]", + "name": "cTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "newSupplyCaps", + "type": "uint256[]" + } + ], + "name": "_setMarketSupplyCaps", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "name": "_setMintPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPauseGuardian", + "type": "address" + } + ], + "name": "_setPauseGuardian", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "name": "_setSeizePaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "name": "_setTransferPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "name": "_supplyCapWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "_unsupportMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "accountAssets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "flywheelAddress", + "type": "address" + } + ], + "name": "addNonAccruingFlywheel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "adminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "allBorrowers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "allMarkets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "borrowCapForCollateral", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "borrowCapGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "borrowCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "borrowingAgainstCollateralBlacklist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "cTokensByUnderlying", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "closeFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enforceWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAccruingFlywheels", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllBorrowers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllMarkets", + "outputs": [ + { + "internalType": "contract ICErc20[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "collateral", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "bool", + "name": "redeeming", + "type": "bool" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getAssetAsCollateralValueCap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRewardsDistributors", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getWhitelist", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + } + ], + "name": "getWhitelistedBorrowersBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "borrowed", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + } + ], + "name": "getWhitelistedSuppliersSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "supplied", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ionicAdminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isBlacklistBorrowingAgainstCollateralWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isBorrowCapForCollateralWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isBorrowCapWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isComptroller", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isSupplyCapWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isUserOfPool", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "liquidationIncentiveMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "markets", + "outputs": [ + { + "internalType": "bool", + "name": "isListed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "nonAccruingRewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "rewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seizeGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "suppliers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "supplyCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "transferGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "whitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x533df5e695cef9a83865804e3caf401ecac86ceecc814130b3ce27ae8f1cf27c", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xE1A3006be645a80F206311d9f18C866c204bA02f", + "transactionIndex": 1, + "gasUsed": "3041908", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5c4be78bbb67b24bc897d84ac888ce6da6f44497c8c869681c0736c404cffb66", + "transactionHash": "0x533df5e695cef9a83865804e3caf401ecac86ceecc814130b3ce27ae8f1cf27c", + "logs": [], + "blockNumber": 2067095, + "cumulativeGasUsed": "3094409", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "action", + "type": "string", + "indexed": false + }, + { + "internalType": "bool", + "name": "pauseState", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "ActionPaused", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + }, + { + "internalType": "string", + "name": "action", + "type": "string", + "indexed": false + }, + { + "internalType": "bool", + "name": "pauseState", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "MarketActionPaused", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MarketUnlisted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "newBorrowCap", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewBorrowCap", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldBorrowCapGuardian", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newBorrowCapGuardian", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewBorrowCapGuardian", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPauseGuardian", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPauseGuardian", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "newSupplyCap", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewSupplyCap", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "bool", + "name": "blacklisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_blacklistBorrowingAgainstCollateral" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_blacklistBorrowingAgainstCollateralWhitelist" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_borrowCapWhitelist" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "flywheelAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_removeFlywheel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "borrowCap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setBorrowCapForCollateral" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setBorrowCapForCollateralWhitelist" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newBorrowCapGuardian", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setBorrowCapGuardian" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setBorrowPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20[]", + "name": "cTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "newBorrowCaps", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setMarketBorrowCaps" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20[]", + "name": "cTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "newSupplyCaps", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setMarketSupplyCaps" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setMintPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPauseGuardian", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPauseGuardian", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setSeizePaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setTransferPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_supplyCapWhitelist" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_unsupportMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "accountAssets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "flywheelAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addNonAccruingFlywheel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allBorrowers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allMarkets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowCapForCollateral", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowCapGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowingAgainstCollateralBlacklist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "cTokensByUnderlying", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "closeFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "enforceWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAccruingFlywheels", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllBorrowers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllMarkets", + "outputs": [ + { + "internalType": "contract ICErc20[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "collateral", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "bool", + "name": "redeeming", + "type": "bool" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAssetAsCollateralValueCap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getRewardsDistributors", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getWhitelist", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getWhitelistedBorrowersBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "borrowed", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getWhitelistedSuppliersSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "supplied", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isBlacklistBorrowingAgainstCollateralWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isBorrowCapForCollateralWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isBorrowCapWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "isComptroller", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isSupplyCapWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isUserOfPool", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidationIncentiveMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "markets", + "outputs": [ + { + "internalType": "bool", + "name": "isListed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "nonAccruingRewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "oracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "rewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "seizeGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "suppliers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supplyCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "transferGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "whitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "_removeFlywheel(address)": { + "details": "Removes a flywheel from the accruing or non-accruing array", + "params": { + "flywheelAddress": "The address of the flywheel to remove from the accruing or non-accruing array" + }, + "returns": { + "_0": "true if the flywheel was found and removed" + } + }, + "_setBorrowCapGuardian(address)": { + "params": { + "newBorrowCapGuardian": "The address of the new Borrow Cap Guardian" + } + }, + "_setMarketBorrowCaps(address[],uint256[])": { + "details": "Admin or borrowCapGuardian function to set the borrow caps. A borrow cap of 0 corresponds to unlimited borrowing.", + "params": { + "cTokens": "The addresses of the markets (tokens) to change the borrow caps for", + "newBorrowCaps": "The new borrow cap values in underlying to be set. A value of 0 corresponds to unlimited borrowing." + } + }, + "_setMarketSupplyCaps(address[],uint256[])": { + "details": "Admin or borrowCapGuardian function to set the supply caps. A supply cap of 0 corresponds to unlimited supplying.", + "params": { + "cTokens": "The addresses of the markets (tokens) to change the supply caps for", + "newSupplyCaps": "The new supply cap values in underlying to be set. A value of 0 corresponds to unlimited supplying." + } + }, + "_setPauseGuardian(address)": { + "params": { + "newPauseGuardian": "The address of the new Pause Guardian" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See enum Error for details)" + } + }, + "_unsupportMarket(address)": { + "details": "Admin function unset isListed and collateralFactorMantissa and unadd support for the market", + "params": { + "cToken": "The address of the market (token) to unlist" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See enum Error for details)" + } + }, + "addNonAccruingFlywheel(address)": { + "details": "Adds a flywheel to the non-accruing list and if already in the accruing, removes it from that list", + "params": { + "flywheelAddress": "The address of the flywheel to add to the non-accruing" + } + }, + "getAllBorrowers()": { + "details": "The automatic getter may be used to access an individual borrower.", + "returns": { + "_0": "The list of borrower account addresses" + } + }, + "getAllMarkets()": { + "details": "The automatic getter may be used to access an individual market.", + "returns": { + "_0": "The list of market addresses" + } + }, + "getWhitelist()": { + "details": "The automatic getter may be used to access an individual whitelist status.", + "returns": { + "_0": "The list of borrower account addresses" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_setBorrowCapGuardian(address)": { + "notice": "Admin function to change the Borrow Cap Guardian" + }, + "_setMarketBorrowCaps(address[],uint256[])": { + "notice": "Set the given borrow caps for the given cToken markets. Borrowing that brings total borrows to or above borrow cap will revert." + }, + "_setMarketSupplyCaps(address[],uint256[])": { + "notice": "Set the given supply caps for the given cToken markets. Supplying that brings total underlying supply to or above supply cap will revert." + }, + "_setPauseGuardian(address)": { + "notice": "Admin function to change the Pause Guardian" + }, + "_unsupportMarket(address)": { + "notice": "Removed a market from the markets mapping and sets it as unlisted" + }, + "accountAssets(address,uint256)": { + "notice": "Per-account mapping of \"assets you are in\", capped by maxAssets" + }, + "addNonAccruingFlywheel(address)": { + "notice": "Returns true if the accruing flyhwheel was found and replaced" + }, + "admin()": { + "notice": "Administrator for this contract" + }, + "adminHasRights()": { + "notice": "Whether or not the admin has admin rights" + }, + "allBorrowers(uint256)": { + "notice": "A list of all borrowers who have entered markets" + }, + "allMarkets(uint256)": { + "notice": "A list of all markets" + }, + "borrowCapGuardian()": { + "notice": "The borrowCapGuardian can set borrowCaps to any number for any market. Lowering the borrow cap could disable borrowing on the given market." + }, + "borrowCaps(address)": { + "notice": "Borrow caps enforced by borrowAllowed for each cToken address. Defaults to zero which corresponds to unlimited borrowing." + }, + "cTokensByUnderlying(address)": { + "notice": "All cTokens addresses mapped by their underlying token addresses" + }, + "closeFactorMantissa()": { + "notice": "Multiplier used to calculate the maximum repayAmount when liquidating a borrow" + }, + "enforceWhitelist()": { + "notice": "Whether or not the supplier whitelist is enforced" + }, + "getAllBorrowers()": { + "notice": "Return all of the borrowers" + }, + "getAllMarkets()": { + "notice": "Return all of the markets" + }, + "getRewardsDistributors()": { + "notice": "Returns an array of all accruing and non-accruing flywheels" + }, + "getWhitelist()": { + "notice": "Return all of the whitelist" + }, + "ionicAdminHasRights()": { + "notice": "Whether or not the Ionic admin has admin rights" + }, + "isComptroller()": { + "notice": "Indicator that this is a Comptroller contract (for inspection)" + }, + "liquidationIncentiveMantissa()": { + "notice": "Multiplier representing the discount on collateral that a liquidator receives" + }, + "markets(address)": { + "notice": "Official mapping of cTokens -> Market metadata" + }, + "nonAccruingRewardsDistributors(uint256)": { + "notice": "RewardsDistributor to list for claiming, but not to notify of flywheel changes." + }, + "oracle()": { + "notice": "Oracle which gives the price of any given asset" + }, + "pauseGuardian()": { + "notice": "The Pause Guardian can pause certain actions as a safety mechanism. Actions which allow users to remove their own assets cannot be paused. Liquidation / seizing / transfer can only be paused globally, not by market." + }, + "pendingAdmin()": { + "notice": "Pending administrator for this contract" + }, + "rewardsDistributors(uint256)": { + "notice": "RewardsDistributor contracts to notify of flywheel changes." + }, + "supplyCaps(address)": { + "notice": "Supply caps enforced by mintAllowed for each cToken address. Defaults to zero which corresponds to unlimited supplying." + }, + "whitelist(address)": { + "notice": "Maps addresses to booleans indicating if they are allowed to supply assets (i.e., mint cTokens)" + }, + "whitelistArray(uint256)": { + "notice": "An array of all whitelisted accounts" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/ComptrollerFirstExtension.sol": "ComptrollerFirstExtension" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerFirstExtension.sol": { + "keccak256": "0x65154bbaf9227ecfebad990b0e94776d01c2c30d17012173555c1e75630a5d86", + "urls": [ + "bzz-raw://501caff02513dd2fc935d48e5b71bf21dc9985f57a03743f8054740565a60cbe", + "dweb:/ipfs/QmWNbtAa5T6uB8dqCVJ7jajzCEkeNLHPL27EVooiFo3PTC" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040526002805461ffff60a01b191661010160a01b17905534801561002557600080fd5b506135a5806100356000396000f3fe608060405234801561001057600080fd5b50600436106103c45760003560e01c8063731f0c2b116101ff578063be945a641161011a578063d9e0ea6b116100ad578063ee5b9a2f1161007c578063ee5b9a2f146108f4578063f851a44014610907578063f874eb0c1461091a578063fb6243fa1461092d57600080fd5b8063d9e0ea6b146108b1578063dce15449146108c4578063e6653f3d146108d7578063e8755446146108eb57600080fd5b8063cf6bfd2d116100e9578063cf6bfd2d1461086f578063d01f63f514610883578063d219fca71461088b578063d251fefc1461089e57600080fd5b8063be945a6414610823578063c6c5b0dd14610836578063c76ae26014610849578063c91a424f1461085c57600080fd5b80638ebf636411610192578063ac0b0bb711610161578063ac0b0bb7146107e7578063b0772d0b146107fb578063b095721014610803578063b32538011461081057600080fd5b80638ebf636414610773578063940cd6f1146107865780639b19251a146107b1578063a5fb4857146107d457600080fd5b8063819605a8116101ce578063819605a8146106f357806387f763031461070657806389f8132e1461071a5780638e8f294b1461072f57600080fd5b8063731f0c2b146106975780637515bafa146106ba578063783f1096146106cd5780637dc0d1d0146106e057600080fd5b80633605b51b116102ef57806351a485e411610282578063607ef6c111610251578063607ef6c11461063b578063692fd2a91461064e5780636bd02b8a146106615780636d154ea51461067457600080fd5b806351a485e4146105ef57806351c8491d1461060257806352d84d1e146106155780635f5af1aa1461062857600080fd5b80633c94786f116102be5780633c94786f146105aa5780634a584432146105be5780634a76e727146105de5780634ada90af146105e657600080fd5b80633605b51b14610567578063391957d71461056f5780633a72cb5e146105845780633bcf7ec11461059757600080fd5b80631c819e4311610367578063267822471161033657806326782247146105035780632d70db781461051657806331ff47fa1461052957806332abcdbe1461055257600080fd5b80631c819e431461048457806321af4569146104b25780632273f40e146104dd57806324a3d622146104f057600080fd5b80630a755ec2116103a35780630a755ec214610427578063109908ce1461043b57806316dc15fe1461044e57806318c882a51461047157600080fd5b80627e3dd2146103c957806302c3bcbb146103e6578063088e0fce14610414575b600080fd5b6103d1600181565b60405190151581526020015b60405180910390f35b6104066103f4366004612fe0565b60186020526000908152604090205481565b6040519081526020016103dd565b6103d1610422366004612ffd565b610940565b6002546103d190600160a81b900460ff1681565b6103d1610449366004612fe0565b610979565b6103d161045c366004612fe0565b600d6020526000908152604090205460ff1681565b6103d161047f36600461305d565b610bd7565b6103d1610492366004613092565b601d60209081526000928352604080842090915290825290205460ff1681565b6016546104c5906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b6103d16104eb366004613092565b610d1d565b6013546104c5906001600160a01b031681565b6002546104c5906001600160a01b031681565b6103d16105243660046130cb565b610d45565b6104c5610537366004612fe0565b600e602052600090815260409020546001600160a01b031681565b61055a610e28565b6040516103dd91906130e6565b61055a610e8a565b61058261057d366004612fe0565b610ff2565b005b610406610592366004612fe0565b61107d565b6103d16105a536600461305d565b611168565b6013546103d190600160a01b900460ff1681565b6104066105cc366004612fe0565b60176020526000908152604090205481565b61055a61129f565b61040660055481565b6105826105fd36600461317f565b6112ff565b6105826106103660046131eb565b611488565b6104c5610623366004613232565b6114fa565b610406610636366004612fe0565b611524565b61058261064936600461317f565b6115a4565b6103d161065c366004612fe0565b611724565b6104c561066f366004613232565b6118bf565b6103d1610682366004612fe0565b60156020526000908152604090205460ff1681565b6103d16106a5366004612fe0565b60146020526000908152604090205460ff1681565b6104c56106c8366004613232565b6118cf565b6104066106db36600461324b565b6118df565b6003546104c5906001600160a01b031681565b610406610701366004612fe0565b611bd3565b6013546103d190600160b01b900460ff1681565b610722611f09565b6040516103dd91906132a5565b61075c61073d366004612fe0565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016103dd565b6103d16107813660046130cb565b612722565b610406610794366004613092565b601c60209081526000928352604080842090915290825290205481565b6103d16107bf366004612fe0565b60106020526000908152604090205460ff1681565b6105826107e23660046132e7565b6127fc565b6013546103d190600160b81b900460ff1681565b61055a61284c565b600f546103d19060ff1681565b6103d161081e366004613092565b6128ac565b6105826108313660046131eb565b6128ce565b6104c5610844366004613232565b61293c565b610582610857366004613328565b61294c565b6000546104c5906001600160a01b031681565b6002546103d190600160a01b900460ff1681565b61055a6129e1565b610582610899366004613328565b612a41565b6104c56108ac366004613232565b612ac9565b6103d16108bf366004612fe0565b612ad9565b6104c56108d2366004613382565b612b5a565b6013546103d190600160a81b900460ff1681565b61040660045481565b6105826109023660046131eb565b612b92565b6001546104c5906001600160a01b031681565b6103d1610928366004612ffd565b612bf0565b61040661093b366004612fe0565b612c21565b6001600160a01b038084166000908152601e6020908152604080832093861683529290529081206109719083612d04565b949350505050565b6000610983612d26565b6109a85760405162461bcd60e51b815260040161099f906133ae565b60405180910390fd5b6001600160a01b0382166109ea5760405162461bcd60e51b815260206004820152600960248201526808599b1e5dda19595b60ba1b604482015260640161099f565b60005b601954811015610af15760198181548110610a0a57610a0a6133ce565b6000918252602090912001546001600160a01b0384811691161415610adf5760198054610a39906001906133fa565b81548110610a4957610a496133ce565b600091825260209091200154601980546001600160a01b039092169183908110610a7557610a756133ce565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506019805480610ab457610ab4613411565b600082815260209020810160001990810180546001600160a01b031916905501905550600192915050565b80610ae981613427565b9150506109ed565b5060005b601b54811015610bce57601b8181548110610b1257610b126133ce565b6000918252602090912001546001600160a01b0384811691161415610bbc57601b8054610b41906001906133fa565b81548110610b5157610b516133ce565b600091825260209091200154601b80546001600160a01b039092169183908110610b7d57610b7d6133ce565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b805480610ab457610ab4613411565b80610bc681613427565b915050610af5565b50600092915050565b6001600160a01b03821660009081526008602052604081205460ff16610c295760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b604482015260640161099f565b6013546001600160a01b0316331480610c455750610c45612d26565b610c615760405162461bcd60e51b815260040161099f90613442565b610c69612d26565b80610c7657506001821515145b610c925760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b038316600081815260156020908152604091829020805460ff19168615159081179091558251938452606091840182905260069184019190915265426f72726f7760d01b6080840152908201527f4ab2c577b7459254dd330a38beef1d66ae70ba1ab28db7147d52d3a752a03cdc9060a0015b60405180910390a150805b92915050565b6001600160a01b03821660009081526020805260408120610d3e9083612d04565b9392505050565b6013546000906001600160a01b0316331480610d645750610d64612d26565b610d805760405162461bcd60e51b815260040161099f90613442565b610d88612d26565b80610d9557506001821515145b610db15760405162461bcd60e51b815260040161099f906133ae565b60138054831515600160b81b0260ff60b81b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610e1c9084906040808252600590820152645365697a6560d81b6060820152901515602082015260800190565b60405180910390a15090565b6060600b805480602002602001604051908101604052809291908181526020018280548015610e8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e62575b5050505050905090565b601b54601954606091600091610ea09190613465565b67ffffffffffffffff811115610eb857610eb861347d565b604051908082528060200260200182016040528015610ee1578160200160208202803683370190505b50905060005b60195460ff82161015610f675760198160ff1681548110610f0a57610f0a6133ce565b9060005260206000200160009054906101000a90046001600160a01b0316828260ff1681518110610f3d57610f3d6133ce565b6001600160a01b039092166020928302919091019091015280610f5f81613493565b915050610ee7565b60005b601b5460ff82161015610fea57601b8160ff1681548110610f8d57610f8d6133ce565b6000918252602090912001546001600160a01b031683610fad83856134b3565b60ff1681518110610fc057610fc06133ce565b6001600160a01b039092166020928302919091019091015280610fe281613493565b915050610f6a565b509092915050565b6001546001600160a01b0316331461101c5760405162461bcd60e51b815260040161099f906133ae565b601680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527feda98690e518e9a05f8ec6837663e188211b2da8f4906648b323f2c1d4434e29910160405180910390a15050565b6001600160a01b038116600090815260216020526040812081906110a090612d7a565b905060005b815181101561116157836001600160a01b03166317bfdfbc8383815181106110cf576110cf6133ce565b60200260200101516040518263ffffffff1660e01b815260040161110291906001600160a01b0391909116815260200190565b602060405180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114391906134d8565b61114d9084613465565b92508061115981613427565b9150506110a5565b5050919050565b6001600160a01b03821660009081526008602052604081205460ff166111ba5760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b604482015260640161099f565b6013546001600160a01b03163314806111d657506111d6612d26565b6111f25760405162461bcd60e51b815260040161099f90613442565b6111fa612d26565b8061120757506001821515145b6112235760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b038316600081815260146020908152604091829020805460ff19168615159081179091558251938452606091840182905260049184019190915263135a5b9d60e21b6080840152908201527f4ab2c577b7459254dd330a38beef1d66ae70ba1ab28db7147d52d3a752a03cdc9060a001610d0c565b60606019805480602002602001604051908101604052809291908181526020018280548015610e80576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e62575050505050905090565b6001546001600160a01b031633148061132257506016546001600160a01b031633145b61133e5760405162461bcd60e51b815260040161099f906133ae565b8281811580159061134e57508082145b6113835760405162461bcd60e51b8152602060048201526006602482015265085a5b9c1d5d60d21b604482015260640161099f565b60005b8281101561147f578484828181106113a0576113a06133ce565b90506020020135601860008989858181106113bd576113bd6133ce565b90506020020160208101906113d29190612fe0565b6001600160a01b031681526020810191909152604001600020558686828181106113fe576113fe6133ce565b90506020020160208101906114139190612fe0565b6001600160a01b03167f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f886868481811061144f5761144f6133ce565b9050602002013560405161146591815260200190565b60405180910390a28061147781613427565b915050611386565b50505050505050565b611490612d26565b6114ac5760405162461bcd60e51b815260040161099f906133ae565b80156114d9576001600160a01b038316600090815260208052604090206114d39083612d87565b50505050565b6001600160a01b038316600090815260208052604090206114d39083612d9c565b6009818154811061150a57600080fd5b6000918252602090912001546001600160a01b0316905081565b600061152e612d26565b61153e57610d1760016017612db1565b601380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e910160405180910390a160009392505050565b6001546001600160a01b03163314806115c757506016546001600160a01b031633145b6115e35760405162461bcd60e51b815260040161099f906133ae565b828181158015906115f357508082145b6116285760405162461bcd60e51b8152602060048201526006602482015265085a5b9c1d5d60d21b604482015260640161099f565b60005b8281101561147f57848482818110611645576116456133ce565b9050602002013560176000898985818110611662576116626133ce565b90506020020160208101906116779190612fe0565b6001600160a01b031681526020810191909152604001600020558686828181106116a3576116a36133ce565b90506020020160208101906116b89190612fe0565b6001600160a01b03167f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f68686848181106116f4576116f46133ce565b9050602002013560405161170a91815260200190565b60405180910390a28061171c81613427565b91505061162b565b600061172e612d26565b61174a5760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600960248201526808599b1e5dda19595b60ba1b604482015260640161099f565b60005b601b5481101561181557601b81815481106117ac576117ac6133ce565b6000918252602090912001546001600160a01b03848116911614156118035760405162461bcd60e51b815260206004820152600d60248201526c08585b1c9958591e5859191959609a1b604482015260640161099f565b8061180d81613427565b91505061178f565b50601b805460018101825560009182527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319166001600160a01b0385161790555b601954811015610bce576019818154811061187e5761187e6133ce565b6000918252602090912001546001600160a01b03848116911614156118ad5760198054610a39906001906133fa565b806118b781613427565b915050611861565b601b818154811061150a57600080fd5b600b818154811061150a57600080fd5b6000836001600160a01b0316856001600160a01b0316148015611900575082155b1561190d57506000610971565b6000196001600160a01b03851615611a87576001600160a01b038086166000908152601d60209081526040808320938a168352929052205460ff16801561198057506001600160a01b038086166000908152601f60209081526040808320938a1683529290522061197e9084612d04565b155b1561198d57506000611a87565b6001600160a01b038086166000908152601c60209081526040808320938a168352929052205480158015906119ee57506001600160a01b038087166000908152601e60209081526040808320938b168352929052206119ec9085612d04565b155b15611a855760035460405163fc57d4df60e01b81526001600160a01b038881166004830152600092169063fc57d4df90602401602060405180830381865afa158015611a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6291906134d8565b9050670de0b6b3a7640000611a778284613507565b611a819190613526565b9250505b505b6001600160a01b03861660009081526018602052604090205415801590611acc57506001600160a01b03861660009081526020805260409020611aca9084612d04565b155b15611bca5760035460405163fc57d4df60e01b81526001600160a01b038881166004830152600092169063fc57d4df90602401602060405180830381865afa158015611b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4091906134d8565b6001600160a01b03881660009081526018602052604081205491925090670de0b6b3a764000090611b72908490613507565b611b7c9190613526565b6001600160a01b038916600090815260086020526040902060010154909150670de0b6b3a764000090611baf9083613507565b611bb99190613526565b905082811015611bc7578092505b50505b95945050505050565b6000611bdd612d26565b611bed57610d1760016018612db1565b6001600160a01b03821660009081526008602052604090205460ff16611c1957610d1760086019612db1565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7d91906134d8565b1115611c8f57610d176014601a612db1565b6001600160a01b0382166000908152600860209081526040808320805460ff19168155600101839055600980548251818502810185019093528083529192909190830182828015611d0957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ceb575b5050835193945083925060009150505b82811015611d6e57856001600160a01b0316848281518110611d3d57611d3d6133ce565b60200260200101516001600160a01b03161415611d5c57809150611d6e565b80611d6681613427565b915050611d19565b50818110611d7e57611d7e613548565b60098054611d8e906001906133fa565b81548110611d9e57611d9e6133ce565b600091825260209091200154600980546001600160a01b039092169183908110611dca57611dca6133ce565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506009805480611e0957611e09613411565b6001900381819060005260206000200160006101000a8154906001600160a01b03021916905590556000600e6000876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e99919061355e565b6001600160a01b039081168252602080830193909352604091820160002080546001600160a01b031916948216949094179093555191871682527f302feb03efd5741df80efe7f97f5d93d74d46a542a3d312d0faae64fa1f3e0e9910160405180910390a1600095945050505050565b60408051601e8082526103e082019092526060919060009082602082016103c08036833701905050905063692fd2a960e01b81611f458461357b565b93508360ff1681518110611f5b57611f5b6133ce565b6001600160e01b031990921660209283029190910190910152631469217960e21b81611f868461357b565b93508360ff1681518110611f9c57611f9c6133ce565b6001600160e01b03199092166020928302919091019091015263607ef6c160e01b81611fc78461357b565b93508360ff1681518110611fdd57611fdd6133ce565b6001600160e01b03199092166020928302919091019091015263d219fca760e01b816120088461357b565b93508360ff168151811061201e5761201e6133ce565b6001600160e01b03199092166020928302919091019091015263063b571360e51b816120498461357b565b93508360ff168151811061205f5761205f6133ce565b6001600160e01b0319909216602092830291909101909101526351c8491d60e01b8161208a8461357b565b93508360ff16815181106120a0576120a06133ce565b6001600160e01b031990921660209283029190910190910152632fa5169960e21b816120cb8461357b565b93508360ff16815181106120e1576120e16133ce565b6001600160e01b03199092166020928302919091019091015263391957d760e01b8161210c8461357b565b93508360ff1681518110612122576121226133ce565b6001600160e01b031990921660209283029190910190910152632fad78d560e11b8161214d8461357b565b93508360ff1681518110612163576121636133ce565b6001600160e01b031990921660209283029190910190910152633bcf7ec160e01b8161218e8461357b565b93508360ff16815181106121a4576121a46133ce565b6001600160e01b0319909216602092830291909101909101526318c882a560e01b816121cf8461357b565b93508360ff16815181106121e5576121e56133ce565b6001600160e01b0319909216602092830291909101909101526323afd8d960e21b816122108461357b565b93508360ff1681518110612226576122266133ce565b6001600160e01b0319909216602092830291909101909101526305ae1b6f60e31b816122518461357b565b93508360ff1681518110612267576122676133ce565b6001600160e01b031990921660209283029190910190910152631032c0b560e31b816122928461357b565b93508360ff16815181106122a8576122a86133ce565b6001600160e01b03199092166020928302919091019091015263b0772d0b60e01b816122d38461357b565b93508360ff16815181106122e9576122e96133ce565b6001600160e01b031990921660209283029190910190910152631955e6df60e11b816123148461357b565b93508360ff168151811061232a5761232a6133ce565b6001600160e01b03199092166020928302919091019091015263d01f63f560e01b816123558461357b565b93508360ff168151811061236b5761236b6133ce565b6001600160e01b031990921660209283029190910190910152633605b51b60e01b816123968461357b565b93508360ff16815181106123ac576123ac6133ce565b6001600160e01b03199092166020928302919091019091015263d9e0ea6b60e01b816123d78461357b565b93508360ff16815181106123ed576123ed6133ce565b6001600160e01b031990921660209283029190910190910152634a76e72760e01b816124188461357b565b93508360ff168151811061242e5761242e6133ce565b6001600160e01b03199092166020928302919091019091015263084c846760e11b816124598461357b565b93508360ff168151811061246f5761246f6133ce565b6001600160e01b03199092166020928302919091019091015263a5fb485760e01b8161249a8461357b565b93508360ff16815181106124b0576124b06133ce565b6001600160e01b03199092166020928302919091019091015263ee5b9a2f60e01b816124db8461357b565b93508360ff16815181106124f1576124f16133ce565b6001600160e01b03199092166020928302919091019091015263044707e760e11b8161251c8461357b565b93508360ff1681518110612532576125326133ce565b6001600160e01b031990921660209283029190910190910152633e1d3ac360e21b8161255d8461357b565b93508360ff1681518110612573576125736133ce565b6001600160e01b031990921660209283029190910190910152631139fa0760e11b8161259e8461357b565b93508360ff16815181106125b4576125b46133ce565b6001600160e01b03199092166020928302919091019091015263b325380160e01b816125df8461357b565b93508360ff16815181106125f5576125f56133ce565b6001600160e01b031990921660209283029190910190910152637db121fd60e11b816126208461357b565b93508360ff1681518110612636576126366133ce565b6001600160e01b031990921660209283029190910190910152631d3965af60e11b816126618461357b565b93508360ff1681518110612677576126776133ce565b6001600160e01b031990921660209283029190910190910152633c1f884b60e11b816126a28461357b565b93508360ff16815181106126b8576126b86133ce565b6001600160e01b03199092166020928302919091019091015260ff821615610d175760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161099f565b6013546000906001600160a01b03163314806127415750612741612d26565b61275d5760405162461bcd60e51b815260040161099f90613442565b612765612d26565b8061277257506001821515145b61278e5760405162461bcd60e51b815260040161099f906133ae565b60138054831515600160b01b0260ff60b01b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610e1c9084906040808252600890820152672a3930b739b332b960c11b6060820152901515602082015260800190565b612804612d26565b6128205760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b039283166000908152601c602090815260408083209490951682529290925291902055565b60606009805480602002602001604051908101604052809291908181526020018280548015610e80576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e62575050505050905090565b6001600160a01b0382166000908152602160205260408120610d3e9083612d04565b6128d6612d26565b6128f25760405162461bcd60e51b815260040161099f906133ae565b801561291a576001600160a01b03831660009081526021602052604090206114d39083612d87565b6001600160a01b03831660009081526021602052604090206114d39083612d9c565b6019818154811061150a57600080fd5b612954612d26565b6129705760405162461bcd60e51b815260040161099f906133ae565b80156129ab576001600160a01b038085166000908152601f602090815260408083209387168352929052206129a59083612d87565b506114d3565b6001600160a01b038085166000908152601f602090815260408083209387168352929052206129da9083612d9c565b5050505050565b60606011805480602002602001604051908101604052809291908181526020018280548015610e80576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e62575050505050905090565b612a49612d26565b612a655760405162461bcd60e51b815260040161099f906133ae565b8015612a9a576001600160a01b038085166000908152601e602090815260408083209387168352929052206129a59083612d87565b6001600160a01b038085166000908152601e602090815260408083209387168352929052206129da9083612d9c565b6011818154811061150a57600080fd5b6000805b600954811015610bce57600060098281548110612afc57612afc6133ce565b60009182526020808320909101546001600160a01b03908116808452600883526040808520928916855260029092019092529091205490915060ff1615612b47575060019392505050565b5080612b5281613427565b915050612add565b60076020528160005260406000208181548110612b7657600080fd5b6000918252602090912001546001600160a01b03169150829050565b612b9a612d26565b612bb65760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b039283166000908152601d6020908152604080832094909516825292909252919020805460ff1916911515919091179055565b6001600160a01b038084166000908152601f6020908152604080832093861683529290529081206109719083612d04565b6001600160a01b038116600090815260208052604081208190612c4390612d7a565b905060005b815181101561116157836001600160a01b0316633af9e669838381518110612c7257612c726133ce565b60200260200101516040518263ffffffff1660e01b8152600401612ca591906001600160a01b0391909116815260200190565b602060405180830381865afa158015612cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce691906134d8565b612cf09084613465565b925080612cfc81613427565b915050612c48565b6001600160a01b03811660009081526001830160205260408120541515610d3e565b6001546000906001600160a01b031633148015612d4c5750600254600160a81b900460ff165b80612d7557506000546001600160a01b031633148015612d755750600254600160a01b900460ff165b905090565b60606000610d3e83612e2a565b6000610d3e836001600160a01b038416612e86565b6000610d3e836001600160a01b038416612ed5565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836014811115612de657612de66134f1565b83601a811115612df857612df86134f1565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610d3e57610d3e6134f1565b606081600001805480602002602001604051908101604052809291908181526020018280548015612e7a57602002820191906000526020600020905b815481526020019060010190808311612e66575b50505050509050919050565b6000818152600183016020526040812054612ecd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d17565b506000610d17565b60008181526001830160205260408120548015612fbe576000612ef96001836133fa565b8554909150600090612f0d906001906133fa565b9050818114612f72576000866000018281548110612f2d57612f2d6133ce565b9060005260206000200154905080876000018481548110612f5057612f506133ce565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f8357612f83613411565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d17565b6000915050610d17565b6001600160a01b0381168114612fdd57600080fd5b50565b600060208284031215612ff257600080fd5b8135610d3e81612fc8565b60008060006060848603121561301257600080fd5b833561301d81612fc8565b9250602084013561302d81612fc8565b9150604084013561303d81612fc8565b809150509250925092565b8035801515811461305857600080fd5b919050565b6000806040838503121561307057600080fd5b823561307b81612fc8565b915061308960208401613048565b90509250929050565b600080604083850312156130a557600080fd5b82356130b081612fc8565b915060208301356130c081612fc8565b809150509250929050565b6000602082840312156130dd57600080fd5b610d3e82613048565b6020808252825182820181905260009190848201906040850190845b818110156131275783516001600160a01b031683529284019291840191600101613102565b50909695505050505050565b60008083601f84011261314557600080fd5b50813567ffffffffffffffff81111561315d57600080fd5b6020830191508360208260051b850101111561317857600080fd5b9250929050565b6000806000806040858703121561319557600080fd5b843567ffffffffffffffff808211156131ad57600080fd5b6131b988838901613133565b909650945060208701359150808211156131d257600080fd5b506131df87828801613133565b95989497509550505050565b60008060006060848603121561320057600080fd5b833561320b81612fc8565b9250602084013561321b81612fc8565b915061322960408501613048565b90509250925092565b60006020828403121561324457600080fd5b5035919050565b6000806000806080858703121561326157600080fd5b843561326c81612fc8565b9350602085013561327c81612fc8565b925061328a60408601613048565b9150606085013561329a81612fc8565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b818110156131275783516001600160e01b031916835292840192918401916001016132c1565b6000806000606084860312156132fc57600080fd5b833561330781612fc8565b9250602084013561331781612fc8565b929592945050506040919091013590565b6000806000806080858703121561333e57600080fd5b843561334981612fc8565b9350602085013561335981612fc8565b9250604085013561336981612fc8565b915061337760608601613048565b905092959194509250565b6000806040838503121561339557600080fd5b82356133a081612fc8565b946020939093013593505050565b60208082526006908201526510b0b236b4b760d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561340c5761340c6133e4565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561343b5761343b6133e4565b5060010190565b60208082526009908201526810b3bab0b93234b0b760b91b604082015260600190565b60008219821115613478576134786133e4565b500190565b634e487b7160e01b600052604160045260246000fd5b600060ff821660ff8114156134aa576134aa6133e4565b60010192915050565b600060ff821660ff84168060ff038211156134d0576134d06133e4565b019392505050565b6000602082840312156134ea57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b6000816000190483118215151615613521576135216133e4565b500290565b60008261354357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b60006020828403121561357057600080fd5b8151610d3e81612fc8565b600060ff82168061358e5761358e6133e4565b600019019291505056fea164736f6c634300080a000a", + "sourceMap": "416:19806:15:-:0;;;622:38:17;;;-1:-1:-1;;;;732:33:17;-1:-1:-1;;;732:33:17;;;416:19806:15;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106103c45760003560e01c8063731f0c2b116101ff578063be945a641161011a578063d9e0ea6b116100ad578063ee5b9a2f1161007c578063ee5b9a2f146108f4578063f851a44014610907578063f874eb0c1461091a578063fb6243fa1461092d57600080fd5b8063d9e0ea6b146108b1578063dce15449146108c4578063e6653f3d146108d7578063e8755446146108eb57600080fd5b8063cf6bfd2d116100e9578063cf6bfd2d1461086f578063d01f63f514610883578063d219fca71461088b578063d251fefc1461089e57600080fd5b8063be945a6414610823578063c6c5b0dd14610836578063c76ae26014610849578063c91a424f1461085c57600080fd5b80638ebf636411610192578063ac0b0bb711610161578063ac0b0bb7146107e7578063b0772d0b146107fb578063b095721014610803578063b32538011461081057600080fd5b80638ebf636414610773578063940cd6f1146107865780639b19251a146107b1578063a5fb4857146107d457600080fd5b8063819605a8116101ce578063819605a8146106f357806387f763031461070657806389f8132e1461071a5780638e8f294b1461072f57600080fd5b8063731f0c2b146106975780637515bafa146106ba578063783f1096146106cd5780637dc0d1d0146106e057600080fd5b80633605b51b116102ef57806351a485e411610282578063607ef6c111610251578063607ef6c11461063b578063692fd2a91461064e5780636bd02b8a146106615780636d154ea51461067457600080fd5b806351a485e4146105ef57806351c8491d1461060257806352d84d1e146106155780635f5af1aa1461062857600080fd5b80633c94786f116102be5780633c94786f146105aa5780634a584432146105be5780634a76e727146105de5780634ada90af146105e657600080fd5b80633605b51b14610567578063391957d71461056f5780633a72cb5e146105845780633bcf7ec11461059757600080fd5b80631c819e4311610367578063267822471161033657806326782247146105035780632d70db781461051657806331ff47fa1461052957806332abcdbe1461055257600080fd5b80631c819e431461048457806321af4569146104b25780632273f40e146104dd57806324a3d622146104f057600080fd5b80630a755ec2116103a35780630a755ec214610427578063109908ce1461043b57806316dc15fe1461044e57806318c882a51461047157600080fd5b80627e3dd2146103c957806302c3bcbb146103e6578063088e0fce14610414575b600080fd5b6103d1600181565b60405190151581526020015b60405180910390f35b6104066103f4366004612fe0565b60186020526000908152604090205481565b6040519081526020016103dd565b6103d1610422366004612ffd565b610940565b6002546103d190600160a81b900460ff1681565b6103d1610449366004612fe0565b610979565b6103d161045c366004612fe0565b600d6020526000908152604090205460ff1681565b6103d161047f36600461305d565b610bd7565b6103d1610492366004613092565b601d60209081526000928352604080842090915290825290205460ff1681565b6016546104c5906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b6103d16104eb366004613092565b610d1d565b6013546104c5906001600160a01b031681565b6002546104c5906001600160a01b031681565b6103d16105243660046130cb565b610d45565b6104c5610537366004612fe0565b600e602052600090815260409020546001600160a01b031681565b61055a610e28565b6040516103dd91906130e6565b61055a610e8a565b61058261057d366004612fe0565b610ff2565b005b610406610592366004612fe0565b61107d565b6103d16105a536600461305d565b611168565b6013546103d190600160a01b900460ff1681565b6104066105cc366004612fe0565b60176020526000908152604090205481565b61055a61129f565b61040660055481565b6105826105fd36600461317f565b6112ff565b6105826106103660046131eb565b611488565b6104c5610623366004613232565b6114fa565b610406610636366004612fe0565b611524565b61058261064936600461317f565b6115a4565b6103d161065c366004612fe0565b611724565b6104c561066f366004613232565b6118bf565b6103d1610682366004612fe0565b60156020526000908152604090205460ff1681565b6103d16106a5366004612fe0565b60146020526000908152604090205460ff1681565b6104c56106c8366004613232565b6118cf565b6104066106db36600461324b565b6118df565b6003546104c5906001600160a01b031681565b610406610701366004612fe0565b611bd3565b6013546103d190600160b01b900460ff1681565b610722611f09565b6040516103dd91906132a5565b61075c61073d366004612fe0565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016103dd565b6103d16107813660046130cb565b612722565b610406610794366004613092565b601c60209081526000928352604080842090915290825290205481565b6103d16107bf366004612fe0565b60106020526000908152604090205460ff1681565b6105826107e23660046132e7565b6127fc565b6013546103d190600160b81b900460ff1681565b61055a61284c565b600f546103d19060ff1681565b6103d161081e366004613092565b6128ac565b6105826108313660046131eb565b6128ce565b6104c5610844366004613232565b61293c565b610582610857366004613328565b61294c565b6000546104c5906001600160a01b031681565b6002546103d190600160a01b900460ff1681565b61055a6129e1565b610582610899366004613328565b612a41565b6104c56108ac366004613232565b612ac9565b6103d16108bf366004612fe0565b612ad9565b6104c56108d2366004613382565b612b5a565b6013546103d190600160a81b900460ff1681565b61040660045481565b6105826109023660046131eb565b612b92565b6001546104c5906001600160a01b031681565b6103d1610928366004612ffd565b612bf0565b61040661093b366004612fe0565b612c21565b6001600160a01b038084166000908152601e6020908152604080832093861683529290529081206109719083612d04565b949350505050565b6000610983612d26565b6109a85760405162461bcd60e51b815260040161099f906133ae565b60405180910390fd5b6001600160a01b0382166109ea5760405162461bcd60e51b815260206004820152600960248201526808599b1e5dda19595b60ba1b604482015260640161099f565b60005b601954811015610af15760198181548110610a0a57610a0a6133ce565b6000918252602090912001546001600160a01b0384811691161415610adf5760198054610a39906001906133fa565b81548110610a4957610a496133ce565b600091825260209091200154601980546001600160a01b039092169183908110610a7557610a756133ce565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506019805480610ab457610ab4613411565b600082815260209020810160001990810180546001600160a01b031916905501905550600192915050565b80610ae981613427565b9150506109ed565b5060005b601b54811015610bce57601b8181548110610b1257610b126133ce565b6000918252602090912001546001600160a01b0384811691161415610bbc57601b8054610b41906001906133fa565b81548110610b5157610b516133ce565b600091825260209091200154601b80546001600160a01b039092169183908110610b7d57610b7d6133ce565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b805480610ab457610ab4613411565b80610bc681613427565b915050610af5565b50600092915050565b6001600160a01b03821660009081526008602052604081205460ff16610c295760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b604482015260640161099f565b6013546001600160a01b0316331480610c455750610c45612d26565b610c615760405162461bcd60e51b815260040161099f90613442565b610c69612d26565b80610c7657506001821515145b610c925760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b038316600081815260156020908152604091829020805460ff19168615159081179091558251938452606091840182905260069184019190915265426f72726f7760d01b6080840152908201527f4ab2c577b7459254dd330a38beef1d66ae70ba1ab28db7147d52d3a752a03cdc9060a0015b60405180910390a150805b92915050565b6001600160a01b03821660009081526020805260408120610d3e9083612d04565b9392505050565b6013546000906001600160a01b0316331480610d645750610d64612d26565b610d805760405162461bcd60e51b815260040161099f90613442565b610d88612d26565b80610d9557506001821515145b610db15760405162461bcd60e51b815260040161099f906133ae565b60138054831515600160b81b0260ff60b81b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610e1c9084906040808252600590820152645365697a6560d81b6060820152901515602082015260800190565b60405180910390a15090565b6060600b805480602002602001604051908101604052809291908181526020018280548015610e8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e62575b5050505050905090565b601b54601954606091600091610ea09190613465565b67ffffffffffffffff811115610eb857610eb861347d565b604051908082528060200260200182016040528015610ee1578160200160208202803683370190505b50905060005b60195460ff82161015610f675760198160ff1681548110610f0a57610f0a6133ce565b9060005260206000200160009054906101000a90046001600160a01b0316828260ff1681518110610f3d57610f3d6133ce565b6001600160a01b039092166020928302919091019091015280610f5f81613493565b915050610ee7565b60005b601b5460ff82161015610fea57601b8160ff1681548110610f8d57610f8d6133ce565b6000918252602090912001546001600160a01b031683610fad83856134b3565b60ff1681518110610fc057610fc06133ce565b6001600160a01b039092166020928302919091019091015280610fe281613493565b915050610f6a565b509092915050565b6001546001600160a01b0316331461101c5760405162461bcd60e51b815260040161099f906133ae565b601680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527feda98690e518e9a05f8ec6837663e188211b2da8f4906648b323f2c1d4434e29910160405180910390a15050565b6001600160a01b038116600090815260216020526040812081906110a090612d7a565b905060005b815181101561116157836001600160a01b03166317bfdfbc8383815181106110cf576110cf6133ce565b60200260200101516040518263ffffffff1660e01b815260040161110291906001600160a01b0391909116815260200190565b602060405180830381865afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114391906134d8565b61114d9084613465565b92508061115981613427565b9150506110a5565b5050919050565b6001600160a01b03821660009081526008602052604081205460ff166111ba5760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b604482015260640161099f565b6013546001600160a01b03163314806111d657506111d6612d26565b6111f25760405162461bcd60e51b815260040161099f90613442565b6111fa612d26565b8061120757506001821515145b6112235760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b038316600081815260146020908152604091829020805460ff19168615159081179091558251938452606091840182905260049184019190915263135a5b9d60e21b6080840152908201527f4ab2c577b7459254dd330a38beef1d66ae70ba1ab28db7147d52d3a752a03cdc9060a001610d0c565b60606019805480602002602001604051908101604052809291908181526020018280548015610e80576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e62575050505050905090565b6001546001600160a01b031633148061132257506016546001600160a01b031633145b61133e5760405162461bcd60e51b815260040161099f906133ae565b8281811580159061134e57508082145b6113835760405162461bcd60e51b8152602060048201526006602482015265085a5b9c1d5d60d21b604482015260640161099f565b60005b8281101561147f578484828181106113a0576113a06133ce565b90506020020135601860008989858181106113bd576113bd6133ce565b90506020020160208101906113d29190612fe0565b6001600160a01b031681526020810191909152604001600020558686828181106113fe576113fe6133ce565b90506020020160208101906114139190612fe0565b6001600160a01b03167f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f886868481811061144f5761144f6133ce565b9050602002013560405161146591815260200190565b60405180910390a28061147781613427565b915050611386565b50505050505050565b611490612d26565b6114ac5760405162461bcd60e51b815260040161099f906133ae565b80156114d9576001600160a01b038316600090815260208052604090206114d39083612d87565b50505050565b6001600160a01b038316600090815260208052604090206114d39083612d9c565b6009818154811061150a57600080fd5b6000918252602090912001546001600160a01b0316905081565b600061152e612d26565b61153e57610d1760016017612db1565b601380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e910160405180910390a160009392505050565b6001546001600160a01b03163314806115c757506016546001600160a01b031633145b6115e35760405162461bcd60e51b815260040161099f906133ae565b828181158015906115f357508082145b6116285760405162461bcd60e51b8152602060048201526006602482015265085a5b9c1d5d60d21b604482015260640161099f565b60005b8281101561147f57848482818110611645576116456133ce565b9050602002013560176000898985818110611662576116626133ce565b90506020020160208101906116779190612fe0565b6001600160a01b031681526020810191909152604001600020558686828181106116a3576116a36133ce565b90506020020160208101906116b89190612fe0565b6001600160a01b03167f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f68686848181106116f4576116f46133ce565b9050602002013560405161170a91815260200190565b60405180910390a28061171c81613427565b91505061162b565b600061172e612d26565b61174a5760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b03821661178c5760405162461bcd60e51b815260206004820152600960248201526808599b1e5dda19595b60ba1b604482015260640161099f565b60005b601b5481101561181557601b81815481106117ac576117ac6133ce565b6000918252602090912001546001600160a01b03848116911614156118035760405162461bcd60e51b815260206004820152600d60248201526c08585b1c9958591e5859191959609a1b604482015260640161099f565b8061180d81613427565b91505061178f565b50601b805460018101825560009182527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319166001600160a01b0385161790555b601954811015610bce576019818154811061187e5761187e6133ce565b6000918252602090912001546001600160a01b03848116911614156118ad5760198054610a39906001906133fa565b806118b781613427565b915050611861565b601b818154811061150a57600080fd5b600b818154811061150a57600080fd5b6000836001600160a01b0316856001600160a01b0316148015611900575082155b1561190d57506000610971565b6000196001600160a01b03851615611a87576001600160a01b038086166000908152601d60209081526040808320938a168352929052205460ff16801561198057506001600160a01b038086166000908152601f60209081526040808320938a1683529290522061197e9084612d04565b155b1561198d57506000611a87565b6001600160a01b038086166000908152601c60209081526040808320938a168352929052205480158015906119ee57506001600160a01b038087166000908152601e60209081526040808320938b168352929052206119ec9085612d04565b155b15611a855760035460405163fc57d4df60e01b81526001600160a01b038881166004830152600092169063fc57d4df90602401602060405180830381865afa158015611a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6291906134d8565b9050670de0b6b3a7640000611a778284613507565b611a819190613526565b9250505b505b6001600160a01b03861660009081526018602052604090205415801590611acc57506001600160a01b03861660009081526020805260409020611aca9084612d04565b155b15611bca5760035460405163fc57d4df60e01b81526001600160a01b038881166004830152600092169063fc57d4df90602401602060405180830381865afa158015611b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4091906134d8565b6001600160a01b03881660009081526018602052604081205491925090670de0b6b3a764000090611b72908490613507565b611b7c9190613526565b6001600160a01b038916600090815260086020526040902060010154909150670de0b6b3a764000090611baf9083613507565b611bb99190613526565b905082811015611bc7578092505b50505b95945050505050565b6000611bdd612d26565b611bed57610d1760016018612db1565b6001600160a01b03821660009081526008602052604090205460ff16611c1957610d1760086019612db1565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7d91906134d8565b1115611c8f57610d176014601a612db1565b6001600160a01b0382166000908152600860209081526040808320805460ff19168155600101839055600980548251818502810185019093528083529192909190830182828015611d0957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ceb575b5050835193945083925060009150505b82811015611d6e57856001600160a01b0316848281518110611d3d57611d3d6133ce565b60200260200101516001600160a01b03161415611d5c57809150611d6e565b80611d6681613427565b915050611d19565b50818110611d7e57611d7e613548565b60098054611d8e906001906133fa565b81548110611d9e57611d9e6133ce565b600091825260209091200154600980546001600160a01b039092169183908110611dca57611dca6133ce565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506009805480611e0957611e09613411565b6001900381819060005260206000200160006101000a8154906001600160a01b03021916905590556000600e6000876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e99919061355e565b6001600160a01b039081168252602080830193909352604091820160002080546001600160a01b031916948216949094179093555191871682527f302feb03efd5741df80efe7f97f5d93d74d46a542a3d312d0faae64fa1f3e0e9910160405180910390a1600095945050505050565b60408051601e8082526103e082019092526060919060009082602082016103c08036833701905050905063692fd2a960e01b81611f458461357b565b93508360ff1681518110611f5b57611f5b6133ce565b6001600160e01b031990921660209283029190910190910152631469217960e21b81611f868461357b565b93508360ff1681518110611f9c57611f9c6133ce565b6001600160e01b03199092166020928302919091019091015263607ef6c160e01b81611fc78461357b565b93508360ff1681518110611fdd57611fdd6133ce565b6001600160e01b03199092166020928302919091019091015263d219fca760e01b816120088461357b565b93508360ff168151811061201e5761201e6133ce565b6001600160e01b03199092166020928302919091019091015263063b571360e51b816120498461357b565b93508360ff168151811061205f5761205f6133ce565b6001600160e01b0319909216602092830291909101909101526351c8491d60e01b8161208a8461357b565b93508360ff16815181106120a0576120a06133ce565b6001600160e01b031990921660209283029190910190910152632fa5169960e21b816120cb8461357b565b93508360ff16815181106120e1576120e16133ce565b6001600160e01b03199092166020928302919091019091015263391957d760e01b8161210c8461357b565b93508360ff1681518110612122576121226133ce565b6001600160e01b031990921660209283029190910190910152632fad78d560e11b8161214d8461357b565b93508360ff1681518110612163576121636133ce565b6001600160e01b031990921660209283029190910190910152633bcf7ec160e01b8161218e8461357b565b93508360ff16815181106121a4576121a46133ce565b6001600160e01b0319909216602092830291909101909101526318c882a560e01b816121cf8461357b565b93508360ff16815181106121e5576121e56133ce565b6001600160e01b0319909216602092830291909101909101526323afd8d960e21b816122108461357b565b93508360ff1681518110612226576122266133ce565b6001600160e01b0319909216602092830291909101909101526305ae1b6f60e31b816122518461357b565b93508360ff1681518110612267576122676133ce565b6001600160e01b031990921660209283029190910190910152631032c0b560e31b816122928461357b565b93508360ff16815181106122a8576122a86133ce565b6001600160e01b03199092166020928302919091019091015263b0772d0b60e01b816122d38461357b565b93508360ff16815181106122e9576122e96133ce565b6001600160e01b031990921660209283029190910190910152631955e6df60e11b816123148461357b565b93508360ff168151811061232a5761232a6133ce565b6001600160e01b03199092166020928302919091019091015263d01f63f560e01b816123558461357b565b93508360ff168151811061236b5761236b6133ce565b6001600160e01b031990921660209283029190910190910152633605b51b60e01b816123968461357b565b93508360ff16815181106123ac576123ac6133ce565b6001600160e01b03199092166020928302919091019091015263d9e0ea6b60e01b816123d78461357b565b93508360ff16815181106123ed576123ed6133ce565b6001600160e01b031990921660209283029190910190910152634a76e72760e01b816124188461357b565b93508360ff168151811061242e5761242e6133ce565b6001600160e01b03199092166020928302919091019091015263084c846760e11b816124598461357b565b93508360ff168151811061246f5761246f6133ce565b6001600160e01b03199092166020928302919091019091015263a5fb485760e01b8161249a8461357b565b93508360ff16815181106124b0576124b06133ce565b6001600160e01b03199092166020928302919091019091015263ee5b9a2f60e01b816124db8461357b565b93508360ff16815181106124f1576124f16133ce565b6001600160e01b03199092166020928302919091019091015263044707e760e11b8161251c8461357b565b93508360ff1681518110612532576125326133ce565b6001600160e01b031990921660209283029190910190910152633e1d3ac360e21b8161255d8461357b565b93508360ff1681518110612573576125736133ce565b6001600160e01b031990921660209283029190910190910152631139fa0760e11b8161259e8461357b565b93508360ff16815181106125b4576125b46133ce565b6001600160e01b03199092166020928302919091019091015263b325380160e01b816125df8461357b565b93508360ff16815181106125f5576125f56133ce565b6001600160e01b031990921660209283029190910190910152637db121fd60e11b816126208461357b565b93508360ff1681518110612636576126366133ce565b6001600160e01b031990921660209283029190910190910152631d3965af60e11b816126618461357b565b93508360ff1681518110612677576126776133ce565b6001600160e01b031990921660209283029190910190910152633c1f884b60e11b816126a28461357b565b93508360ff16815181106126b8576126b86133ce565b6001600160e01b03199092166020928302919091019091015260ff821615610d175760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161099f565b6013546000906001600160a01b03163314806127415750612741612d26565b61275d5760405162461bcd60e51b815260040161099f90613442565b612765612d26565b8061277257506001821515145b61278e5760405162461bcd60e51b815260040161099f906133ae565b60138054831515600160b01b0260ff60b01b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610e1c9084906040808252600890820152672a3930b739b332b960c11b6060820152901515602082015260800190565b612804612d26565b6128205760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b039283166000908152601c602090815260408083209490951682529290925291902055565b60606009805480602002602001604051908101604052809291908181526020018280548015610e80576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e62575050505050905090565b6001600160a01b0382166000908152602160205260408120610d3e9083612d04565b6128d6612d26565b6128f25760405162461bcd60e51b815260040161099f906133ae565b801561291a576001600160a01b03831660009081526021602052604090206114d39083612d87565b6001600160a01b03831660009081526021602052604090206114d39083612d9c565b6019818154811061150a57600080fd5b612954612d26565b6129705760405162461bcd60e51b815260040161099f906133ae565b80156129ab576001600160a01b038085166000908152601f602090815260408083209387168352929052206129a59083612d87565b506114d3565b6001600160a01b038085166000908152601f602090815260408083209387168352929052206129da9083612d9c565b5050505050565b60606011805480602002602001604051908101604052809291908181526020018280548015610e80576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e62575050505050905090565b612a49612d26565b612a655760405162461bcd60e51b815260040161099f906133ae565b8015612a9a576001600160a01b038085166000908152601e602090815260408083209387168352929052206129a59083612d87565b6001600160a01b038085166000908152601e602090815260408083209387168352929052206129da9083612d9c565b6011818154811061150a57600080fd5b6000805b600954811015610bce57600060098281548110612afc57612afc6133ce565b60009182526020808320909101546001600160a01b03908116808452600883526040808520928916855260029092019092529091205490915060ff1615612b47575060019392505050565b5080612b5281613427565b915050612add565b60076020528160005260406000208181548110612b7657600080fd5b6000918252602090912001546001600160a01b03169150829050565b612b9a612d26565b612bb65760405162461bcd60e51b815260040161099f906133ae565b6001600160a01b039283166000908152601d6020908152604080832094909516825292909252919020805460ff1916911515919091179055565b6001600160a01b038084166000908152601f6020908152604080832093861683529290529081206109719083612d04565b6001600160a01b038116600090815260208052604081208190612c4390612d7a565b905060005b815181101561116157836001600160a01b0316633af9e669838381518110612c7257612c726133ce565b60200260200101516040518263ffffffff1660e01b8152600401612ca591906001600160a01b0391909116815260200190565b602060405180830381865afa158015612cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce691906134d8565b612cf09084613465565b925080612cfc81613427565b915050612c48565b6001600160a01b03811660009081526001830160205260408120541515610d3e565b6001546000906001600160a01b031633148015612d4c5750600254600160a81b900460ff165b80612d7557506000546001600160a01b031633148015612d755750600254600160a01b900460ff165b905090565b60606000610d3e83612e2a565b6000610d3e836001600160a01b038416612e86565b6000610d3e836001600160a01b038416612ed5565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836014811115612de657612de66134f1565b83601a811115612df857612df86134f1565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610d3e57610d3e6134f1565b606081600001805480602002602001604051908101604052809291908181526020018280548015612e7a57602002820191906000526020600020905b815481526020019060010190808311612e66575b50505050509050919050565b6000818152600183016020526040812054612ecd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d17565b506000610d17565b60008181526001830160205260408120548015612fbe576000612ef96001836133fa565b8554909150600090612f0d906001906133fa565b9050818114612f72576000866000018281548110612f2d57612f2d6133ce565b9060005260206000200154905080876000018481548110612f5057612f506133ce565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f8357612f83613411565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d17565b6000915050610d17565b6001600160a01b0381168114612fdd57600080fd5b50565b600060208284031215612ff257600080fd5b8135610d3e81612fc8565b60008060006060848603121561301257600080fd5b833561301d81612fc8565b9250602084013561302d81612fc8565b9150604084013561303d81612fc8565b809150509250925092565b8035801515811461305857600080fd5b919050565b6000806040838503121561307057600080fd5b823561307b81612fc8565b915061308960208401613048565b90509250929050565b600080604083850312156130a557600080fd5b82356130b081612fc8565b915060208301356130c081612fc8565b809150509250929050565b6000602082840312156130dd57600080fd5b610d3e82613048565b6020808252825182820181905260009190848201906040850190845b818110156131275783516001600160a01b031683529284019291840191600101613102565b50909695505050505050565b60008083601f84011261314557600080fd5b50813567ffffffffffffffff81111561315d57600080fd5b6020830191508360208260051b850101111561317857600080fd5b9250929050565b6000806000806040858703121561319557600080fd5b843567ffffffffffffffff808211156131ad57600080fd5b6131b988838901613133565b909650945060208701359150808211156131d257600080fd5b506131df87828801613133565b95989497509550505050565b60008060006060848603121561320057600080fd5b833561320b81612fc8565b9250602084013561321b81612fc8565b915061322960408501613048565b90509250925092565b60006020828403121561324457600080fd5b5035919050565b6000806000806080858703121561326157600080fd5b843561326c81612fc8565b9350602085013561327c81612fc8565b925061328a60408601613048565b9150606085013561329a81612fc8565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b818110156131275783516001600160e01b031916835292840192918401916001016132c1565b6000806000606084860312156132fc57600080fd5b833561330781612fc8565b9250602084013561331781612fc8565b929592945050506040919091013590565b6000806000806080858703121561333e57600080fd5b843561334981612fc8565b9350602085013561335981612fc8565b9250604085013561336981612fc8565b915061337760608601613048565b905092959194509250565b6000806040838503121561339557600080fd5b82356133a081612fc8565b946020939093013593505050565b60208082526006908201526510b0b236b4b760d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561340c5761340c6133e4565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561343b5761343b6133e4565b5060010190565b60208082526009908201526810b3bab0b93234b0b760b91b604082015260600190565b60008219821115613478576134786133e4565b500190565b634e487b7160e01b600052604160045260246000fd5b600060ff821660ff8114156134aa576134aa6133e4565b60010192915050565b600060ff821660ff84168060ff038211156134d0576134d06133e4565b019392505050565b6000602082840312156134ea57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b6000816000190483118215151615613521576135216133e4565b500290565b60008261354357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052600160045260246000fd5b60006020828403121561357057600080fd5b8151610d3e81612fc8565b600060ff82168061358e5761358e6133e4565b600019019291505056fea164736f6c634300080a000a", + "sourceMap": "416:19806:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9511:41:16;;9548:4;9511:41;;;;;179:14:486;;172:22;154:41;;142:2;127:18;9511:41:16;;;;;;;;4769:45:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;740:25:486;;;728:2;713:18;4769:45:17;594:177:486;14481:252:15;;;;;;:::i;:::-;;:::i;732:33:17:-;;;;;-1:-1:-1;;;732:33:17;;;;;;19035:889:15;;;;;;:::i;:::-;;:::i;3013:41:17:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11138:397:15;;;;;;:::i;:::-;;:::i;5549:87:17:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4412:32;;;;;-1:-1:-1;;;;;4412:32:17;;;;;;-1:-1:-1;;;;;2369:32:486;;;2351:51;;2339:2;2324:18;4412:32:17;2205:203:486;15991:154:15;;;;;;:::i;:::-;;:::i;3912:28:17:-;;;;;-1:-1:-1;;;;;3912:28:17;;;517:27;;;;;-1:-1:-1;;;;;517:27:17;;;11840:288:15;;;;;;:::i;:::-;;:::i;3138:54:17:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3138:54:17;;;17692:96:15;;;:::i;:::-;;;;;;;:::i;18168:506::-;;;:::i;9484:484::-;;;;;;:::i;:::-;;:::i;:::-;;16910:332;;;;;;:::i;:::-;;:::i;10743:391::-;;;;;;:::i;:::-;;:::i;3944:31:17:-;;;;;-1:-1:-1;;;3944:31:17;;;;;;4585:45;;;;;;:::i;:::-;;;;;;;;;;;;;;18678:110:15;;;:::i;1446:43:17:-;;;;;;7803:516:15;;;;;;:::i;:::-;;:::i;15722:265::-;;;;;;:::i;:::-;;:::i;2513:27:17:-;;;;;;:::i;:::-;;:::i;10187:552:15:-;;;;;;:::i;:::-;;:::i;8814:516::-;;;;;;:::i;:::-;;:::i;4297:773::-;;;;;;:::i;:::-;;:::i;5229:47:17:-;;;;;;:::i;:::-;;:::i;4143:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4089:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2749:29;;;;;;:::i;:::-;;:::i;5074:2224:15:-;;;;;;:::i;:::-;;:::i;1166:29:17:-;;;;;-1:-1:-1;;;;;1166:29:17;;;12467:1367:15;;;;;;:::i;:::-;;:::i;4016:34:17:-;;;;;-1:-1:-1;;;4016:34:17;;;;;;1497:2517:15;;;:::i;:::-;;;;;;;:::i;2431:41:17:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7320:14:486;;7313:22;7295:41;;7367:2;7352:18;;7345:34;;;;7268:18;2431:41:17;7127:258:486;11539:297:15;;;;;;:::i;:::-;;:::i;5380:77:17:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3404:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13838:244:15;;;;;;:::i;:::-;;:::i;4054:31:17:-;;;;;-1:-1:-1;;;4054:31:17;;;;;;17414:92:15;;;:::i;3261:28:17:-;;;;;;;;;16752:154:15;;;;;;:::i;:::-;;:::i;16483:265::-;;;;;;:::i;:::-;;:::i;4893:36:17:-;;;;;;:::i;:::-;;:::i;15009:427:15:-;;;;;;:::i;:::-;;:::i;332:33:17:-;;;;;-1:-1:-1;;;;;332:33:17;;;622:38;;;;;-1:-1:-1;;;622:38:17;;;;;;17982:97:15;;;:::i;14086:391::-;;;;;;:::i;:::-;;:::i;3501:31:17:-;;;;;;:::i;:::-;;:::i;19928:292:15:-;;;;;;:::i;:::-;;:::i;1739:50:17:-;;;;;;:::i;:::-;;:::i;3979:33::-;;;;;-1:-1:-1;;;3979:33:17;;;;;;1304:34;;;;;;14737:268:15;;;;;;:::i;:::-;;:::i;427:20:17:-;;;;;-1:-1:-1;;;;;427:20:17;;;15440:278:15;;;;;;:::i;:::-;;:::i;16149:330::-;;;;;;:::i;:::-;;:::i;14481:252::-;-1:-1:-1;;;;;14647:45:15;;;14628:4;14647:45;;;:31;:45;;;;;;;;:63;;;;;;;;;;;:81;;14720:7;14647:72;:81::i;:::-;14640:88;14481:252;-1:-1:-1;;;;14481:252:15:o;19035:889::-;19103:4;19123:16;:14;:16::i;:::-;19115:35;;;;-1:-1:-1;;;19115:35:15;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;19164:29:15;;19156:51;;;;-1:-1:-1;;;19156:51:15;;10214:2:486;19156:51:15;;;10196:21:486;10253:1;10233:18;;;10226:29;-1:-1:-1;;;10271:18:486;;;10264:39;10320:18;;19156:51:15;10012:332:486;19156:51:15;19254:9;19249:269;19273:19;:26;19269:30;;19249:269;;;19337:19;19357:1;19337:22;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;19318:41:15;;;19337:22;;19318:41;19314:198;;;19396:19;19416:26;;:30;;19445:1;;19416:30;:::i;:::-;19396:51;;;;;;;;:::i;:::-;;;;;;;;;;;19371:19;:22;;-1:-1:-1;;;;;19396:51:15;;;;19391:1;;19371:22;;;;;;:::i;:::-;;;;;;;;;:76;;;;;-1:-1:-1;;;;;19371:76:15;;;;;-1:-1:-1;;;;;19371:76:15;;;;;;19457:19;:25;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;19457:25:15;;;;;-1:-1:-1;;;;;;19457:25:15;;;;;;-1:-1:-1;19457:25:15;;19035:889;-1:-1:-1;;19035:889:15:o;19314:198::-;19301:3;;;;:::i;:::-;;;;19249:269;;;;19571:9;19566:335;19590:30;:37;19586:41;;19566:335;;;19665:30;19696:1;19665:33;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;19646:52:15;;;19665:33;;19646:52;19642:253;;;19746:30;19777:37;;:41;;19817:1;;19777:41;:::i;:::-;19746:73;;;;;;;;:::i;:::-;;;;;;;;;;;19710:30;:33;;-1:-1:-1;;;;;19746:73:15;;;;19741:1;;19710:33;;;;;;:::i;:::-;;;;;;;;;:109;;;;;-1:-1:-1;;;;;19710:109:15;;;;;-1:-1:-1;;;;;19710:109:15;;;;;;19829:30;:36;;;;;;;:::i;19642:253::-;19629:3;;;;:::i;:::-;;;;19566:335;;;-1:-1:-1;19914:5:15;;19035:889;-1:-1:-1;;19035:889:15:o;11138:397::-;-1:-1:-1;;;;;11228:24:15;;11208:4;11228:24;;;:7;:24;;;;;:33;;;11220:53;;;;-1:-1:-1;;;11220:53:15;;11217:2:486;11220:53:15;;;11199:21:486;11256:1;11236:18;;;11229:29;-1:-1:-1;;;11274:18:486;;;11267:37;11321:18;;11220:53:15;11015:330:486;11220:53:15;11301:13;;-1:-1:-1;;;;;11301:13:15;11287:10;:27;;:47;;;11318:16;:14;:16::i;:::-;11279:69;;;;-1:-1:-1;;;11279:69:15;;;;;;;:::i;:::-;11362:16;:14;:16::i;:::-;:33;;;-1:-1:-1;11391:4:15;11382:13;;;;11362:33;11354:52;;;;-1:-1:-1;;;11354:52:15;;;;;;;:::i;:::-;-1:-1:-1;;;;;11413:37:15;;;;;;:20;:37;;;;;;;;;:45;;-1:-1:-1;;11413:45:15;;;;;;;;;;11469:43;;11938:51:486;;;12025:2;12005:18;;;11998:30;;;12064:1;12044:18;;;12037:29;;;;-1:-1:-1;;;12097:3:486;12082:19;;12075:37;12164:18;;;12157:50;11469:43:15;;11976:3:486;12129:19;11469:43:15;;;;;;;;-1:-1:-1;11525:5:15;11138:397;;;;;:::o;15991:154::-;-1:-1:-1;;;;;16096:26:15;;16077:4;16096:26;;;:18;:26;;;;;:44;;16132:7;16096:35;:44::i;:::-;16089:51;15991:154;-1:-1:-1;;;15991:154:15:o;11840:288::-;11927:13;;11893:4;;-1:-1:-1;;;;;11927:13:15;11913:10;:27;;:47;;;11944:16;:14;:16::i;:::-;11905:69;;;;-1:-1:-1;;;11905:69:15;;;;;;;:::i;:::-;11988:16;:14;:16::i;:::-;:33;;;-1:-1:-1;12017:4:15;12008:13;;;;11988:33;11980:52;;;;-1:-1:-1;;;11980:52:15;;;;;;;:::i;:::-;12039:19;:27;;;;;-1:-1:-1;;;12039:27:15;-1:-1:-1;;;;12039:27:15;;;;;;12077:28;;;;;;12061:5;;12442:2:486;12424:21;;;12481:1;12461:18;;;12454:29;-1:-1:-1;;;12514:2:486;12499:18;;12492:35;12608:14;;12601:22;12594:4;12579:20;;12572:52;12559:3;12544:19;;12218:412;12077:28:15;;;;;;;;-1:-1:-1;12118:5:15;11840:288::o;17692:96::-;17740:16;17771:12;17764:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17764:19:15;;;;;;;;;;;;;;;;;;;;;;;17692:96;:::o;18168:506::-;18324:30;:37;18295:19;:26;18225:16;;18249:29;;18295:66;;18324:37;18295:66;:::i;:::-;18281:81;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18281:81:15;;18249:113;;18369:7;18386:105;18397:19;:26;18393:30;;;;18386:105;;;18451:19;18471:1;18451:22;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18451:22:15;18433:12;18446:1;18433:15;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18433:40:15;;;:15;;;;;;;;;;;:40;18481:3;;;;:::i;:::-;;;;18386:105;;;18496:7;18513:131;18524:30;:37;18520:41;;;;18513:131;;;18593:30;18624:1;18593:33;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;18593:33:15;18571:12;18584:5;18588:1;18584;:5;:::i;:::-;18571:19;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18571:55:15;;;:19;;;;;;;;;;;:55;18634:3;;;;:::i;:::-;;;;18513:131;;;-1:-1:-1;18657:12:15;;18168:506;-1:-1:-1;;18168:506:15:o;9484:484::-;9582:5;;-1:-1:-1;;;;;9582:5:15;9568:10;:19;9560:38;;;;-1:-1:-1;;;9560:38:15;;;;;;;:::i;:::-;9683:17;;;-1:-1:-1;;;;;9770:40:15;;;-1:-1:-1;;;;;;9770:40:15;;;;;;;9899:64;;;9683:17;;;;13501:34:486;;;13566:2;13551:18;;13544:43;;;;9899:64:15;;13436:18:486;9899:64:15;;;;;;;9554:414;9484:484;:::o;16910:332::-;-1:-1:-1;;;;;17051:26:15;;16987:16;17051:26;;;:18;:26;;;;;16987:16;;17051:35;;:33;:35::i;:::-;17011:75;;17097:9;17092:146;17116:20;:27;17112:1;:31;17092:146;;;17178:6;-1:-1:-1;;;;;17170:36:15;;17207:20;17228:1;17207:23;;;;;;;;:::i;:::-;;;;;;;17170:61;;;;;;;;;;;;;;-1:-1:-1;;;;;2369:32:486;;;;2351:51;;2339:2;2324:18;;2205:203;17170:61:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17158:73;;;;:::i;:::-;;-1:-1:-1;17145:3:15;;;;:::i;:::-;;;;17092:146;;;;17005:237;16910:332;;;:::o;10743:391::-;-1:-1:-1;;;;;10831:24:15;;10811:4;10831:24;;;:7;:24;;;;;:33;;;10823:53;;;;-1:-1:-1;;;10823:53:15;;11217:2:486;10823:53:15;;;11199:21:486;11256:1;11236:18;;;11229:29;-1:-1:-1;;;11274:18:486;;;11267:37;11321:18;;10823:53:15;11015:330:486;10823:53:15;10904:13;;-1:-1:-1;;;;;10904:13:15;10890:10;:27;;:47;;;10921:16;:14;:16::i;:::-;10882:69;;;;-1:-1:-1;;;10882:69:15;;;;;;;:::i;:::-;10965:16;:14;:16::i;:::-;:33;;;-1:-1:-1;10994:4:15;10985:13;;;;10965:33;10957:52;;;;-1:-1:-1;;;10957:52:15;;;;;;;:::i;:::-;-1:-1:-1;;;;;11016:35:15;;;;;;:18;:35;;;;;;;;;:43;;-1:-1:-1;;11016:43:15;;;;;;;;;;11070:41;;14038:51:486;;;14125:2;14105:18;;;14098:30;;;14164:1;14144:18;;;14137:29;;;;-1:-1:-1;;;14197:3:486;14182:19;;14175:35;14262:18;;;14255:50;11070:41:15;;14076:3:486;14227:19;11070:41:15;13787:524:486;18678:110:15;18733:16;18764:19;18757:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18757:26:15;;;;;;;;;;;;;;;;;;;;;;18678:110;:::o;7803:516::-;7932:5;;-1:-1:-1;;;;;7932:5:15;7918:10;:19;;:54;;-1:-1:-1;7955:17:15;;-1:-1:-1;;;;;7955:17:15;7941:10;:31;7918:54;7910:73;;;;-1:-1:-1;;;7910:73:15;;;;;;;:::i;:::-;8011:7;8055:13;8090:15;;;;;:46;;;8123:13;8109:10;:27;8090:46;8082:65;;;;-1:-1:-1;;;8082:65:15;;14518:2:486;8082:65:15;;;14500:21:486;14557:1;14537:18;;;14530:29;-1:-1:-1;;;14575:18:486;;;14568:36;14621:18;;8082:65:15;14316:329:486;8082:65:15;8159:9;8154:161;8178:10;8174:1;:14;8154:161;;;8237:13;;8251:1;8237:16;;;;;;;:::i;:::-;;;;;;;8203:10;:31;8222:7;;8230:1;8222:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8203:31:15;;;;;;;;;;;;-1:-1:-1;8203:31:15;:50;8279:7;;8287:1;8279:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8266:42:15;;8291:13;;8305:1;8291:16;;;;;;;:::i;:::-;;;;;;;8266:42;;;;740:25:486;;728:2;713:18;;594:177;8266:42:15;;;;;;;;8190:3;;;;:::i;:::-;;;;8154:161;;;;7904:415;;7803:516;;;;:::o;15722:265::-;15839:16;:14;:16::i;:::-;15831:35;;;;-1:-1:-1;;;15831:35:15;;;;;;;:::i;:::-;15877:11;15873:109;;;-1:-1:-1;;;;;15890:26:15;;;;;;:18;:26;;;;;:39;;15921:7;15890:30;:39::i;:::-;;15722:265;;;:::o;15873:109::-;-1:-1:-1;;;;;15940:26:15;;;;;;:18;:26;;;;;:42;;15974:7;15940:33;:42::i;2513:27:17:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2513:27:17;;-1:-1:-1;2513:27:17;:::o;10187:552:15:-;10256:7;10276:16;:14;:16::i;:::-;10271:113;;10309:68;10314:18;10334:42;10309:4;:68::i;10271:113::-;10464:13;;;-1:-1:-1;;;;;10539:32:15;;;-1:-1:-1;;;;;;10539:32:15;;;;;;;10648:49;;;10464:13;;;;13501:34:486;;;13566:2;13551:18;;13544:43;;;;10648:49:15;;13436:18:486;10648:49:15;;;;;;;10719:14;10704:30;10187:552;-1:-1:-1;;;10187:552:15:o;8814:516::-;8943:5;;-1:-1:-1;;;;;8943:5:15;8929:10;:19;;:54;;-1:-1:-1;8966:17:15;;-1:-1:-1;;;;;8966:17:15;8952:10;:31;8929:54;8921:73;;;;-1:-1:-1;;;8921:73:15;;;;;;;:::i;:::-;9022:7;9066:13;9101:15;;;;;:46;;;9134:13;9120:10;:27;9101:46;9093:65;;;;-1:-1:-1;;;9093:65:15;;14518:2:486;9093:65:15;;;14500:21:486;14557:1;14537:18;;;14530:29;-1:-1:-1;;;14575:18:486;;;14568:36;14621:18;;9093:65:15;14316:329:486;9093:65:15;9170:9;9165:161;9189:10;9185:1;:14;9165:161;;;9248:13;;9262:1;9248:16;;;;;;;:::i;:::-;;;;;;;9214:10;:31;9233:7;;9241:1;9233:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9214:31:15;;;;;;;;;;;;-1:-1:-1;9214:31:15;:50;9290:7;;9298:1;9290:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9277:42:15;;9302:13;;9316:1;9302:16;;;;;;;:::i;:::-;;;;;;;9277:42;;;;740:25:486;;728:2;713:18;;594:177;9277:42:15;;;;;;;;9201:3;;;;:::i;:::-;;;;9165:161;;4297:773;4372:4;4392:16;:14;:16::i;:::-;4384:35;;;;-1:-1:-1;;;4384:35:15;;;;;;;:::i;:::-;-1:-1:-1;;;;;4433:29:15;;4425:51;;;;-1:-1:-1;;;4425:51:15;;10214:2:486;4425:51:15;;;10196:21:486;10253:1;10233:18;;;10226:29;-1:-1:-1;;;10271:18:486;;;10264:39;10320:18;;4425:51:15;10012:332:486;4425:51:15;4488:9;4483:161;4507:30;:37;4503:41;;4483:161;;;4586:30;4617:1;4586:33;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4567:52:15;;;4586:33;;4567:52;;4559:78;;;;-1:-1:-1;;;4559:78:15;;14984:2:486;4559:78:15;;;14966:21:486;15023:2;15003:18;;;14996:30;-1:-1:-1;;;15042:18:486;;;15035:43;15095:18;;4559:78:15;14782:337:486;4559:78:15;4546:3;;;;:::i;:::-;;;;4483:161;;;-1:-1:-1;4684:30:15;:52;;;;;;;-1:-1:-1;4684:52:15;;;;;;;-1:-1:-1;;;;;;4684:52:15;-1:-1:-1;;;;;4684:52:15;;;;;4778:269;4802:19;:26;4798:30;;4778:269;;;4866:19;4886:1;4866:22;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4847:41:15;;;4866:22;;4847:41;4843:198;;;4925:19;4945:26;;:30;;4974:1;;4945:30;:::i;4843:198::-;4830:3;;;;:::i;:::-;;;;4778:269;;5229:47:17;;;;;;;;;;;;2749:29;;;;;;;;;;;;5074:2224:15;5230:7;5280:12;-1:-1:-1;;;;;5249:44:15;5257:10;-1:-1:-1;;;;;5249:44:15;;:58;;;;;5298:9;5297:10;5249:58;5245:153;;;-1:-1:-1;5390:1:15;5383:8;;5245:153;-1:-1:-1;;;;;;;5467:35:15;;;5463:1208;;-1:-1:-1;;;;;5624:58:15;;;;;;;:35;:58;;;;;;;;:79;;;;;;;;;;;;:198;;;;-1:-1:-1;;;;;;5716:67:15;;;;;;;:44;:67;;;;;;;;:88;;;;;;;;;:106;;5814:7;5716:97;:106::i;:::-;5715:107;5624:198;5611:1054;;;-1:-1:-1;5869:1:15;5611:1054;;;-1:-1:-1;;;;;6079:45:15;;;6046:30;6079:45;;;:22;:45;;;;;;;;:66;;;;;;;;;;6236:27;;;;;:135;;-1:-1:-1;;;;;;6278:54:15;;;;;;;:31;:54;;;;;;;;:75;;;;;;;;;:93;;6363:7;6278:84;:93::i;:::-;6277:94;6236:135;6221:436;;;6423:6;;:39;;-1:-1:-1;;;6423:39:15;;-1:-1:-1;;;;;2369:32:486;;;6423:39:15;;;2351:51:486;6394:26:15;;6423:6;;:25;;2324:18:486;;6423:39:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6394:68;-1:-1:-1;6642:4:15;6595:43;6394:68;6595:22;:43;:::i;:::-;6594:52;;;;:::i;:::-;6566:80;;6382:275;6221:436;5885:780;5611:1054;-1:-1:-1;;;;;6775:31:15;;6809:1;6775:31;;;:10;:31;;;;;;:35;;;;:97;;-1:-1:-1;;;;;;6815:39:15;;;;;;:18;:39;;;;;:57;;6864:7;6815:48;:57::i;:::-;6814:58;6775:97;6771:484;;;6913:6;;:37;;-1:-1:-1;;;6913:37:15;;-1:-1:-1;;;;;2369:32:486;;;6913:37:15;;;2351:51:486;6882:28:15;;6913:6;;:25;;2324:18:486;;6913:37:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6984:31:15;;6958:22;6984:31;;;:10;:31;;;;;;6882:68;;-1:-1:-1;6958:22:15;7042:4;;6984:54;;6882:68;;6984:54;:::i;:::-;6983:63;;;;:::i;:::-;-1:-1:-1;;;;;7089:28:15;;;;;;:7;:28;;;;;:53;;;6958:88;;-1:-1:-1;7146:4:15;;7072:70;;6958:88;7072:70;:::i;:::-;7071:79;;;;:::i;:::-;7054:96;;7179:25;7162:14;:42;7158:90;;;7234:14;7206:42;;7158:90;6874:381;;6771:484;7268:25;5074:2224;-1:-1:-1;;;;;5074:2224:15:o;12467:1367::-;12527:7;12573:16;:14;:16::i;:::-;12568:96;;12598:66;12603:18;12623:40;12598:4;:66::i;12568:96::-;-1:-1:-1;;;;;12719:24:15;;;;;;:7;:24;;;;;:33;;;12714:127;;12767:74;12772:23;12797:43;12767:4;:74::i;12714:127::-;12908:1;12885:6;-1:-1:-1;;;;;12885:18:15;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:24;12881:106;;;12918:69;12923:26;12951:35;12918:4;:69::i;12881:106::-;-1:-1:-1;;;;;13022:24:15;;;;;;:7;:24;;;;;;;;13015:31;;-1:-1:-1;;13015:31:15;;;;;;;;13169:10;13138:41;;;;;;;;;;;;;;;;;;;13169:10;;13138:41;;;13169:10;13138:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13138:41:15;;;;;;;;;;;;;;;;-1:-1:-1;;13199:18:15;;13138:41;;-1:-1:-1;13199:18:15;;-1:-1:-1;13185:11:15;;-1:-1:-1;;13253:126:15;13277:3;13273:1;:7;13253:126;;;13317:6;-1:-1:-1;;;;;13299:24:15;:11;13311:1;13299:14;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13299:24:15;;13295:78;;;13348:1;13335:14;;13359:5;;13295:78;13282:3;;;;:::i;:::-;;;;13253:126;;;;13497:3;13484:10;:16;13477:24;;;;:::i;:::-;13617:10;13628:17;;:21;;13648:1;;13628:21;:::i;:::-;13617:33;;;;;;;;:::i;:::-;;;;;;;;;;;13592:10;:22;;-1:-1:-1;;;;;13617:33:15;;;;13603:10;;13592:22;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1;;;;;13592:58:15;;;;;-1:-1:-1;;;;;13592:58:15;;;;;;13656:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13656:16:15;;;;;;;13756:1;13679:19;:58;13715:6;-1:-1:-1;;;;;13699:35:15;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13679:58:15;;;;;;;;;;;;;;;;;-1:-1:-1;13679:58:15;:80;;-1:-1:-1;;;;;;13679:80:15;;;;;;;;;;;13770:22;2369:32:486;;;2351:51;;13770:22:15;;2324:18:486;13770:22:15;;;;;;;13814:14;13799:30;12467:1367;-1:-1:-1;;;;;12467:1367:15:o;1497:2517::-;1655:22;;;1611:2;1655:22;;;;;;;;;1571:15;;1611:2;1594:14;;1611:2;1655:22;;;;;;;;;;-1:-1:-1;;1619:58:15;-1:-1:-1;;;;1619:58:15;1701:10;;;:::i;:::-;;;;1683:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1683:68:15;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;1757:17:15;1775:10;;;:::i;:::-;;;;1757:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1757:66:15;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;1829:17:15;1847:10;;;:::i;:::-;;;;1829:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1829:66:15;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;1901:17:15;1919:10;;;:::i;:::-;;;;1901:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1901:81:15;;;:29;;;;;;;;;;;:81;-1:-1:-1;;;1988:17:15;2006:10;;;:::i;:::-;;;;1988:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1988:91:15;;;:29;;;;;;;;;;;:91;-1:-1:-1;;;2085:17:15;2103:10;;;:::i;:::-;;;;2085:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2085:65:15;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;2156:17:15;2174:10;;;:::i;:::-;;;;2156:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2156:65:15;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;2227:17:15;2245:10;;;:::i;:::-;;;;2227:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2227:67:15;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;2300:17:15;2318:10;;;:::i;:::-;;;;2300:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2300:63:15;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;2369:17:15;2387:10;;;:::i;:::-;;;;2369:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2369:60:15;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2435:17:15;2453:10;;;:::i;:::-;;;;2435:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2435:62:15;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;2503:17:15;2521:10;;;:::i;:::-;;;;2503:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2503:64:15;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2573:17:15;2591:10;;;:::i;:::-;;;;2573:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2573:61:15;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2640:17:15;2658:10;;;:::i;:::-;;;;2640:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2640:62:15;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;2708:17:15;2726:10;;;:::i;:::-;;;;2708:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2708:59:15;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;2773:17:15;2791:10;;;:::i;:::-;;;;2773:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2773:61:15;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2840:17:15;2858:10;;;:::i;:::-;;;;2840:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2840:58:15;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;2904:17:15;2922:10;;;:::i;:::-;;;;2904:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2904:68:15;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;2978:17:15;2996:10;;;:::i;:::-;;;;2978:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2978:58:15;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;3042:17:15;3060:10;;;:::i;:::-;;;;3042:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3042:66:15;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;3114:17:15;3132:10;;;:::i;:::-;;;;3114:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3114:61:15;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;3181:17:15;3199:10;;;:::i;:::-;;;;3181:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3181:72:15;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;3259:17:15;3277:10;;;:::i;:::-;;;;3259:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3259:82:15;;;:29;;;;;;;;;;;:82;-1:-1:-1;;;3347:17:15;3365:10;;;:::i;:::-;;;;3347:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3347:81:15;;;:29;;;;;;;;;;;:81;-1:-1:-1;;;3434:17:15;3452:10;;;:::i;:::-;;;;3434:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3434:94:15;;;:29;;;;;;;;;;;:94;-1:-1:-1;;;3534:17:15;3552:10;;;:::i;:::-;;;;3534:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3534:68:15;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;3608:17:15;3626:10;;;:::i;:::-;;;;3608:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3608:68:15;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;3682:17:15;3700:10;;;:::i;:::-;;;;3682:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3682:75:15;;;:29;;;;;;;;;;;:75;-1:-1:-1;;;3763:17:15;3781:10;;;:::i;:::-;;;;3763:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3763:76:15;;;:29;;;;;;;;;;;:76;-1:-1:-1;;;3845:17:15;3863:10;;;:::i;:::-;;;;3845:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3845:74:15;;;:29;;;;;;;;;;;:74;3933:13;;;;3925:54;;;;-1:-1:-1;;;3925:54:15;;16292:2:486;3925:54:15;;;16274:21:486;16331:2;16311:18;;;16304:30;16370;16350:18;;;16343:58;16418:18;;3925:54:15;16090:352:486;11539:297:15;11629:13;;11595:4;;-1:-1:-1;;;;;11629:13:15;11615:10;:27;;:47;;;11646:16;:14;:16::i;:::-;11607:69;;;;-1:-1:-1;;;11607:69:15;;;;;;;:::i;:::-;11690:16;:14;:16::i;:::-;:33;;;-1:-1:-1;11719:4:15;11710:13;;;;11690:33;11682:52;;;;-1:-1:-1;;;11682:52:15;;;;;;;:::i;:::-;11741:22;:30;;;;;-1:-1:-1;;;11741:30:15;-1:-1:-1;;;;11741:30:15;;;;;;11782:31;;;;;;11766:5;;16671:2:486;16653:21;;;16710:1;16690:18;;;16683:29;-1:-1:-1;;;16743:2:486;16728:18;;16721:38;16840:14;;16833:22;16826:4;16811:20;;16804:52;16791:3;16776:19;;16447:415;13838:244:15;13978:16;:14;:16::i;:::-;13970:35;;;;-1:-1:-1;;;13970:35:15;;;;;;;:::i;:::-;-1:-1:-1;;;;;14011:36:15;;;;;;;:22;:36;;;;;;;;:54;;;;;;;;;;;;;:66;13838:244::o;17414:92::-;17460:16;17491:10;17484:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17484:17:15;;;;;;;;;;;;;;;;;;;;;;17414:92;:::o;16752:154::-;-1:-1:-1;;;;;16857:26:15;;16838:4;16857:26;;;:18;:26;;;;;:44;;16893:7;16857:35;:44::i;16483:265::-;16600:16;:14;:16::i;:::-;16592:35;;;;-1:-1:-1;;;16592:35:15;;;;;;;:::i;:::-;16638:11;16634:109;;;-1:-1:-1;;;;;16651:26:15;;;;;;:18;:26;;;;;:39;;16682:7;16651:30;:39::i;16634:109::-;-1:-1:-1;;;;;16701:26:15;;;;;;:18;:26;;;;;:42;;16735:7;16701:33;:42::i;4893:36:17:-;;;;;;;;;;;;15009:427:15;15188:16;:14;:16::i;:::-;15180:35;;;;-1:-1:-1;;;15180:35:15;;;;;;;:::i;:::-;15226:11;15222:209;;;-1:-1:-1;;;;;15239:58:15;;;;;;;:44;:58;;;;;;;;:76;;;;;;;;;:89;;15320:7;15239:80;:89::i;:::-;;15222:209;;;-1:-1:-1;;;;;15339:58:15;;;;;;;:44;:58;;;;;;;;:76;;;;;;;;;:92;;15423:7;15339:83;:92::i;:::-;;15009:427;;;;:::o;17982:97::-;18029:16;18060:14;18053:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18053:21:15;;;;;;;;;;;;;;;;;;;;;;17982:97;:::o;14086:391::-;14255:16;:14;:16::i;:::-;14247:35;;;;-1:-1:-1;;;14247:35:15;;;;;;;:::i;:::-;14293:11;14289:183;;;-1:-1:-1;;;;;14306:45:15;;;;;;;:31;:45;;;;;;;;:63;;;;;;;;;:76;;14374:7;14306:67;:76::i;14289:183::-;-1:-1:-1;;;;;14393:45:15;;;;;;;:31;:45;;;;;;;;:63;;;;;;;;;:79;;14464:7;14393:70;:79::i;3501:31:17:-;;;;;;;;;;;;19928:292:15;19987:4;;19999:198;20023:10;:17;20019:21;;19999:198;;;20055:21;20087:10;20098:1;20087:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20087:13:15;;;20113:22;;;:7;:22;;;;;;:46;;;;;:40;;;;:46;;;;;;;20087:13;;-1:-1:-1;20113:46:15;;20109:82;;;-1:-1:-1;20178:4:15;;19928:292;-1:-1:-1;;;19928:292:15:o;20109:82::-;-1:-1:-1;20042:3:15;;;;:::i;:::-;;;;19999:198;;1739:50:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1739:50:17;;-1:-1:-1;1739:50:17;;-1:-1:-1;1739:50:17:o;14737:268:15:-;14886:16;:14;:16::i;:::-;14878:35;;;;-1:-1:-1;;;14878:35:15;;;;;;;:::i;:::-;-1:-1:-1;;;;;14919:49:15;;;;;;;:35;:49;;;;;;;;:67;;;;;;;;;;;;;:81;;-1:-1:-1;;14919:81:15;;;;;;;;;;14737:268::o;15440:278::-;-1:-1:-1;;;;;15619:58:15;;;15600:4;15619:58;;;:44;:58;;;;;;;;:76;;;;;;;;;;;:94;;15705:7;15619:85;:94::i;16149:330::-;-1:-1:-1;;;;;16289:26:15;;16225:16;16289:26;;;:18;:26;;;;;16225:16;;16289:35;;:33;:35::i;:::-;16249:75;;16335:9;16330:145;16354:20;:27;16350:1;:31;16330:145;;;16416:6;-1:-1:-1;;;;;16408:35:15;;16444:20;16465:1;16444:23;;;;;;;;:::i;:::-;;;;;;;16408:60;;;;;;;;;;;;;;-1:-1:-1;;;;;2369:32:486;;;;2351:51;;2339:2;2324:18;;2205:203;16408:60:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16396:72;;;;:::i;:::-;;-1:-1:-1;16383:3:15;;;;:::i;:::-;;;;16330:145;;8852:165:469;-1:-1:-1;;;;;8985:23:469;;8932:4;4343:19;;;:12;;;:19;;;;;;:24;;8955:55;4247:127;855:174:17;938:5;;904:4;;-1:-1:-1;;;;;938:5:17;924:10;:19;:37;;;;-1:-1:-1;947:14:17;;-1:-1:-1;;;947:14:17;;;;924:37;923:101;;;-1:-1:-1;989:10:17;;-1:-1:-1;;;;;989:10:17;967;:33;:56;;;;-1:-1:-1;1004:19:17;;-1:-1:-1;;;1004:19:17;;;;967:56;916:108;;855:174;:::o;10251:300:469:-;10314:16;10342:22;10367:19;10375:3;10367:7;:19::i;8297:150::-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:469;;8390:4;:50::i;8615:156::-;8688:4;8711:53;8719:3;-1:-1:-1;;;;;8739:23:469;;8711:7;:53::i;2065:151:20:-;2126:7;2146:39;2162:3;2154:12;;;;;;;;:::i;:::-;2176:4;2168:13;;;;;;;;:::i;:::-;2146:39;;;17077:25:486;;;17133:2;17118:18;;17111:34;;;;2183:1:20;17161:18:486;;;17154:34;17065:2;17050:18;2146:39:20;;;;;;;2207:3;2199:12;;;;;;;;:::i;5562:109:469:-;5618:16;5653:3;:11;;5646:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:109;;;:::o;2206:404::-;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:469;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:469;2581:12;;2778:1388;2844:4;2981:19;;;:12;;;:19;;;;;;3015:15;;3011:1149;;3384:21;3408:14;3421:1;3408:10;:14;:::i;:::-;3456:18;;3384:38;;-1:-1:-1;3436:17:469;;3456:22;;3477:1;;3456:22;:::i;:::-;3436:42;;3510:13;3497:9;:26;3493:398;;3543:17;3563:3;:11;;3575:9;3563:22;;;;;;;;:::i;:::-;;;;;;;;;3543:42;;3714:9;3685:3;:11;;3697:13;3685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3797:23;;;:12;;;:23;;;;;:36;;;3493:398;3969:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4061:3;:12;;:19;4074:5;4061:19;;;;;;;;;;;4054:26;;;4102:4;4095:11;;;;;;;3011:1149;4144:5;4137:12;;;;;206:131:486;-1:-1:-1;;;;;281:31:486;;271:42;;261:70;;327:1;324;317:12;261:70;206:131;:::o;342:247::-;401:6;454:2;442:9;433:7;429:23;425:32;422:52;;;470:1;467;460:12;422:52;509:9;496:23;528:31;553:5;528:31;:::i;776:529::-;853:6;861;869;922:2;910:9;901:7;897:23;893:32;890:52;;;938:1;935;928:12;890:52;977:9;964:23;996:31;1021:5;996:31;:::i;:::-;1046:5;-1:-1:-1;1103:2:486;1088:18;;1075:32;1116:33;1075:32;1116:33;:::i;:::-;1168:7;-1:-1:-1;1227:2:486;1212:18;;1199:32;1240:33;1199:32;1240:33;:::i;:::-;1292:7;1282:17;;;776:529;;;;;:::o;1310:160::-;1375:20;;1431:13;;1424:21;1414:32;;1404:60;;1460:1;1457;1450:12;1404:60;1310:160;;;:::o;1475:332::-;1557:6;1565;1618:2;1606:9;1597:7;1593:23;1589:32;1586:52;;;1634:1;1631;1624:12;1586:52;1673:9;1660:23;1692:31;1717:5;1692:31;:::i;:::-;1742:5;-1:-1:-1;1766:35:486;1797:2;1782:18;;1766:35;:::i;:::-;1756:45;;1475:332;;;;;:::o;1812:388::-;1880:6;1888;1941:2;1929:9;1920:7;1916:23;1912:32;1909:52;;;1957:1;1954;1947:12;1909:52;1996:9;1983:23;2015:31;2040:5;2015:31;:::i;:::-;2065:5;-1:-1:-1;2122:2:486;2107:18;;2094:32;2135:33;2094:32;2135:33;:::i;:::-;2187:7;2177:17;;;1812:388;;;;;:::o;2413:180::-;2469:6;2522:2;2510:9;2501:7;2497:23;2493:32;2490:52;;;2538:1;2535;2528:12;2490:52;2561:26;2577:9;2561:26;:::i;2823:658::-;2994:2;3046:21;;;3116:13;;3019:18;;;3138:22;;;2965:4;;2994:2;3217:15;;;;3191:2;3176:18;;;2965:4;3260:195;3274:6;3271:1;3268:13;3260:195;;;3339:13;;-1:-1:-1;;;;;3335:39:486;3323:52;;3430:15;;;;3395:12;;;;3371:1;3289:9;3260:195;;;-1:-1:-1;3472:3:486;;2823:658;-1:-1:-1;;;;;;2823:658:486:o;3486:376::-;3558:8;3568:6;3622:3;3615:4;3607:6;3603:17;3599:27;3589:55;;3640:1;3637;3630:12;3589:55;-1:-1:-1;3663:20:486;;3706:18;3695:30;;3692:50;;;3738:1;3735;3728:12;3692:50;3775:4;3767:6;3763:17;3751:29;;3835:3;3828:4;3818:6;3815:1;3811:14;3803:6;3799:27;3795:38;3792:47;3789:67;;;3852:1;3849;3842:12;3789:67;3486:376;;;;;:::o;3867:808::-;4006:6;4014;4022;4030;4083:2;4071:9;4062:7;4058:23;4054:32;4051:52;;;4099:1;4096;4089:12;4051:52;4139:9;4126:23;4168:18;4209:2;4201:6;4198:14;4195:34;;;4225:1;4222;4215:12;4195:34;4264:79;4335:7;4326:6;4315:9;4311:22;4264:79;:::i;:::-;4362:8;;-1:-1:-1;4238:105:486;-1:-1:-1;4450:2:486;4435:18;;4422:32;;-1:-1:-1;4466:16:486;;;4463:36;;;4495:1;4492;4485:12;4463:36;;4534:81;4607:7;4596:8;4585:9;4581:24;4534:81;:::i;:::-;3867:808;;;;-1:-1:-1;4634:8:486;-1:-1:-1;;;;3867:808:486:o;4680:456::-;4754:6;4762;4770;4823:2;4811:9;4802:7;4798:23;4794:32;4791:52;;;4839:1;4836;4829:12;4791:52;4878:9;4865:23;4897:31;4922:5;4897:31;:::i;:::-;4947:5;-1:-1:-1;5004:2:486;4989:18;;4976:32;5017:33;4976:32;5017:33;:::i;:::-;5069:7;-1:-1:-1;5095:35:486;5126:2;5111:18;;5095:35;:::i;:::-;5085:45;;4680:456;;;;;:::o;5141:180::-;5200:6;5253:2;5241:9;5232:7;5228:23;5224:32;5221:52;;;5269:1;5266;5259:12;5221:52;-1:-1:-1;5292:23:486;;5141:180;-1:-1:-1;5141:180:486:o;5326:632::-;5443:6;5451;5459;5467;5520:3;5508:9;5499:7;5495:23;5491:33;5488:53;;;5537:1;5534;5527:12;5488:53;5576:9;5563:23;5595:31;5620:5;5595:31;:::i;:::-;5645:5;-1:-1:-1;5702:2:486;5687:18;;5674:32;5715:33;5674:32;5715:33;:::i;:::-;5767:7;-1:-1:-1;5793:35:486;5824:2;5809:18;;5793:35;:::i;:::-;5783:45;;5880:2;5869:9;5865:18;5852:32;5893:33;5918:7;5893:33;:::i;:::-;5326:632;;;;-1:-1:-1;5326:632:486;;-1:-1:-1;;5326:632:486:o;6465:657::-;6634:2;6686:21;;;6756:13;;6659:18;;;6778:22;;;6605:4;;6634:2;6857:15;;;;6831:2;6816:18;;;6605:4;6900:196;6914:6;6911:1;6908:13;6900:196;;;6979:13;;-1:-1:-1;;;;;;6975:40:486;6963:53;;7071:15;;;;7036:12;;;;6936:1;6929:9;6900:196;;7390:456;7467:6;7475;7483;7536:2;7524:9;7515:7;7511:23;7507:32;7504:52;;;7552:1;7549;7542:12;7504:52;7591:9;7578:23;7610:31;7635:5;7610:31;:::i;:::-;7660:5;-1:-1:-1;7717:2:486;7702:18;;7689:32;7730:33;7689:32;7730:33;:::i;:::-;7390:456;;7782:7;;-1:-1:-1;;;7836:2:486;7821:18;;;;7808:32;;7390:456::o;8531:598::-;8614:6;8622;8630;8638;8691:3;8679:9;8670:7;8666:23;8662:33;8659:53;;;8708:1;8705;8698:12;8659:53;8747:9;8734:23;8766:31;8791:5;8766:31;:::i;:::-;8816:5;-1:-1:-1;8873:2:486;8858:18;;8845:32;8886:33;8845:32;8886:33;:::i;:::-;8938:7;-1:-1:-1;8997:2:486;8982:18;;8969:32;9010:33;8969:32;9010:33;:::i;:::-;9062:7;-1:-1:-1;9088:35:486;9119:2;9104:18;;9088:35;:::i;:::-;9078:45;;8531:598;;;;;;;:::o;9358:315::-;9426:6;9434;9487:2;9475:9;9466:7;9462:23;9458:32;9455:52;;;9503:1;9500;9493:12;9455:52;9542:9;9529:23;9561:31;9586:5;9561:31;:::i;:::-;9611:5;9663:2;9648:18;;;;9635:32;;-1:-1:-1;;;9358:315:486:o;9678:329::-;9880:2;9862:21;;;9919:1;9899:18;;;9892:29;-1:-1:-1;;;9952:2:486;9937:18;;9930:36;9998:2;9983:18;;9678:329::o;10349:127::-;10410:10;10405:3;10401:20;10398:1;10391:31;10441:4;10438:1;10431:15;10465:4;10462:1;10455:15;10481:127;10542:10;10537:3;10533:20;10530:1;10523:31;10573:4;10570:1;10563:15;10597:4;10594:1;10587:15;10613:125;10653:4;10681:1;10678;10675:8;10672:34;;;10686:18;;:::i;:::-;-1:-1:-1;10723:9:486;;10613:125::o;10743:127::-;10804:10;10799:3;10795:20;10792:1;10785:31;10835:4;10832:1;10825:15;10859:4;10856:1;10849:15;10875:135;10914:3;-1:-1:-1;;10935:17:486;;10932:43;;;10955:18;;:::i;:::-;-1:-1:-1;11002:1:486;10991:13;;10875:135::o;11350:332::-;11552:2;11534:21;;;11591:1;11571:18;;;11564:29;-1:-1:-1;;;11624:2:486;11609:18;;11602:39;11673:2;11658:18;;11350:332::o;12635:128::-;12675:3;12706:1;12702:6;12699:1;12696:13;12693:39;;;12712:18;;:::i;:::-;-1:-1:-1;12748:9:486;;12635:128::o;12768:127::-;12829:10;12824:3;12820:20;12817:1;12810:31;12860:4;12857:1;12850:15;12884:4;12881:1;12874:15;12900:175;12937:3;12981:4;12974:5;12970:16;13010:4;13001:7;12998:17;12995:43;;;13018:18;;:::i;:::-;13067:1;13054:15;;12900:175;-1:-1:-1;;12900:175:486:o;13080:204::-;13118:3;13154:4;13151:1;13147:12;13186:4;13183:1;13179:12;13221:3;13215:4;13211:14;13206:3;13203:23;13200:49;;;13229:18;;:::i;:::-;13265:13;;13080:204;-1:-1:-1;;;13080:204:486:o;13598:184::-;13668:6;13721:2;13709:9;13700:7;13696:23;13692:32;13689:52;;;13737:1;13734;13727:12;13689:52;-1:-1:-1;13760:16:486;;13598:184;-1:-1:-1;13598:184:486:o;14650:127::-;14711:10;14706:3;14702:20;14699:1;14692:31;14742:4;14739:1;14732:15;14766:4;14763:1;14756:15;15124:168;15164:7;15230:1;15226;15222:6;15218:14;15215:1;15212:21;15207:1;15200:9;15193:17;15189:45;15186:71;;;15237:18;;:::i;:::-;-1:-1:-1;15277:9:486;;15124:168::o;15297:217::-;15337:1;15363;15353:132;;15407:10;15402:3;15398:20;15395:1;15388:31;15442:4;15439:1;15432:15;15470:4;15467:1;15460:15;15353:132;-1:-1:-1;15499:9:486;;15297:217::o;15519:127::-;15580:10;15575:3;15571:20;15568:1;15561:31;15611:4;15608:1;15601:15;15635:4;15632:1;15625:15;15651:251;15721:6;15774:2;15762:9;15753:7;15749:23;15745:32;15742:52;;;15790:1;15787;15780:12;15742:52;15822:9;15816:16;15841:31;15866:5;15841:31;:::i;15907:178::-;15944:3;15988:4;15981:5;15977:16;16012:7;16002:41;;16023:18;;:::i;:::-;-1:-1:-1;;16059:20:486;;15907:178;-1:-1:-1;;15907:178:486:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_blacklistBorrowingAgainstCollateral(address,address,bool)": "ee5b9a2f", + "_blacklistBorrowingAgainstCollateralWhitelist(address,address,address,bool)": "c76ae260", + "_borrowCapWhitelist(address,address,bool)": "be945a64", + "_borrowGuardianPaused()": "e6653f3d", + "_getExtensionFunctions()": "89f8132e", + "_mintGuardianPaused()": "3c94786f", + "_removeFlywheel(address)": "109908ce", + "_setBorrowCapForCollateral(address,address,uint256)": "a5fb4857", + "_setBorrowCapForCollateralWhitelist(address,address,address,bool)": "d219fca7", + "_setBorrowCapGuardian(address)": "391957d7", + "_setBorrowPaused(address,bool)": "18c882a5", + "_setMarketBorrowCaps(address[],uint256[])": "607ef6c1", + "_setMarketSupplyCaps(address[],uint256[])": "51a485e4", + "_setMintPaused(address,bool)": "3bcf7ec1", + "_setPauseGuardian(address)": "5f5af1aa", + "_setSeizePaused(bool)": "2d70db78", + "_setTransferPaused(bool)": "8ebf6364", + "_supplyCapWhitelist(address,address,bool)": "51c8491d", + "_unsupportMarket(address)": "819605a8", + "accountAssets(address,uint256)": "dce15449", + "addNonAccruingFlywheel(address)": "692fd2a9", + "admin()": "f851a440", + "adminHasRights()": "0a755ec2", + "allBorrowers(uint256)": "7515bafa", + "allMarkets(uint256)": "52d84d1e", + "borrowCapForCollateral(address,address)": "940cd6f1", + "borrowCapGuardian()": "21af4569", + "borrowCaps(address)": "4a584432", + "borrowGuardianPaused(address)": "6d154ea5", + "borrowingAgainstCollateralBlacklist(address,address)": "1c819e43", + "cTokensByUnderlying(address)": "31ff47fa", + "closeFactorMantissa()": "e8755446", + "enforceWhitelist()": "b0957210", + "getAccruingFlywheels()": "4a76e727", + "getAllBorrowers()": "32abcdbe", + "getAllMarkets()": "b0772d0b", + "getAssetAsCollateralValueCap(address,address,bool,address)": "783f1096", + "getRewardsDistributors()": "3605b51b", + "getWhitelist()": "d01f63f5", + "getWhitelistedBorrowersBorrows(address)": "3a72cb5e", + "getWhitelistedSuppliersSupply(address)": "fb6243fa", + "ionicAdmin()": "c91a424f", + "ionicAdminHasRights()": "cf6bfd2d", + "isBlacklistBorrowingAgainstCollateralWhitelisted(address,address,address)": "f874eb0c", + "isBorrowCapForCollateralWhitelisted(address,address,address)": "088e0fce", + "isBorrowCapWhitelisted(address,address)": "b3253801", + "isComptroller()": "007e3dd2", + "isSupplyCapWhitelisted(address,address)": "2273f40e", + "isUserOfPool(address)": "d9e0ea6b", + "liquidationIncentiveMantissa()": "4ada90af", + "markets(address)": "8e8f294b", + "mintGuardianPaused(address)": "731f0c2b", + "nonAccruingRewardsDistributors(uint256)": "6bd02b8a", + "oracle()": "7dc0d1d0", + "pauseGuardian()": "24a3d622", + "pendingAdmin()": "26782247", + "rewardsDistributors(uint256)": "c6c5b0dd", + "seizeGuardianPaused()": "ac0b0bb7", + "suppliers(address)": "16dc15fe", + "supplyCaps(address)": "02c3bcbb", + "transferGuardianPaused()": "87f76303", + "whitelist(address)": "9b19251a", + "whitelistArray(uint256)": "d251fefc" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/DefaultProxyAdmin.json b/packages/sdk/deployments/mode/DefaultProxyAdmin.json new file mode 100644 index 0000000000..4b627a3033 --- /dev/null +++ b/packages/sdk/deployments/mode/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0xcc063387e5a4594f5833c38fcd851a21455a26764a8fdb763b66ba81a5540519", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "transactionIndex": 1, + "gasUsed": "643983", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000800000800000000000000000000000000000000400000000000000000000000000000000000000000001000000000000000400000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xe1b711d9da0ead3584360c48760d9579477ffe18a76d945949ecc988ae716b89", + "transactionHash": "0xcc063387e5a4594f5833c38fcd851a21455a26764a8fdb763b66ba81a5540519", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2065246, + "transactionHash": "0xcc063387e5a4594f5833c38fcd851a21455a26764a8fdb763b66ba81a5540519", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xe1b711d9da0ead3584360c48760d9579477ffe18a76d945949ecc988ae716b89" + } + ], + "blockNumber": 2065246, + "cumulativeGasUsed": "690896", + "status": 1, + "byzantium": true + }, + "args": [ + "0x1155b614971f16758C92c4890eD338C9e3ede6b7" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 7, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/FeeDistributor.json b/packages/sdk/deployments/mode/FeeDistributor.json new file mode 100644 index 0000000000..9da1d4c5f3 --- /dev/null +++ b/packages/sdk/deployments/mode/FeeDistributor.json @@ -0,0 +1,1022 @@ +{ + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "_callPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "_callPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "name": "_registerComptrollerExtension", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cErc20Delegate", + "type": "address" + }, + { + "internalType": "contract DiamondExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "name": "_setCErc20DelegateExtensions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "contract DiamondExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "name": "_setComptrollerExtensions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "int256", + "name": "rate", + "type": "int256" + } + ], + "name": "_setCustomInterestFeeRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_defaultInterestFeeRate", + "type": "uint256" + } + ], + "name": "_setDefaultInterestFeeRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "becomeImplementationData", + "type": "bytes" + } + ], + "name": "_setLatestCErc20Delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "_setLatestComptrollerImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "_setLatestPluginImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minBorrowEth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxUtilizationRate", + "type": "uint256" + } + ], + "name": "_setPoolLimits", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cDelegator", + "type": "address" + } + ], + "name": "_upgradePluginToLatestImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "erc20Contract", + "type": "address" + } + ], + "name": "_withdrawAssets", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "authoritiesRegistry", + "outputs": [ + { + "internalType": "contract AuthoritiesRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "pool", + "type": "address" + } + ], + "name": "autoUpgradePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "cErc20DelegateExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "functionSig", + "type": "bytes4" + } + ], + "name": "canCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "comptrollerExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "customInterestFeeRates", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultInterestFeeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "becomeImplData", + "type": "bytes" + } + ], + "name": "deployCErc20", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cErc20Delegate", + "type": "address" + } + ], + "name": "getCErc20DelegateExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + } + ], + "name": "getComptrollerExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_ctoken", + "type": "address" + } + ], + "name": "getMinBorrowEth", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_defaultInterestFeeRate", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "interestFeeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + } + ], + "name": "latestCErc20Delegate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + } + ], + "name": "latestComptrollerImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + } + ], + "name": "latestPluginImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "marketsCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxUtilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minBorrowEth", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract AuthoritiesRegistry", + "name": "_ar", + "type": "address" + } + ], + "name": "reinitialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "transactionIndex": 1, + "gasUsed": "816495", + "logsBloom": "0x01000000000000000000000000000020400000000000000000800000000200100000000000000000000000000000000000000000102000000000000000000000000000000000000000000800000002000001000000000000000000000000000000000000020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000100000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d", + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000009a0af901cae82f309f1047e1026f66a08c6fceec" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + }, + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + }, + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + }, + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + }, + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + } + ], + "blockNumber": 2065461, + "cumulativeGasUsed": "863408", + "status": 1, + "byzantium": true + }, + "args": [ + "0x9a0aF901CAE82f309F1047e1026F66A08C6FCEEC", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xfe4b84df000000000000000000000000000000000000000000000000016345785d8a0000" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + { + "type": "BigNumber", + "hex": "0x016345785d8a0000" + } + ] + }, + "implementation": "0x9a0aF901CAE82f309F1047e1026F66A08C6FCEEC", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/FeeDistributor_Implementation.json b/packages/sdk/deployments/mode/FeeDistributor_Implementation.json new file mode 100644 index 0000000000..1966f3db30 --- /dev/null +++ b/packages/sdk/deployments/mode/FeeDistributor_Implementation.json @@ -0,0 +1,2048 @@ +{ + "address": "0x9a0aF901CAE82f309F1047e1026F66A08C6FCEEC", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "_callPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "_callPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "name": "_registerComptrollerExtension", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cErc20Delegate", + "type": "address" + }, + { + "internalType": "contract DiamondExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "name": "_setCErc20DelegateExtensions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "contract DiamondExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "name": "_setComptrollerExtensions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "int256", + "name": "rate", + "type": "int256" + } + ], + "name": "_setCustomInterestFeeRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_defaultInterestFeeRate", + "type": "uint256" + } + ], + "name": "_setDefaultInterestFeeRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "becomeImplementationData", + "type": "bytes" + } + ], + "name": "_setLatestCErc20Delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "_setLatestComptrollerImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "_setLatestPluginImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minBorrowEth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxUtilizationRate", + "type": "uint256" + } + ], + "name": "_setPoolLimits", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cDelegator", + "type": "address" + } + ], + "name": "_upgradePluginToLatestImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "erc20Contract", + "type": "address" + } + ], + "name": "_withdrawAssets", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "authoritiesRegistry", + "outputs": [ + { + "internalType": "contract AuthoritiesRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "pool", + "type": "address" + } + ], + "name": "autoUpgradePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "cErc20DelegateExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "functionSig", + "type": "bytes4" + } + ], + "name": "canCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "comptrollerExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "customInterestFeeRates", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultInterestFeeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "becomeImplData", + "type": "bytes" + } + ], + "name": "deployCErc20", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cErc20Delegate", + "type": "address" + } + ], + "name": "getCErc20DelegateExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + } + ], + "name": "getComptrollerExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_ctoken", + "type": "address" + } + ], + "name": "getMinBorrowEth", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_defaultInterestFeeRate", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "interestFeeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + } + ], + "name": "latestCErc20Delegate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + } + ], + "name": "latestComptrollerImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + } + ], + "name": "latestPluginImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "marketsCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxUtilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minBorrowEth", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract AuthoritiesRegistry", + "name": "_ar", + "type": "address" + } + ], + "name": "reinitialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x1b1626adf5ff51d6a1af2a4fd15d18caeeccb0950188bb9011e262111af6a7d7", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x9a0aF901CAE82f309F1047e1026F66A08C6FCEEC", + "transactionIndex": 1, + "gasUsed": "4669219", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x631b9438ac1e71e6a061eb966dc1020e05cab3e7b508f20dd1ee3dd69bcaf749", + "transactionHash": "0x1b1626adf5ff51d6a1af2a4fd15d18caeeccb0950188bb9011e262111af6a7d7", + "logs": [], + "blockNumber": 2065249, + "cumulativeGasUsed": "4719720", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_callPool" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_callPool" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_registerComptrollerExtension" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cErc20Delegate", + "type": "address" + }, + { + "internalType": "contract DiamondExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setCErc20DelegateExtensions" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "contract DiamondExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setComptrollerExtensions" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "int256", + "name": "rate", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setCustomInterestFeeRate" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_defaultInterestFeeRate", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setDefaultInterestFeeRate" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "becomeImplementationData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLatestCErc20Delegate" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLatestComptrollerImplementation" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLatestPluginImplementation" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minBorrowEth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxUtilizationRate", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPoolLimits" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cDelegator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_upgradePluginToLatestImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "erc20Contract", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAssets" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "authoritiesRegistry", + "outputs": [ + { + "internalType": "contract AuthoritiesRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "autoUpgradePool" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "cErc20DelegateExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "functionSig", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "canCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "comptrollerExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "customInterestFeeRates", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "defaultInterestFeeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "becomeImplData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "deployCErc20", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cErc20Delegate", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getCErc20DelegateExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getComptrollerExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_ctoken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getMinBorrowEth", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_defaultInterestFeeRate", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestFeeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function", + "name": "latestCErc20Delegate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "latestComptrollerImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "latestPluginImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "marketsCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "maxUtilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "minBorrowEth", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract AuthoritiesRegistry", + "name": "_ar", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reinitialize" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [], + "stateMutability": "payable", + "type": "receive" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_callPool(address[],bytes)": { + "details": "Sends data to a contract.", + "params": { + "data": "The data to be sent to each of `targets`.", + "targets": "The contracts to which `data` will be sent." + } + }, + "_callPool(address[],bytes[])": { + "details": "Sends data to a contract.", + "params": { + "data": "The data to be sent to each of `targets`.", + "targets": "The contracts to which `data` will be sent." + } + }, + "_setCustomInterestFeeRate(address,int256)": { + "details": "Sets the proportion of Ionic pool interest taken as a protocol fee.", + "params": { + "comptroller": "The Unitroller (Comptroller proxy) address.", + "rate": "The proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + } + }, + "_setDefaultInterestFeeRate(uint256)": { + "details": "Sets the default proportion of Ionic pool interest taken as a protocol fee.", + "params": { + "_defaultInterestFeeRate": "The default proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + } + }, + "_setLatestCErc20Delegate(uint8,address,bytes)": { + "details": "Sets the latest `CErc20Delegate` upgrade implementation address and data.", + "params": { + "becomeImplementationData": "Data passed to the new implementation via `becomeImplementation` after upgrade.", + "delegateType": "The old `CErc20Delegate` implementation address to upgrade from.", + "newImplementation": "Latest `CErc20Delegate` implementation address." + } + }, + "_setLatestComptrollerImplementation(address,address)": { + "details": "Sets the latest `Comptroller` upgrade implementation address.", + "params": { + "newImplementation": "Latest `Comptroller` implementation address.", + "oldImplementation": "The old `Comptroller` implementation address to upgrade from." + } + }, + "_setLatestPluginImplementation(address,address)": { + "details": "Sets the latest plugin upgrade implementation address.", + "params": { + "newImplementation": "Latest plugin implementation address.", + "oldImplementation": "The old plugin implementation address to upgrade from." + } + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "_setPoolLimits(uint256,uint256)": { + "details": "Sets the proportion of Ionic pool interest taken as a protocol fee.", + "params": { + "_maxUtilizationRate": "Maximum utilization rate (scaled by 1e18) for Ionic pool assets (only checked on new borrows, not redemptions).", + "_minBorrowEth": "Minimum borrow balance (in ETH) per user per Ionic pool asset (only checked on new borrows, not redemptions)." + } + }, + "_upgradePluginToLatestImplementation(address)": { + "details": "Upgrades a plugin of a CErc20PluginDelegate market to the latest implementation", + "params": { + "cDelegator": "the proxy address" + }, + "returns": { + "_0": "if the plugin was upgraded or not" + } + }, + "_withdrawAssets(address)": { + "details": "Withdraws accrued fees on interest.", + "params": { + "erc20Contract": "The ERC20 token address to withdraw. Set to the zero address to withdraw ETH." + } + }, + "deployCErc20(uint8,bytes,bytes)": { + "details": "Deploys a CToken for an underlying ERC20", + "params": { + "constructorData": "Encoded construction data for `CToken initialize()`" + } + }, + "initialize(uint256)": { + "details": "Initializer that sets initial values of state variables.", + "params": { + "_defaultInterestFeeRate": "The default proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + } + }, + "latestCErc20Delegate(uint8)": { + "details": "Latest CErc20Delegate implementation for each existing implementation." + }, + "latestComptrollerImplementation(address)": { + "details": "Latest Comptroller implementation for each existing implementation." + }, + "latestPluginImplementation(address)": { + "details": "Latest Plugin implementation for each existing implementation." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "customInterestFeeRates(address)": { + "notice": "Maps Unitroller (Comptroller proxy) addresses to the proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + }, + "defaultInterestFeeRate()": { + "notice": "The proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + }, + "interestFeeRate()": { + "notice": "Returns the proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/FeeDistributor.sol": "FeeDistributor" + }, + "libraries": {} + }, + "sources": { + "contracts/FeeDistributor.sol": { + "keccak256": "0x5785c93499f16642fef38aa423cacf7c9d286f6ec0e4873d75165279fdab72c7", + "urls": [ + "bzz-raw://129be44e3e7c21dcaef33dac46bdad1a4accfcfe53a3a2b7fd423e54f3f5b510", + "dweb:/ipfs/QmZNmJeAL2R7EoRC1SfsUHtQPcaoHCMv3kJ6znpXjKG7Xq" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20Delegator.sol": { + "keccak256": "0x3844a222bf350de1ae1e28d7d9dad173c8f8299077ea97c5328cc414cb812d16", + "urls": [ + "bzz-raw://fccfc01a3b1d04f1789a0565411b9e6b0bfe992d1493e4f229fc06dcf9b0e13d", + "dweb:/ipfs/QmZvpwkzQuMt9yz9J2gNMtUHNBebjf6gTNT3muYydnRcFa" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20PluginDelegate.sol": { + "keccak256": "0x095cc54097ac06a9b6232222c5197df72c4cc4a0f2c69261bf22ebba2dfead3f", + "urls": [ + "bzz-raw://5641c9c2222825360f0dedcd0706028c062ee42540e55f1088fb10b408d4ed9a", + "dweb:/ipfs/QmW1VLeKMfHNNvcst9uz5PD7QcJizVQ8iRApUE1NJDQ9e3" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IERC4626.sol": { + "keccak256": "0x1dc7b6dc2f1202ca16bff4eb488bb5bfcd6a48202996663a7220a888b261d7cb", + "urls": [ + "bzz-raw://35f5dfa93bcb6e10c2b83a15fd376fcd57baba83d1a09e4ba300859b8cbda1be", + "dweb:/ipfs/QmbnBkjAsEn97WyATWGF8ftifX55S4efA9RYyiuFZ4juhP" + ], + "license": null + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506153b1806100206000396000f3fe608060405260043610620002635760003560e01c8063a71d085d1162000147578063e35a480111620000b9578063fa7cc72d1162000078578063fa7cc72d1462000778578063fc4d33f9146200079d578063fc773d3314620007b5578063fdb25fb114620007da578063fe4b84df14620007f257600080fd5b8063e35a480114620006bf578063e95600be14620006e4578063eab8a3881462000709578063f2fde38b146200072e578063f7e7d1fd146200075357600080fd5b8063cbc505f81162000106578063cbc505f81462000623578063dd86fea11462000648578063df595cb81462000660578063dfcb48bd1462000685578063e30c3978146200069d57600080fd5b8063a71d085d146200055b578063aa84161c1462000573578063b01b86fd14620005a8578063bbcdd6d314620005cd578063c5232b4714620005f257600080fd5b8063642843a511620001e157806384651d7311620001a057806384651d7314620004b757806388457be114620004cf5780638aac2f0c14620004f45780638da5cb5b1462000516578063930d2438146200053657600080fd5b8063642843a514620003fa5780636e96dfd7146200041f578063715018a614620004445780637a1133d6146200045c57806381218ea9146200049257600080fd5b80632203abb5116200022e5780632203abb514620003285780632acbff3914620003665780633465b6e1146200038b5780633ddd836d14620003b057806351f02d6a14620003d557600080fd5b806306bc461114620002705780630b2a2394146200029757806311a0e21714620002cf5780631259821c146200030357600080fd5b366200026b57005b600080fd5b3480156200027d57600080fd5b50620002956200028f366004620028c9565b62000817565b005b348015620002a457600080fd5b50620002bc620002b6366004620028f8565b62000871565b6040519081526020015b60405180910390f35b348015620002dc57600080fd5b50620002f4620002ee366004620028f8565b62000b83565b604051620002c6919062002918565b3480156200031057600080fd5b50620002956200032236600462002967565b62000bfb565b3480156200033557600080fd5b506200034d62000347366004620028c9565b62000c33565b6040516001600160a01b039091168152602001620002c6565b3480156200037357600080fd5b506200029562000385366004620029f4565b62000c6c565b3480156200039857600080fd5b5062000295620003aa366004620028f8565b62000db4565b348015620003bd57600080fd5b5062000295620003cf36600462002a67565b62000ff1565b348015620003e257600080fd5b506200034d620003f436600462002b0e565b62001065565b3480156200040757600080fd5b50620002956200041936600462002b9a565b620014bd565b3480156200042c57600080fd5b50620002956200043e366004620028f8565b620014d2565b3480156200045157600080fd5b50620002956200153e565b3480156200046957600080fd5b50620004816200047b366004620028f8565b62001584565b6040519015158152602001620002c6565b3480156200049f57600080fd5b506200034d620004b1366004620028f8565b620016f9565b348015620004c457600080fd5b50620002bc60705481565b348015620004dc57600080fd5b5062000295620004ee36600462002bbd565b62001744565b3480156200050157600080fd5b50606c546200034d906001600160a01b031681565b3480156200052357600080fd5b506033546001600160a01b03166200034d565b3480156200054357600080fd5b50620002956200055536600462002967565b620017ea565b3480156200056857600080fd5b50620002bc606d5481565b3480156200058057600080fd5b50620005986200059236600462002c1e565b62001822565b604051620002c692919062002c9b565b348015620005b557600080fd5b5062000295620005c736600462002cc1565b62001926565b348015620005da57600080fd5b506200034d620005ec366004620028f8565b620019f3565b348015620005ff57600080fd5b50620002bc62000611366004620028f8565b60666020526000908152604090205481565b3480156200063057600080fd5b50620002f462000642366004620028f8565b62001a3b565b3480156200065557600080fd5b50620002bc62001ab1565b3480156200066d57600080fd5b50620004816200067f36600462002d28565b62001bb2565b3480156200069257600080fd5b50620002bc606f5481565b348015620006aa57600080fd5b506065546200034d906001600160a01b031681565b348015620006cc57600080fd5b5062000295620006de36600462002d99565b62001c4f565b348015620006f157600080fd5b50620002956200070336600462002db3565b62001c89565b3480156200071657600080fd5b50620002956200072836600462002db3565b62001cbe565b3480156200073b57600080fd5b50620002956200074d366004620028f8565b62001ced565b3480156200076057600080fd5b506200029562000772366004620028f8565b62001d60565b3480156200078557600080fd5b506200029562000797366004620028f8565b62001e46565b348015620007aa57600080fd5b506200029562001fac565b348015620007c257600080fd5b506200034d620007d4366004620028c9565b620020c6565b348015620007e757600080fd5b50620002bc606e5481565b348015620007ff57600080fd5b50620002956200081136600462002d99565b620020e3565b6200082162002232565b670de0b6b3a7640000811315620008555760405162461bcd60e51b81526004016200084c9062002e0e565b60405180910390fd5b6001600160a01b03909116600090815260666020526040902055565b6000806001600160a01b03831663c37f68e2336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401608060405180830381865afa158015620008c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008ef919062002e59565b50925050508062000904575050606e54919050565b6000836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096b919062002e90565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009d4919062002e90565b90506000816001600160a01b031663aea91078876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a26573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a4c919062002e90565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801562000a91573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ab7919062002eb0565b90506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000afa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b20919062002eca565b60ff169050600062000b3482600a62002ffd565b62000b4087856200300b565b62000b4c91906200302d565b9050606e5481111562000b6757506000979650505050505050565b80606e5462000b77919062003050565b98975050505050505050565b6001600160a01b0381166000908152606b602090815260409182902080548351818402810184019094528084526060939283018282801562000bef57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000bd0575b50505050509050919050565b62000c0562002232565b6001600160a01b03918216600090815260696020526040902080546001600160a01b03191691909216179055565b606b602052816000526040600020818154811062000c5057600080fd5b6000918252602090912001546001600160a01b03169150829050565b62000c7662002232565b821580159062000c8557508281145b62000ceb5760405162461bcd60e51b815260206004820152602f60248201527f4172726179206c656e67746873206d75737420626520657175616c20616e642060448201526e33b932b0ba32b9103a3430b710181760891b60648201526084016200084c565b60005b8381101562000dad5762000d9783838381811062000d105762000d106200306a565b905060200281019062000d24919062003080565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915085905081811062000d705762000d706200306a565b905060200201602081019062000d879190620028f8565b6001600160a01b03169062002290565b508062000da481620030ca565b91505062000cee565b5050505050565b6001600160a01b03811662000ef157478062000e1d5760405162461bcd60e51b815260206004820152602160248201527f4e6f2062616c616e636520617661696c61626c6520746f2077697468647261776044820152601760f91b60648201526084016200084c565b600062000e326033546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d806000811462000e7e576040519150601f19603f3d011682016040523d82523d6000602084013e62000e83565b606091505b505090508062000eec5760405162461bcd60e51b815260206004820152602d60248201527f4661696c656420746f207472616e73666572204554482062616c616e6365207460448201526c379036b9b39739b2b73232b91760991b60648201526084016200084c565b505050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f61919062002eb0565b90506000811162000fc55760405162461bcd60e51b815260206004820152602760248201527f4e6f20746f6b656e2062616c616e636520617661696c61626c6520746f2077696044820152663a34323930bb9760c91b60648201526084016200084c565b62000eec62000fdc6033546001600160a01b031690565b6001600160a01b0384169083620022dd565b50565b62000ffb62002232565b6040516389cd985560e01b81526001600160a01b03838116600483015282811660248301528416906389cd985590604401600060405180830381600087803b1580156200104757600080fd5b505af11580156200105c573d6000803e3d6000fd5b50505050505050565b6000808062001078604082888a620030e8565b81019062001087919062002967565b90925090506001600160a01b0381163314620010e65760405162461bcd60e51b815260206004820152601a60248201527f436f6d7074726f6c6c6572206973206e6f742073656e6465722e00000000000060448201526064016200084c565b60003383606d60008154620010fb90620030ca565b91829055506040516bffffffffffffffffffffffff19606094851b811660208301529290931b909116603483015260488201526068016040516020818303038152906040528051906020012090506000604051806020016200115d90620027a9565b601f1982820381018352601f9091011660408190526200118591908b908b9060200162003114565b60405160208183030381529060405290506000620011a66000848462002331565b60ff8c166000908152606860209081526040808320815180830190925280546001600160a01b03168252600181018054959650939491939092840191620011ed906200313e565b80601f01602080910402602001604051908101604052809291908181526020018280546200121b906200313e565b80156200126c5780601f1062001240576101008083540402835291602001916200126c565b820191906000526020600020905b8154815290600101906020018083116200124e57829003601f168201915b50505091909252505081516040516389cd985560e01b81526001600160a01b038083166004830152600060248301529394509092851691506389cd985590604401600060405180830381600087803b158015620012c857600080fd5b505af1158015620012dd573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606b60209081526040808320805482518185028101850190935280835291929091908301828280156200134d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200132e575b5050505050905060005b81518110156200144557826001600160a01b03168282815181106200138057620013806200306a565b60200260200101516001600160a01b031614156200139e5762001430565b846001600160a01b03166389cd9855838381518110620013c257620013c26200306a565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401600060405180830381600087803b1580156200141657600080fd5b505af11580156200142b573d6000803e3d6000fd5b505050505b806200143c81620030ca565b91505062001357565b50604051630adccee560e31b81526001600160a01b038516906356e677289062001476908e908e906004016200317b565b600060405180830381600087803b1580156200149157600080fd5b505af1158015620014a6573d6000803e3d6000fd5b50959a505050505050505050505095945050505050565b620014c762002232565b606e91909155606f55565b620014dc62002232565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6200154862002232565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016200084c565b60006200159062002232565b60008290506000816001600160a01b031663ef01df4f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620015d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015fc919062002e90565b6001600160a01b038181166000908152606960205260409081902054905163033e92d960e31b815290821660048201529192508316906319f496c890602401600060405180830381600087803b1580156200165657600080fd5b505af11580156200166b573d6000803e3d6000fd5b505050506000826001600160a01b031663ef01df4f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d6919062002e90565b9050816001600160a01b0316816001600160a01b0316141593505050505b919050565b6001600160a01b038181166000908152606960205260408120549091166200172257816200173e565b6001600160a01b03808316600090815260696020526040902054165b92915050565b6200174e62002232565b6040518060400160405280846001600160a01b0316815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060ff87168152606860209081526040909120835181546001600160a01b0319166001600160a01b039091161781558382015180519193506200105c926001850192910190620027b7565b620017f462002232565b6001600160a01b03918216600090815260676020526040902080546001600160a01b03191691909216179055565b60ff81166000908152606860209081526040808320815180830190925280546001600160a01b03168252600181018054606094869493929084019162001868906200313e565b80601f016020809104026020016040519081016040528092919081815260200182805462001896906200313e565b8015620018e75780601f10620018bb57610100808354040283529160200191620018e7565b820191906000526020600020905b815481529060010190602001808311620018c957829003601f168201915b50505091909252505081519192506060916001600160a01b03161515905062001913576000816200191b565b815160208301515b935093505050915091565b6200193062002232565b826200197f5760405162461bcd60e51b815260206004820152601e60248201527f4e6f2074617267657420616464726573736573207370656369666965642e000060448201526064016200084c565b60005b8381101562000dad57620019dd83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915085905081811062000d705762000d706200306a565b5080620019ea81620030ca565b91505062001982565b6001600160a01b0381811660009081526067602052604081205490911662001a1c57816200173e565b506001600160a01b039081166000908152606760205260409020541690565b6001600160a01b0381166000908152606a602090815260409182902080548351818402810184019094528084526060939283018282801562000bef576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000bd05750505050509050919050565b60408051600481526024810182526020810180516001600160e01b0316635fe3b56760e01b179052905160009182918291339162001af09190620031aa565b600060405180830381855afa9150503d806000811462001b2d576040519150601f19603f3d011682016040523d82523d6000602084013e62001b32565b606091505b509150915081801562001b46575080516020145b1562001ba85760008180602001905181019062001b64919062002e90565b6001600160a01b03811660009081526066602052604081205491925081131562001b9057949350505050565b600081121562001ba557600094505050505090565b50505b6070549250505090565b606c54604051631beb2b9760e31b81526001600160a01b038681166004830152858116602483015284811660448301526001600160e01b031984166064830152600092169063df595cb890608401602060405180830381865afa15801562001c1e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c449190620031c8565b90505b949350505050565b62001c5962002232565b670de0b6b3a764000081111562001c845760405162461bcd60e51b81526004016200084c9062002e0e565b607055565b62001c9362002232565b6001600160a01b0383166000908152606a6020526040902062001cb890838362002846565b50505050565b62001cc862002232565b6001600160a01b0383166000908152606b6020526040902062001cb890838362002846565b62001cf762002232565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633148062001e2357600062001da87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b03811633148062001e205760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b60648201526084016200084c565b50505b50606c80546001600160a01b0319166001600160a01b0392909216919091179055565b62001e5062002232565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e91573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ebb91908101906200320f565b9050816001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001ef957600080fd5b505af115801562001f0e573d6000803e3d6000fd5b5050505060005b81518160ff16101562000eec57818160ff168151811062001f3a5762001f3a6200306a565b60200260200101516001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001f7d57600080fd5b505af115801562001f92573d6000803e3d6000fd5b50505050808062001fa390620032d6565b91505062001f15565b6065546001600160a01b03163314620020005760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016200084c565b6000620020156033546001600160a01b031690565b6065549091506001600160a01b03166200202f8162002438565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910162001532565b606a602052816000526040600020818154811062000c5057600080fd5b600054610100900460ff1615808015620021045750600054600160ff909116105b80620021205750303b15801562002120575060005460ff166001145b620021855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016200084c565b6000805460ff191660011790558015620021a9576000805461ff0019166101001790555b670de0b6b3a7640000821115620021d45760405162461bcd60e51b81526004016200084c9062002e0e565b620021df336200248a565b6070829055600019606f5580156200222e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200162001532565b5050565b6033546001600160a01b031633146200228e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200084c565b565b6060620022d6838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250620024c9565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905262000eec908490620025ac565b600083471015620023855760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064016200084c565b8151620023d55760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016200084c565b8282516020840186f590506001600160a01b038116620022d65760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016200084c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620024b45760405162461bcd60e51b81526004016200084c90620032f9565b620024be62002685565b62000fee8162002438565b6060824710156200252c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200084c565b600080866001600160a01b031685876040516200254a9190620031aa565b60006040518083038185875af1925050503d806000811462002589576040519150601f19603f3d011682016040523d82523d6000602084013e6200258e565b606091505b5091509150620025a187838387620026b9565b979650505050505050565b600062002603826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620027369092919063ffffffff16565b80519091501562000eec5780806020019051810190620026249190620031c8565b62000eec5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200084c565b600054610100900460ff16620026af5760405162461bcd60e51b81526004016200084c90620032f9565b6200228e62002747565b606083156200272a57825162002722576001600160a01b0385163b620027225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200084c565b508162001c47565b62001c4783836200277c565b606062001c478484600085620024c9565b600054610100900460ff16620027715760405162461bcd60e51b81526004016200084c90620032f9565b6200228e3362002438565b8151156200278d5781518083602001fd5b8060405162461bcd60e51b81526004016200084c919062003344565b61204b806200335a83390190565b828054620027c5906200313e565b90600052602060002090601f016020900481019282620027e9576000855562002834565b82601f106200280457805160ff191683800117855562002834565b8280016001018555821562002834579182015b828111156200283457825182559160200191906001019062002817565b50620028429291506200289c565b5090565b82805482825590600052602060002090810192821562002834579160200282015b82811115620028345781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019062002867565b5b808211156200284257600081556001016200289d565b6001600160a01b038116811462000fee57600080fd5b60008060408385031215620028dd57600080fd5b8235620028ea81620028b3565b946020939093013593505050565b6000602082840312156200290b57600080fd5b8135620022d681620028b3565b6020808252825182820181905260009190848201906040850190845b818110156200295b5783516001600160a01b03168352928401929184019160010162002934565b50909695505050505050565b600080604083850312156200297b57600080fd5b82356200298881620028b3565b915060208301356200299a81620028b3565b809150509250929050565b60008083601f840112620029b857600080fd5b50813567ffffffffffffffff811115620029d157600080fd5b6020830191508360208260051b8501011115620029ed57600080fd5b9250929050565b6000806000806040858703121562002a0b57600080fd5b843567ffffffffffffffff8082111562002a2457600080fd5b62002a3288838901620029a5565b9096509450602087013591508082111562002a4c57600080fd5b5062002a5b87828801620029a5565b95989497509550505050565b60008060006060848603121562002a7d57600080fd5b833562002a8a81620028b3565b9250602084013562002a9c81620028b3565b9150604084013562002aae81620028b3565b809150509250925092565b60ff8116811462000fee57600080fd5b60008083601f84011262002adc57600080fd5b50813567ffffffffffffffff81111562002af557600080fd5b602083019150836020828501011115620029ed57600080fd5b60008060008060006060868803121562002b2757600080fd5b853562002b348162002ab9565b9450602086013567ffffffffffffffff8082111562002b5257600080fd5b62002b6089838a0162002ac9565b9096509450604088013591508082111562002b7a57600080fd5b5062002b898882890162002ac9565b969995985093965092949392505050565b6000806040838503121562002bae57600080fd5b50508035926020909101359150565b6000806000806060858703121562002bd457600080fd5b843562002be18162002ab9565b9350602085013562002bf381620028b3565b9250604085013567ffffffffffffffff81111562002c1057600080fd5b62002a5b8782880162002ac9565b60006020828403121562002c3157600080fd5b8135620022d68162002ab9565b60005b8381101562002c5b57818101518382015260200162002c41565b8381111562001cb85750506000910152565b6000815180845262002c8781602086016020860162002c3e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009062001c479083018462002c6d565b6000806000806040858703121562002cd857600080fd5b843567ffffffffffffffff8082111562002cf157600080fd5b62002cff88838901620029a5565b9096509450602087013591508082111562002d1957600080fd5b5062002a5b8782880162002ac9565b6000806000806080858703121562002d3f57600080fd5b843562002d4c81620028b3565b9350602085013562002d5e81620028b3565b9250604085013562002d7081620028b3565b915060608501356001600160e01b03198116811462002d8e57600080fd5b939692955090935050565b60006020828403121562002dac57600080fd5b5035919050565b60008060006040848603121562002dc957600080fd5b833562002dd681620028b3565b9250602084013567ffffffffffffffff81111562002df357600080fd5b62002e0186828701620029a5565b9497909650939450505050565b6020808252602b908201527f496e7465726573742066656520726174652063616e6e6f74206265206d6f726560408201526a103a3430b710189818129760a91b606082015260800190565b6000806000806080858703121562002e7057600080fd5b505082516020840151604085015160609095015191969095509092509050565b60006020828403121562002ea357600080fd5b8151620022d681620028b3565b60006020828403121562002ec357600080fd5b5051919050565b60006020828403121562002edd57600080fd5b8151620022d68162002ab9565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562002f4157816000190482111562002f255762002f2562002eea565b8085161562002f3357918102915b93841c939080029062002f05565b509250929050565b60008262002f5a575060016200173e565b8162002f69575060006200173e565b816001811462002f82576002811462002f8d5762002fad565b60019150506200173e565b60ff84111562002fa15762002fa162002eea565b50506001821b6200173e565b5060208310610133831016604e8410600b841016171562002fd2575081810a6200173e565b62002fde838362002f00565b806000190482111562002ff55762002ff562002eea565b029392505050565b6000620022d6838362002f49565b600081600019048311821515161562003028576200302862002eea565b500290565b6000826200304b57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101562003065576200306562002eea565b500390565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126200309857600080fd5b83018035915067ffffffffffffffff821115620030b457600080fd5b602001915036819003821315620029ed57600080fd5b6000600019821415620030e157620030e162002eea565b5060010190565b60008085851115620030f957600080fd5b838611156200310757600080fd5b5050820193919092039150565b600084516200312881846020890162002c3e565b8201838582376000930192835250909392505050565b600181811c908216806200315357607f821691505b602082108114156200317557634e487b7160e01b600052602260045260246000fd5b50919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60008251620031be81846020870162002c3e565b9190910192915050565b600060208284031215620031db57600080fd5b81518015158114620022d657600080fd5b634e487b7160e01b600052604160045260246000fd5b8051620016f481620028b3565b600060208083850312156200322357600080fd5b825167ffffffffffffffff808211156200323c57600080fd5b818501915085601f8301126200325157600080fd5b815181811115620032665762003266620031ec565b8060051b604051601f19603f830116810181811085821117156200328e576200328e620031ec565b604052918252848201925083810185019188831115620032ad57600080fd5b938501935b8285101562000b7757620032c68562003202565b84529385019392850192620032b2565b600060ff821660ff811415620032f057620032f062002eea565b60010192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b602081526000620022d6602083018462002c6d56fe60806040523480156200001157600080fd5b506040516200204b3803806200204b8339810160408190526200003491620006b1565b336001600160a01b038716146200007b5760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064015b60405180910390fd5b6000886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e2919062000784565b600080546001600160a01b0319166001600160a01b038a8116919091179091556702c68af0bb14000060055560038054610100600160a81b0319166101008c84160217905543600955670de0b6b3a7640000600a55604080516310c8fc9560e11b8152905192935090881691632191f92a916004808201926020929091908290030181865afa1580156200017a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a09190620007b0565b620001d85760405162461bcd60e51b8152602060048201526007602482015266216e6f7449726d60c81b604482015260640162000072565b600480546001600160a01b0319166001600160a01b038816908117909155604080516000815260208101929092527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926910160405180910390a184516200024690600190602088019062000525565b5083516200025c90600290602087019062000525565b506003805460ff191660ff8316179055600754600654670de0b6b3a76400009190620002899086620007d4565b620002959190620007d4565b1115620002cf5760405162461bcd60e51b8152602060048201526007602482015266085c998e9cd95d60ca1b604482015260640162000072565b60088390556040805160008152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460910160405180910390a16000198214156200031f5760065491505b60008060009054906101000a90046001600160a01b03166001600160a01b031663dd86fea16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620007fb565b9050670de0b6b3a76400008184600854620003b69190620007d4565b620003c29190620007d4565b1115620004025760405162461bcd60e51b815260206004820152600d60248201526c0858591b5a5b9199594e9cd95d609a1b604482015260640162000072565b60068390556040805160008152602081018590527fcdd0b588250e1398549f79cfdb8217c186688822905d6715b0834ea1c865594a910160405180910390a160078190556040805160008152602081018390527fedec4b9c99c2cdb231e7fd036f861e0445b015916700f41b9835f984cb9be4cb910160405180910390a1506000805460ff60a01b1916600160a01b179055601380546001600160a01b038b166001600160a01b03199091168117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa158015620004ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005159190620007fb565b5050505050505050505062000852565b828054620005339062000815565b90600052602060002090601f016020900481019282620005575760008555620005a2565b82601f106200057257805160ff1916838001178555620005a2565b82800160010185558215620005a2579182015b82811115620005a257825182559160200191906001019062000585565b50620005b0929150620005b4565b5090565b5b80821115620005b05760008155600101620005b5565b6001600160a01b0381168114620005e157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200060c57600080fd5b81516001600160401b0380821115620006295762000629620005e4565b604051601f8301601f19908116603f01168101908282118183101715620006545762000654620005e4565b816040528381526020925086838588010111156200067157600080fd5b600091505b8382101562000695578582018301518183018401529082019062000676565b83821115620006a75760008385830101525b9695505050505050565b600080600080600080600080610100898b031215620006cf57600080fd5b8851620006dc81620005cb565b60208a0151909850620006ef81620005cb565b60408a01519097506200070281620005cb565b60608a01519096506200071581620005cb565b60808a01519095506001600160401b03808211156200073357600080fd5b620007418c838d01620005fa565b955060a08b01519150808211156200075857600080fd5b50620007678b828c01620005fa565b60c08b015160e0909b0151999c989b509699959894979350505050565b6000602082840312156200079757600080fd5b815160ff81168114620007a957600080fd5b9392505050565b600060208284031215620007c357600080fd5b81518015158114620007a957600080fd5b60008219821115620007f657634e487b7160e01b600052601160045260246000fd5b500190565b6000602082840312156200080e57600080fd5b5051919050565b600181811c908216806200082a57607f821691505b602082108114156200084c57634e487b7160e01b600052602260045260246000fd5b50919050565b6117e980620008626000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806389cd9855116100c3578063ba49f54a1161007c578063ba49f54a146102f6578063be99f119146102fe578063c3bf11cd1461030d578063c91a424f14610316578063e207afe214610329578063f3fdb15a1461033c57610158565b806389cd9855146102b55780638d02d9a1146102ca5780638f840ddd146102d357806395d89b41146102dc5780639826394b146102e4578063aa5af0fd146102ed57610158565b80635fe3b567116101155780635fe3b5671461025557806361feacff1461026d5780636333d001146102765780636752e7021461028b5780636c540baf146102995780636f307dc3146102a257610158565b806306fdde03146101cf578063173b9904146101ed57806318160ddd14610204578063313ce5671461020d57806347bd37181461022c5780635c60da1b14610235575b600061016f6000356001600160e01b03191661034f565b90506001600160a01b0381166101ab57604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156101ca573d6000f35b3d6000fd5b6101d761036f565b6040516101e491906112a9565b60405180910390f35b6101f660085481565b6040519081526020016101e4565b6101f6600f5481565b60035461021a9060ff1681565b60405160ff90911681526020016101e4565b6101f6600b5481565b61023d6103fd565b6040516001600160a01b0390911681526020016101e4565b60035461023d9061010090046001600160a01b031681565b6101f6600d5481565b61027e610453565b6040516101e491906112c3565b6101f6666379da05b6000081565b6101f660095481565b60135461023d906001600160a01b031681565b6102c86102c3366004611328565b61045d565b005b6101f660065481565b6101f6600c5481565b6101d76104b5565b6101f6600e5481565b6101f6600a5481565b6102c86104c2565b6101f667016345785d8a000081565b6101f660075481565b60005461023d906001600160a01b031681565b6102c8610337366004611361565b6106a7565b60045461023d906001600160a01b031681565b6000610369826000805160206117bd833981519152610729565b92915050565b6001805461037c906113e6565b80601f01602080910402602001604051908101604052809291908181526020018280546103a8906113e6565b80156103f55780601f106103ca576101008083540402835291602001916103f5565b820191906000526020600020905b8154815290600101906020018083116103d857829003601f168201915b505050505081565b60408051808201909152600e81526d64656c656761746554797065282960901b602090910152600061044e7f2c436e5bba88e403c36d7a2822cd2b39b360d5c6296839bbf72c5a05167fd3ff61034f565b905090565b606061044e6107cf565b6000546001600160a01b031633146104a75760405162461bcd60e51b815260206004820152600d60248201526c085d5b985d5d1a1bdc9a5e9959609a1b60448201526064016101a2565b6104b18282610841565b5050565b6002805461037c906113e6565b333014806104d357506104d3610862565b6105105760405162461bcd60e51b815260206004820152600e60248201526d10b9b2b6331037b91030b236b4b760911b60448201526064016101a2565b60408051600481526024810182526020810180516001600160e01b0316632c436e5b60e01b17905290516000918291309161054a91611421565b600060405180830381855afa9150503d8060008114610585576040519150601f19603f3d011682016040523d82523d6000602084013e61058a565b606091505b5091509150816105cf5760405162461bcd60e51b815260206004820152601060248201526f6e6f2064656c6567617465207479706560801b60448201526064016101a2565b6000818060200190518101906105e5919061143d565b60008054604051632aa1058760e21b815260ff84166004820152929350909182916001600160a01b03169063aa84161c90602401600060405180830381865afa158015610636573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261065e91908101906114a7565b91509150600061066c6103fd565b9050826001600160a01b0316816001600160a01b0316146106965761069183836109df565b61069f565b61069f81610ab7565b505050505050565b6106af610862565b6106e45760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016101a2565b6107248383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109df92505050565b505050565b8054600090815b818110156107c457846001600160e01b03191684600001828154811061075857610758611551565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156107b25783600001818154811061079357610793611551565b6000918252602090912001546001600160a01b03169250610369915050565b806107bc8161157d565b915050610730565b506000949350505050565b60606000805160206117bd83398151915260010180548060200260200160405190810160405280929190818152602001828054801561083757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610819575b5050505050905090565b6001600160a01b038116156108595761085981610bbf565b6104b182610cef565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190611598565b6001600160a01b0316336001600160a01b031614801561095c5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095c91906115b5565b806109d957506000546001600160a01b0316331480156109d95750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d991906115b5565b91505090565b60006109e96103fd565b90506109f483610ab7565b610a6e306356e6772860e01b84604051602401610a1191906112a9565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280600c81526020016b08589958dbdb59481a5b5c1b60a21b815250610de7565b50604080516001600160a01b038084168252851660208201527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a1505050565b600080546040516311a0e21760e01b81526001600160a01b038481166004830152909116906311a0e21790602401600060405180830381865afa158015610b02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2a91908101906115fb565b90506000610b366107cf565b905060005b8151811015610b7857610b66828281518110610b5957610b59611551565b6020026020010151610bbf565b80610b708161157d565b915050610b3b565b5060005b8251811015610bb957610ba7838281518110610b9a57610b9a611551565b6020026020010151610cef565b80610bb18161157d565b915050610b7c565b50505050565b6000805160206117bd833981519152610bd782610e83565b60005b600182015460ff8216101561072457826001600160a01b0316826001018260ff1681548110610c0b57610c0b611551565b6000918252602090912001546001600160a01b03161415610cdd57600180830180549091610c389161169a565b81548110610c4857610c48611551565b6000918252602090912001546001830180546001600160a01b039092169160ff8416908110610c7957610c79611551565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600101805480610cba57610cba6116b1565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610ce7816116c7565b915050610bda565b6000805160206117bd83398151915260005b600182015460ff82161015610da757826001600160a01b0316826001018260ff1681548110610d3257610d32611551565b6000918252602090912001546001600160a01b03161415610d955760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c726561647920616464656400000000000000000060448201526064016101a2565b80610d9f816116c7565b915050610d01565b50610db182611042565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b031685604051610e049190611421565b6000604051808303816000865af19150503d8060008114610e41576040519150601f19603f3d011682016040523d82523d6000602084013e610e46565b606091505b509150915081610e7a57805115610e605780518082602001fd5b8360405162461bcd60e51b81526004016101a291906112a9565b95945050505050565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610eeb91908101906116e7565b90506000805160206117bd83398151915260005b82518161ffff161015610bb9576000838261ffff1681518110610f2457610f24611551565b60200260200101519050610f388184610729565b6001600160a01b0316856001600160a01b031614610f5857610f58611784565b6000610f6482856111c9565b84549091508490610f779060019061169a565b81548110610f8757610f87611551565b90600052602060002001846000018261ffff1681548110610faa57610faa611551565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff16909102179055835484908061100b5761100b6116b1565b600082815260209020810160001990810180546001600160c01b03191690550190555081905061103a8161179a565b915050610eff565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611082573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110aa91908101906116e7565b6000805160206117bd83398151915280549192509060005b83518110156111c25760008482815181106110df576110df611551565b6020026020010151905060006110f58286610729565b90506001600160a01b0381161561113a57604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b03821660248201526044016101a2565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b03199092169390921692909217919091179055836111aa8161179a565b945050505080806111ba9061157d565b9150506110c2565b5050505050565b8054600090815b8161ffff168161ffff16101561124557846001600160e01b031916846000018261ffff168154811061120457611204611551565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156112335791506103699050565b8061123d8161179a565b9150506111d0565b5061ffff949350505050565b60005b8381101561126c578181015183820152602001611254565b83811115610bb95750506000910152565b60008151808452611295816020860160208601611251565b601f01601f19169290920160200192915050565b6020815260006112bc602083018461127d565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156113045783516001600160a01b0316835292840192918401916001016112df565b50909695505050505050565b6001600160a01b038116811461132557600080fd5b50565b6000806040838503121561133b57600080fd5b823561134681611310565b9150602083013561135681611310565b809150509250929050565b60008060006040848603121561137657600080fd5b833561138181611310565b9250602084013567ffffffffffffffff8082111561139e57600080fd5b818601915086601f8301126113b257600080fd5b8135818111156113c157600080fd5b8760208285010111156113d357600080fd5b6020830194508093505050509250925092565b600181811c908216806113fa57607f821691505b6020821081141561141b57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251611433818460208701611251565b9190910192915050565b60006020828403121561144f57600080fd5b815160ff811681146112bc57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561149f5761149f611460565b604052919050565b600080604083850312156114ba57600080fd5b82516114c581611310565b602084015190925067ffffffffffffffff808211156114e357600080fd5b818501915085601f8301126114f757600080fd5b81518181111561150957611509611460565b61151c601f8201601f1916602001611476565b915080825286602082850101111561153357600080fd5b611544816020840160208601611251565b5080925050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561159157611591611567565b5060010190565b6000602082840312156115aa57600080fd5b81516112bc81611310565b6000602082840312156115c757600080fd5b815180151581146112bc57600080fd5b600067ffffffffffffffff8211156115f1576115f1611460565b5060051b60200190565b6000602080838503121561160e57600080fd5b825167ffffffffffffffff81111561162557600080fd5b8301601f8101851361163657600080fd5b8051611649611644826115d7565b611476565b81815260059190911b8201830190838101908783111561166857600080fd5b928401925b8284101561168f57835161168081611310565b8252928401929084019061166d565b979650505050505050565b6000828210156116ac576116ac611567565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156116de576116de611567565b60010192915050565b600060208083850312156116fa57600080fd5b825167ffffffffffffffff81111561171157600080fd5b8301601f8101851361172257600080fd5b8051611730611644826115d7565b81815260059190911b8201830190838101908783111561174f57600080fd5b928401925b8284101561168f5783516001600160e01b0319811681146117755760008081fd5b82529284019290840190611754565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156117b2576117b2611567565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "2984:11718:0:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405260043610620002635760003560e01c8063a71d085d1162000147578063e35a480111620000b9578063fa7cc72d1162000078578063fa7cc72d1462000778578063fc4d33f9146200079d578063fc773d3314620007b5578063fdb25fb114620007da578063fe4b84df14620007f257600080fd5b8063e35a480114620006bf578063e95600be14620006e4578063eab8a3881462000709578063f2fde38b146200072e578063f7e7d1fd146200075357600080fd5b8063cbc505f81162000106578063cbc505f81462000623578063dd86fea11462000648578063df595cb81462000660578063dfcb48bd1462000685578063e30c3978146200069d57600080fd5b8063a71d085d146200055b578063aa84161c1462000573578063b01b86fd14620005a8578063bbcdd6d314620005cd578063c5232b4714620005f257600080fd5b8063642843a511620001e157806384651d7311620001a057806384651d7314620004b757806388457be114620004cf5780638aac2f0c14620004f45780638da5cb5b1462000516578063930d2438146200053657600080fd5b8063642843a514620003fa5780636e96dfd7146200041f578063715018a614620004445780637a1133d6146200045c57806381218ea9146200049257600080fd5b80632203abb5116200022e5780632203abb514620003285780632acbff3914620003665780633465b6e1146200038b5780633ddd836d14620003b057806351f02d6a14620003d557600080fd5b806306bc461114620002705780630b2a2394146200029757806311a0e21714620002cf5780631259821c146200030357600080fd5b366200026b57005b600080fd5b3480156200027d57600080fd5b50620002956200028f366004620028c9565b62000817565b005b348015620002a457600080fd5b50620002bc620002b6366004620028f8565b62000871565b6040519081526020015b60405180910390f35b348015620002dc57600080fd5b50620002f4620002ee366004620028f8565b62000b83565b604051620002c6919062002918565b3480156200031057600080fd5b50620002956200032236600462002967565b62000bfb565b3480156200033557600080fd5b506200034d62000347366004620028c9565b62000c33565b6040516001600160a01b039091168152602001620002c6565b3480156200037357600080fd5b506200029562000385366004620029f4565b62000c6c565b3480156200039857600080fd5b5062000295620003aa366004620028f8565b62000db4565b348015620003bd57600080fd5b5062000295620003cf36600462002a67565b62000ff1565b348015620003e257600080fd5b506200034d620003f436600462002b0e565b62001065565b3480156200040757600080fd5b50620002956200041936600462002b9a565b620014bd565b3480156200042c57600080fd5b50620002956200043e366004620028f8565b620014d2565b3480156200045157600080fd5b50620002956200153e565b3480156200046957600080fd5b50620004816200047b366004620028f8565b62001584565b6040519015158152602001620002c6565b3480156200049f57600080fd5b506200034d620004b1366004620028f8565b620016f9565b348015620004c457600080fd5b50620002bc60705481565b348015620004dc57600080fd5b5062000295620004ee36600462002bbd565b62001744565b3480156200050157600080fd5b50606c546200034d906001600160a01b031681565b3480156200052357600080fd5b506033546001600160a01b03166200034d565b3480156200054357600080fd5b50620002956200055536600462002967565b620017ea565b3480156200056857600080fd5b50620002bc606d5481565b3480156200058057600080fd5b50620005986200059236600462002c1e565b62001822565b604051620002c692919062002c9b565b348015620005b557600080fd5b5062000295620005c736600462002cc1565b62001926565b348015620005da57600080fd5b506200034d620005ec366004620028f8565b620019f3565b348015620005ff57600080fd5b50620002bc62000611366004620028f8565b60666020526000908152604090205481565b3480156200063057600080fd5b50620002f462000642366004620028f8565b62001a3b565b3480156200065557600080fd5b50620002bc62001ab1565b3480156200066d57600080fd5b50620004816200067f36600462002d28565b62001bb2565b3480156200069257600080fd5b50620002bc606f5481565b348015620006aa57600080fd5b506065546200034d906001600160a01b031681565b348015620006cc57600080fd5b5062000295620006de36600462002d99565b62001c4f565b348015620006f157600080fd5b50620002956200070336600462002db3565b62001c89565b3480156200071657600080fd5b50620002956200072836600462002db3565b62001cbe565b3480156200073b57600080fd5b50620002956200074d366004620028f8565b62001ced565b3480156200076057600080fd5b506200029562000772366004620028f8565b62001d60565b3480156200078557600080fd5b506200029562000797366004620028f8565b62001e46565b348015620007aa57600080fd5b506200029562001fac565b348015620007c257600080fd5b506200034d620007d4366004620028c9565b620020c6565b348015620007e757600080fd5b50620002bc606e5481565b348015620007ff57600080fd5b50620002956200081136600462002d99565b620020e3565b6200082162002232565b670de0b6b3a7640000811315620008555760405162461bcd60e51b81526004016200084c9062002e0e565b60405180910390fd5b6001600160a01b03909116600090815260666020526040902055565b6000806001600160a01b03831663c37f68e2336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401608060405180830381865afa158015620008c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008ef919062002e59565b50925050508062000904575050606e54919050565b6000836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096b919062002e90565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009d4919062002e90565b90506000816001600160a01b031663aea91078876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a26573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a4c919062002e90565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801562000a91573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ab7919062002eb0565b90506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000afa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b20919062002eca565b60ff169050600062000b3482600a62002ffd565b62000b4087856200300b565b62000b4c91906200302d565b9050606e5481111562000b6757506000979650505050505050565b80606e5462000b77919062003050565b98975050505050505050565b6001600160a01b0381166000908152606b602090815260409182902080548351818402810184019094528084526060939283018282801562000bef57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000bd0575b50505050509050919050565b62000c0562002232565b6001600160a01b03918216600090815260696020526040902080546001600160a01b03191691909216179055565b606b602052816000526040600020818154811062000c5057600080fd5b6000918252602090912001546001600160a01b03169150829050565b62000c7662002232565b821580159062000c8557508281145b62000ceb5760405162461bcd60e51b815260206004820152602f60248201527f4172726179206c656e67746873206d75737420626520657175616c20616e642060448201526e33b932b0ba32b9103a3430b710181760891b60648201526084016200084c565b60005b8381101562000dad5762000d9783838381811062000d105762000d106200306a565b905060200281019062000d24919062003080565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915085905081811062000d705762000d706200306a565b905060200201602081019062000d879190620028f8565b6001600160a01b03169062002290565b508062000da481620030ca565b91505062000cee565b5050505050565b6001600160a01b03811662000ef157478062000e1d5760405162461bcd60e51b815260206004820152602160248201527f4e6f2062616c616e636520617661696c61626c6520746f2077697468647261776044820152601760f91b60648201526084016200084c565b600062000e326033546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d806000811462000e7e576040519150601f19603f3d011682016040523d82523d6000602084013e62000e83565b606091505b505090508062000eec5760405162461bcd60e51b815260206004820152602d60248201527f4661696c656420746f207472616e73666572204554482062616c616e6365207460448201526c379036b9b39739b2b73232b91760991b60648201526084016200084c565b505050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f61919062002eb0565b90506000811162000fc55760405162461bcd60e51b815260206004820152602760248201527f4e6f20746f6b656e2062616c616e636520617661696c61626c6520746f2077696044820152663a34323930bb9760c91b60648201526084016200084c565b62000eec62000fdc6033546001600160a01b031690565b6001600160a01b0384169083620022dd565b50565b62000ffb62002232565b6040516389cd985560e01b81526001600160a01b03838116600483015282811660248301528416906389cd985590604401600060405180830381600087803b1580156200104757600080fd5b505af11580156200105c573d6000803e3d6000fd5b50505050505050565b6000808062001078604082888a620030e8565b81019062001087919062002967565b90925090506001600160a01b0381163314620010e65760405162461bcd60e51b815260206004820152601a60248201527f436f6d7074726f6c6c6572206973206e6f742073656e6465722e00000000000060448201526064016200084c565b60003383606d60008154620010fb90620030ca565b91829055506040516bffffffffffffffffffffffff19606094851b811660208301529290931b909116603483015260488201526068016040516020818303038152906040528051906020012090506000604051806020016200115d90620027a9565b601f1982820381018352601f9091011660408190526200118591908b908b9060200162003114565b60405160208183030381529060405290506000620011a66000848462002331565b60ff8c166000908152606860209081526040808320815180830190925280546001600160a01b03168252600181018054959650939491939092840191620011ed906200313e565b80601f01602080910402602001604051908101604052809291908181526020018280546200121b906200313e565b80156200126c5780601f1062001240576101008083540402835291602001916200126c565b820191906000526020600020905b8154815290600101906020018083116200124e57829003601f168201915b50505091909252505081516040516389cd985560e01b81526001600160a01b038083166004830152600060248301529394509092851691506389cd985590604401600060405180830381600087803b158015620012c857600080fd5b505af1158015620012dd573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606b60209081526040808320805482518185028101850190935280835291929091908301828280156200134d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200132e575b5050505050905060005b81518110156200144557826001600160a01b03168282815181106200138057620013806200306a565b60200260200101516001600160a01b031614156200139e5762001430565b846001600160a01b03166389cd9855838381518110620013c257620013c26200306a565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401600060405180830381600087803b1580156200141657600080fd5b505af11580156200142b573d6000803e3d6000fd5b505050505b806200143c81620030ca565b91505062001357565b50604051630adccee560e31b81526001600160a01b038516906356e677289062001476908e908e906004016200317b565b600060405180830381600087803b1580156200149157600080fd5b505af1158015620014a6573d6000803e3d6000fd5b50959a505050505050505050505095945050505050565b620014c762002232565b606e91909155606f55565b620014dc62002232565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6200154862002232565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016200084c565b60006200159062002232565b60008290506000816001600160a01b031663ef01df4f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620015d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015fc919062002e90565b6001600160a01b038181166000908152606960205260409081902054905163033e92d960e31b815290821660048201529192508316906319f496c890602401600060405180830381600087803b1580156200165657600080fd5b505af11580156200166b573d6000803e3d6000fd5b505050506000826001600160a01b031663ef01df4f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d6919062002e90565b9050816001600160a01b0316816001600160a01b0316141593505050505b919050565b6001600160a01b038181166000908152606960205260408120549091166200172257816200173e565b6001600160a01b03808316600090815260696020526040902054165b92915050565b6200174e62002232565b6040518060400160405280846001600160a01b0316815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060ff87168152606860209081526040909120835181546001600160a01b0319166001600160a01b039091161781558382015180519193506200105c926001850192910190620027b7565b620017f462002232565b6001600160a01b03918216600090815260676020526040902080546001600160a01b03191691909216179055565b60ff81166000908152606860209081526040808320815180830190925280546001600160a01b03168252600181018054606094869493929084019162001868906200313e565b80601f016020809104026020016040519081016040528092919081815260200182805462001896906200313e565b8015620018e75780601f10620018bb57610100808354040283529160200191620018e7565b820191906000526020600020905b815481529060010190602001808311620018c957829003601f168201915b50505091909252505081519192506060916001600160a01b03161515905062001913576000816200191b565b815160208301515b935093505050915091565b6200193062002232565b826200197f5760405162461bcd60e51b815260206004820152601e60248201527f4e6f2074617267657420616464726573736573207370656369666965642e000060448201526064016200084c565b60005b8381101562000dad57620019dd83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915085905081811062000d705762000d706200306a565b5080620019ea81620030ca565b91505062001982565b6001600160a01b0381811660009081526067602052604081205490911662001a1c57816200173e565b506001600160a01b039081166000908152606760205260409020541690565b6001600160a01b0381166000908152606a602090815260409182902080548351818402810184019094528084526060939283018282801562000bef576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000bd05750505050509050919050565b60408051600481526024810182526020810180516001600160e01b0316635fe3b56760e01b179052905160009182918291339162001af09190620031aa565b600060405180830381855afa9150503d806000811462001b2d576040519150601f19603f3d011682016040523d82523d6000602084013e62001b32565b606091505b509150915081801562001b46575080516020145b1562001ba85760008180602001905181019062001b64919062002e90565b6001600160a01b03811660009081526066602052604081205491925081131562001b9057949350505050565b600081121562001ba557600094505050505090565b50505b6070549250505090565b606c54604051631beb2b9760e31b81526001600160a01b038681166004830152858116602483015284811660448301526001600160e01b031984166064830152600092169063df595cb890608401602060405180830381865afa15801562001c1e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c449190620031c8565b90505b949350505050565b62001c5962002232565b670de0b6b3a764000081111562001c845760405162461bcd60e51b81526004016200084c9062002e0e565b607055565b62001c9362002232565b6001600160a01b0383166000908152606a6020526040902062001cb890838362002846565b50505050565b62001cc862002232565b6001600160a01b0383166000908152606b6020526040902062001cb890838362002846565b62001cf762002232565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633148062001e2357600062001da87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b03811633148062001e205760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b60648201526084016200084c565b50505b50606c80546001600160a01b0319166001600160a01b0392909216919091179055565b62001e5062002232565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e91573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ebb91908101906200320f565b9050816001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001ef957600080fd5b505af115801562001f0e573d6000803e3d6000fd5b5050505060005b81518160ff16101562000eec57818160ff168151811062001f3a5762001f3a6200306a565b60200260200101516001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001f7d57600080fd5b505af115801562001f92573d6000803e3d6000fd5b50505050808062001fa390620032d6565b91505062001f15565b6065546001600160a01b03163314620020005760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016200084c565b6000620020156033546001600160a01b031690565b6065549091506001600160a01b03166200202f8162002438565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910162001532565b606a602052816000526040600020818154811062000c5057600080fd5b600054610100900460ff1615808015620021045750600054600160ff909116105b80620021205750303b15801562002120575060005460ff166001145b620021855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016200084c565b6000805460ff191660011790558015620021a9576000805461ff0019166101001790555b670de0b6b3a7640000821115620021d45760405162461bcd60e51b81526004016200084c9062002e0e565b620021df336200248a565b6070829055600019606f5580156200222e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200162001532565b5050565b6033546001600160a01b031633146200228e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200084c565b565b6060620022d6838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250620024c9565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905262000eec908490620025ac565b600083471015620023855760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064016200084c565b8151620023d55760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016200084c565b8282516020840186f590506001600160a01b038116620022d65760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016200084c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620024b45760405162461bcd60e51b81526004016200084c90620032f9565b620024be62002685565b62000fee8162002438565b6060824710156200252c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200084c565b600080866001600160a01b031685876040516200254a9190620031aa565b60006040518083038185875af1925050503d806000811462002589576040519150601f19603f3d011682016040523d82523d6000602084013e6200258e565b606091505b5091509150620025a187838387620026b9565b979650505050505050565b600062002603826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620027369092919063ffffffff16565b80519091501562000eec5780806020019051810190620026249190620031c8565b62000eec5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200084c565b600054610100900460ff16620026af5760405162461bcd60e51b81526004016200084c90620032f9565b6200228e62002747565b606083156200272a57825162002722576001600160a01b0385163b620027225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200084c565b508162001c47565b62001c4783836200277c565b606062001c478484600085620024c9565b600054610100900460ff16620027715760405162461bcd60e51b81526004016200084c90620032f9565b6200228e3362002438565b8151156200278d5781518083602001fd5b8060405162461bcd60e51b81526004016200084c919062003344565b61204b806200335a83390190565b828054620027c5906200313e565b90600052602060002090601f016020900481019282620027e9576000855562002834565b82601f106200280457805160ff191683800117855562002834565b8280016001018555821562002834579182015b828111156200283457825182559160200191906001019062002817565b50620028429291506200289c565b5090565b82805482825590600052602060002090810192821562002834579160200282015b82811115620028345781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019062002867565b5b808211156200284257600081556001016200289d565b6001600160a01b038116811462000fee57600080fd5b60008060408385031215620028dd57600080fd5b8235620028ea81620028b3565b946020939093013593505050565b6000602082840312156200290b57600080fd5b8135620022d681620028b3565b6020808252825182820181905260009190848201906040850190845b818110156200295b5783516001600160a01b03168352928401929184019160010162002934565b50909695505050505050565b600080604083850312156200297b57600080fd5b82356200298881620028b3565b915060208301356200299a81620028b3565b809150509250929050565b60008083601f840112620029b857600080fd5b50813567ffffffffffffffff811115620029d157600080fd5b6020830191508360208260051b8501011115620029ed57600080fd5b9250929050565b6000806000806040858703121562002a0b57600080fd5b843567ffffffffffffffff8082111562002a2457600080fd5b62002a3288838901620029a5565b9096509450602087013591508082111562002a4c57600080fd5b5062002a5b87828801620029a5565b95989497509550505050565b60008060006060848603121562002a7d57600080fd5b833562002a8a81620028b3565b9250602084013562002a9c81620028b3565b9150604084013562002aae81620028b3565b809150509250925092565b60ff8116811462000fee57600080fd5b60008083601f84011262002adc57600080fd5b50813567ffffffffffffffff81111562002af557600080fd5b602083019150836020828501011115620029ed57600080fd5b60008060008060006060868803121562002b2757600080fd5b853562002b348162002ab9565b9450602086013567ffffffffffffffff8082111562002b5257600080fd5b62002b6089838a0162002ac9565b9096509450604088013591508082111562002b7a57600080fd5b5062002b898882890162002ac9565b969995985093965092949392505050565b6000806040838503121562002bae57600080fd5b50508035926020909101359150565b6000806000806060858703121562002bd457600080fd5b843562002be18162002ab9565b9350602085013562002bf381620028b3565b9250604085013567ffffffffffffffff81111562002c1057600080fd5b62002a5b8782880162002ac9565b60006020828403121562002c3157600080fd5b8135620022d68162002ab9565b60005b8381101562002c5b57818101518382015260200162002c41565b8381111562001cb85750506000910152565b6000815180845262002c8781602086016020860162002c3e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009062001c479083018462002c6d565b6000806000806040858703121562002cd857600080fd5b843567ffffffffffffffff8082111562002cf157600080fd5b62002cff88838901620029a5565b9096509450602087013591508082111562002d1957600080fd5b5062002a5b8782880162002ac9565b6000806000806080858703121562002d3f57600080fd5b843562002d4c81620028b3565b9350602085013562002d5e81620028b3565b9250604085013562002d7081620028b3565b915060608501356001600160e01b03198116811462002d8e57600080fd5b939692955090935050565b60006020828403121562002dac57600080fd5b5035919050565b60008060006040848603121562002dc957600080fd5b833562002dd681620028b3565b9250602084013567ffffffffffffffff81111562002df357600080fd5b62002e0186828701620029a5565b9497909650939450505050565b6020808252602b908201527f496e7465726573742066656520726174652063616e6e6f74206265206d6f726560408201526a103a3430b710189818129760a91b606082015260800190565b6000806000806080858703121562002e7057600080fd5b505082516020840151604085015160609095015191969095509092509050565b60006020828403121562002ea357600080fd5b8151620022d681620028b3565b60006020828403121562002ec357600080fd5b5051919050565b60006020828403121562002edd57600080fd5b8151620022d68162002ab9565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562002f4157816000190482111562002f255762002f2562002eea565b8085161562002f3357918102915b93841c939080029062002f05565b509250929050565b60008262002f5a575060016200173e565b8162002f69575060006200173e565b816001811462002f82576002811462002f8d5762002fad565b60019150506200173e565b60ff84111562002fa15762002fa162002eea565b50506001821b6200173e565b5060208310610133831016604e8410600b841016171562002fd2575081810a6200173e565b62002fde838362002f00565b806000190482111562002ff55762002ff562002eea565b029392505050565b6000620022d6838362002f49565b600081600019048311821515161562003028576200302862002eea565b500290565b6000826200304b57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101562003065576200306562002eea565b500390565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126200309857600080fd5b83018035915067ffffffffffffffff821115620030b457600080fd5b602001915036819003821315620029ed57600080fd5b6000600019821415620030e157620030e162002eea565b5060010190565b60008085851115620030f957600080fd5b838611156200310757600080fd5b5050820193919092039150565b600084516200312881846020890162002c3e565b8201838582376000930192835250909392505050565b600181811c908216806200315357607f821691505b602082108114156200317557634e487b7160e01b600052602260045260246000fd5b50919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60008251620031be81846020870162002c3e565b9190910192915050565b600060208284031215620031db57600080fd5b81518015158114620022d657600080fd5b634e487b7160e01b600052604160045260246000fd5b8051620016f481620028b3565b600060208083850312156200322357600080fd5b825167ffffffffffffffff808211156200323c57600080fd5b818501915085601f8301126200325157600080fd5b815181811115620032665762003266620031ec565b8060051b604051601f19603f830116810181811085821117156200328e576200328e620031ec565b604052918252848201925083810185019188831115620032ad57600080fd5b938501935b8285101562000b7757620032c68562003202565b84529385019392850192620032b2565b600060ff821660ff811415620032f057620032f062002eea565b60010192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b602081526000620022d6602083018462002c6d56fe60806040523480156200001157600080fd5b506040516200204b3803806200204b8339810160408190526200003491620006b1565b336001600160a01b038716146200007b5760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064015b60405180910390fd5b6000886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e2919062000784565b600080546001600160a01b0319166001600160a01b038a8116919091179091556702c68af0bb14000060055560038054610100600160a81b0319166101008c84160217905543600955670de0b6b3a7640000600a55604080516310c8fc9560e11b8152905192935090881691632191f92a916004808201926020929091908290030181865afa1580156200017a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a09190620007b0565b620001d85760405162461bcd60e51b8152602060048201526007602482015266216e6f7449726d60c81b604482015260640162000072565b600480546001600160a01b0319166001600160a01b038816908117909155604080516000815260208101929092527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926910160405180910390a184516200024690600190602088019062000525565b5083516200025c90600290602087019062000525565b506003805460ff191660ff8316179055600754600654670de0b6b3a76400009190620002899086620007d4565b620002959190620007d4565b1115620002cf5760405162461bcd60e51b8152602060048201526007602482015266085c998e9cd95d60ca1b604482015260640162000072565b60088390556040805160008152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460910160405180910390a16000198214156200031f5760065491505b60008060009054906101000a90046001600160a01b03166001600160a01b031663dd86fea16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620007fb565b9050670de0b6b3a76400008184600854620003b69190620007d4565b620003c29190620007d4565b1115620004025760405162461bcd60e51b815260206004820152600d60248201526c0858591b5a5b9199594e9cd95d609a1b604482015260640162000072565b60068390556040805160008152602081018590527fcdd0b588250e1398549f79cfdb8217c186688822905d6715b0834ea1c865594a910160405180910390a160078190556040805160008152602081018390527fedec4b9c99c2cdb231e7fd036f861e0445b015916700f41b9835f984cb9be4cb910160405180910390a1506000805460ff60a01b1916600160a01b179055601380546001600160a01b038b166001600160a01b03199091168117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa158015620004ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005159190620007fb565b5050505050505050505062000852565b828054620005339062000815565b90600052602060002090601f016020900481019282620005575760008555620005a2565b82601f106200057257805160ff1916838001178555620005a2565b82800160010185558215620005a2579182015b82811115620005a257825182559160200191906001019062000585565b50620005b0929150620005b4565b5090565b5b80821115620005b05760008155600101620005b5565b6001600160a01b0381168114620005e157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200060c57600080fd5b81516001600160401b0380821115620006295762000629620005e4565b604051601f8301601f19908116603f01168101908282118183101715620006545762000654620005e4565b816040528381526020925086838588010111156200067157600080fd5b600091505b8382101562000695578582018301518183018401529082019062000676565b83821115620006a75760008385830101525b9695505050505050565b600080600080600080600080610100898b031215620006cf57600080fd5b8851620006dc81620005cb565b60208a0151909850620006ef81620005cb565b60408a01519097506200070281620005cb565b60608a01519096506200071581620005cb565b60808a01519095506001600160401b03808211156200073357600080fd5b620007418c838d01620005fa565b955060a08b01519150808211156200075857600080fd5b50620007678b828c01620005fa565b60c08b015160e0909b0151999c989b509699959894979350505050565b6000602082840312156200079757600080fd5b815160ff81168114620007a957600080fd5b9392505050565b600060208284031215620007c357600080fd5b81518015158114620007a957600080fd5b60008219821115620007f657634e487b7160e01b600052601160045260246000fd5b500190565b6000602082840312156200080e57600080fd5b5051919050565b600181811c908216806200082a57607f821691505b602082108114156200084c57634e487b7160e01b600052602260045260246000fd5b50919050565b6117e980620008626000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806389cd9855116100c3578063ba49f54a1161007c578063ba49f54a146102f6578063be99f119146102fe578063c3bf11cd1461030d578063c91a424f14610316578063e207afe214610329578063f3fdb15a1461033c57610158565b806389cd9855146102b55780638d02d9a1146102ca5780638f840ddd146102d357806395d89b41146102dc5780639826394b146102e4578063aa5af0fd146102ed57610158565b80635fe3b567116101155780635fe3b5671461025557806361feacff1461026d5780636333d001146102765780636752e7021461028b5780636c540baf146102995780636f307dc3146102a257610158565b806306fdde03146101cf578063173b9904146101ed57806318160ddd14610204578063313ce5671461020d57806347bd37181461022c5780635c60da1b14610235575b600061016f6000356001600160e01b03191661034f565b90506001600160a01b0381166101ab57604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156101ca573d6000f35b3d6000fd5b6101d761036f565b6040516101e491906112a9565b60405180910390f35b6101f660085481565b6040519081526020016101e4565b6101f6600f5481565b60035461021a9060ff1681565b60405160ff90911681526020016101e4565b6101f6600b5481565b61023d6103fd565b6040516001600160a01b0390911681526020016101e4565b60035461023d9061010090046001600160a01b031681565b6101f6600d5481565b61027e610453565b6040516101e491906112c3565b6101f6666379da05b6000081565b6101f660095481565b60135461023d906001600160a01b031681565b6102c86102c3366004611328565b61045d565b005b6101f660065481565b6101f6600c5481565b6101d76104b5565b6101f6600e5481565b6101f6600a5481565b6102c86104c2565b6101f667016345785d8a000081565b6101f660075481565b60005461023d906001600160a01b031681565b6102c8610337366004611361565b6106a7565b60045461023d906001600160a01b031681565b6000610369826000805160206117bd833981519152610729565b92915050565b6001805461037c906113e6565b80601f01602080910402602001604051908101604052809291908181526020018280546103a8906113e6565b80156103f55780601f106103ca576101008083540402835291602001916103f5565b820191906000526020600020905b8154815290600101906020018083116103d857829003601f168201915b505050505081565b60408051808201909152600e81526d64656c656761746554797065282960901b602090910152600061044e7f2c436e5bba88e403c36d7a2822cd2b39b360d5c6296839bbf72c5a05167fd3ff61034f565b905090565b606061044e6107cf565b6000546001600160a01b031633146104a75760405162461bcd60e51b815260206004820152600d60248201526c085d5b985d5d1a1bdc9a5e9959609a1b60448201526064016101a2565b6104b18282610841565b5050565b6002805461037c906113e6565b333014806104d357506104d3610862565b6105105760405162461bcd60e51b815260206004820152600e60248201526d10b9b2b6331037b91030b236b4b760911b60448201526064016101a2565b60408051600481526024810182526020810180516001600160e01b0316632c436e5b60e01b17905290516000918291309161054a91611421565b600060405180830381855afa9150503d8060008114610585576040519150601f19603f3d011682016040523d82523d6000602084013e61058a565b606091505b5091509150816105cf5760405162461bcd60e51b815260206004820152601060248201526f6e6f2064656c6567617465207479706560801b60448201526064016101a2565b6000818060200190518101906105e5919061143d565b60008054604051632aa1058760e21b815260ff84166004820152929350909182916001600160a01b03169063aa84161c90602401600060405180830381865afa158015610636573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261065e91908101906114a7565b91509150600061066c6103fd565b9050826001600160a01b0316816001600160a01b0316146106965761069183836109df565b61069f565b61069f81610ab7565b505050505050565b6106af610862565b6106e45760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016101a2565b6107248383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109df92505050565b505050565b8054600090815b818110156107c457846001600160e01b03191684600001828154811061075857610758611551565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156107b25783600001818154811061079357610793611551565b6000918252602090912001546001600160a01b03169250610369915050565b806107bc8161157d565b915050610730565b506000949350505050565b60606000805160206117bd83398151915260010180548060200260200160405190810160405280929190818152602001828054801561083757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610819575b5050505050905090565b6001600160a01b038116156108595761085981610bbf565b6104b182610cef565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190611598565b6001600160a01b0316336001600160a01b031614801561095c5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095c91906115b5565b806109d957506000546001600160a01b0316331480156109d95750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d991906115b5565b91505090565b60006109e96103fd565b90506109f483610ab7565b610a6e306356e6772860e01b84604051602401610a1191906112a9565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280600c81526020016b08589958dbdb59481a5b5c1b60a21b815250610de7565b50604080516001600160a01b038084168252851660208201527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a1505050565b600080546040516311a0e21760e01b81526001600160a01b038481166004830152909116906311a0e21790602401600060405180830381865afa158015610b02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2a91908101906115fb565b90506000610b366107cf565b905060005b8151811015610b7857610b66828281518110610b5957610b59611551565b6020026020010151610bbf565b80610b708161157d565b915050610b3b565b5060005b8251811015610bb957610ba7838281518110610b9a57610b9a611551565b6020026020010151610cef565b80610bb18161157d565b915050610b7c565b50505050565b6000805160206117bd833981519152610bd782610e83565b60005b600182015460ff8216101561072457826001600160a01b0316826001018260ff1681548110610c0b57610c0b611551565b6000918252602090912001546001600160a01b03161415610cdd57600180830180549091610c389161169a565b81548110610c4857610c48611551565b6000918252602090912001546001830180546001600160a01b039092169160ff8416908110610c7957610c79611551565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600101805480610cba57610cba6116b1565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610ce7816116c7565b915050610bda565b6000805160206117bd83398151915260005b600182015460ff82161015610da757826001600160a01b0316826001018260ff1681548110610d3257610d32611551565b6000918252602090912001546001600160a01b03161415610d955760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c726561647920616464656400000000000000000060448201526064016101a2565b80610d9f816116c7565b915050610d01565b50610db182611042565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b031685604051610e049190611421565b6000604051808303816000865af19150503d8060008114610e41576040519150601f19603f3d011682016040523d82523d6000602084013e610e46565b606091505b509150915081610e7a57805115610e605780518082602001fd5b8360405162461bcd60e51b81526004016101a291906112a9565b95945050505050565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610eeb91908101906116e7565b90506000805160206117bd83398151915260005b82518161ffff161015610bb9576000838261ffff1681518110610f2457610f24611551565b60200260200101519050610f388184610729565b6001600160a01b0316856001600160a01b031614610f5857610f58611784565b6000610f6482856111c9565b84549091508490610f779060019061169a565b81548110610f8757610f87611551565b90600052602060002001846000018261ffff1681548110610faa57610faa611551565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff16909102179055835484908061100b5761100b6116b1565b600082815260209020810160001990810180546001600160c01b03191690550190555081905061103a8161179a565b915050610eff565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611082573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110aa91908101906116e7565b6000805160206117bd83398151915280549192509060005b83518110156111c25760008482815181106110df576110df611551565b6020026020010151905060006110f58286610729565b90506001600160a01b0381161561113a57604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b03821660248201526044016101a2565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b03199092169390921692909217919091179055836111aa8161179a565b945050505080806111ba9061157d565b9150506110c2565b5050505050565b8054600090815b8161ffff168161ffff16101561124557846001600160e01b031916846000018261ffff168154811061120457611204611551565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156112335791506103699050565b8061123d8161179a565b9150506111d0565b5061ffff949350505050565b60005b8381101561126c578181015183820152602001611254565b83811115610bb95750506000910152565b60008151808452611295816020860160208601611251565b601f01601f19169290920160200192915050565b6020815260006112bc602083018461127d565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156113045783516001600160a01b0316835292840192918401916001016112df565b50909695505050505050565b6001600160a01b038116811461132557600080fd5b50565b6000806040838503121561133b57600080fd5b823561134681611310565b9150602083013561135681611310565b809150509250929050565b60008060006040848603121561137657600080fd5b833561138181611310565b9250602084013567ffffffffffffffff8082111561139e57600080fd5b818601915086601f8301126113b257600080fd5b8135818111156113c157600080fd5b8760208285010111156113d357600080fd5b6020830194508093505050509250925092565b600181811c908216806113fa57607f821691505b6020821081141561141b57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251611433818460208701611251565b9190910192915050565b60006020828403121561144f57600080fd5b815160ff811681146112bc57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561149f5761149f611460565b604052919050565b600080604083850312156114ba57600080fd5b82516114c581611310565b602084015190925067ffffffffffffffff808211156114e357600080fd5b818501915085601f8301126114f757600080fd5b81518181111561150957611509611460565b61151c601f8201601f1916602001611476565b915080825286602082850101111561153357600080fd5b611544816020840160208601611251565b5080925050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561159157611591611567565b5060010190565b6000602082840312156115aa57600080fd5b81516112bc81611310565b6000602082840312156115c757600080fd5b815180151581146112bc57600080fd5b600067ffffffffffffffff8211156115f1576115f1611460565b5060051b60200190565b6000602080838503121561160e57600080fd5b825167ffffffffffffffff81111561162557600080fd5b8301601f8101851361163657600080fd5b8051611649611644826115d7565b611476565b81815260059190911b8201830190838101908783111561166857600080fd5b928401925b8284101561168f57835161168081611310565b8252928401929084019061166d565b979650505050505050565b6000828210156116ac576116ac611567565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156116de576116de611567565b60010192915050565b600060208083850312156116fa57600080fd5b825167ffffffffffffffff81111561171157600080fd5b8301601f8101851361172257600080fd5b8051611730611644826115d7565b81815260059190911b8201830190838101908783111561174f57600080fd5b928401925b8284101561168f5783516001600160e01b0319811681146117755760008081fd5b82529284019290840190611754565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156117b2576117b2611567565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "2984:11718:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13017:215;;;;;;;;;;-1:-1:-1;13017:215:0;;;;;:::i;:::-;;:::i;:::-;;5565:683;;;;;;;;;;-1:-1:-1;5565:683:0;;;;;:::i;:::-;;:::i;:::-;;;884:25:486;;;872:2;857:18;5565:683:0;;;;;;;;13827:169;;;;;;;;;;-1:-1:-1;13827:169:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11384:190::-;;;;;;;;;;-1:-1:-1;11384:190:0;;;;;:::i;:::-;;:::i;1963:70::-;;;;;;;;;;-1:-1:-1;1963:70:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2764:32:486;;;2746:51;;2734:2;2719:18;1963:70:0;2574:229:486;6500:294:0;;;;;;;;;;-1:-1:-1;6500:294:0;;;;;:::i;:::-;;:::i;4404:603::-;;;;;;;;;;-1:-1:-1;4404:603:0;;;;;:::i;:::-;;:::i;13574:249::-;;;;;;;;;;-1:-1:-1;13574:249:0;;;;;:::i;:::-;;:::i;7355:1495::-;;;;;;;;;;-1:-1:-1;7355:1495:0;;;;;:::i;:::-;;:::i;5381:180::-;;;;;;;;;;-1:-1:-1;5381:180:0;;;;;:::i;:::-;;:::i;1602:386:134:-;;;;;;;;;;-1:-1:-1;1602:386:134;;;;;:::i;:::-;;:::i;2703:132::-;;;;;;;;;;;;;:::i;11768:411:0:-;;;;;;;;;;-1:-1:-1;11768:411:0;;;;;:::i;:::-;;:::i;:::-;;;6513:14:486;;6506:22;6488:41;;6476:2;6461:18;11768:411:0;6348:187:486;10886:264:0;;;;;;;;;;-1:-1:-1;10886:264:0;;;;;:::i;:::-;;:::i;2713:37::-;;;;;;;;;;;;;;;;10526:271;;;;;;;;;;-1:-1:-1;10526:271:0;;;;;:::i;:::-;;:::i;2038:46::-;;;;;;;;;;-1:-1:-1;2038:46:0;;;;-1:-1:-1;;;;;2038:46:0;;;1441:85:436;;;;;;;;;;-1:-1:-1;1513:6:436;;-1:-1:-1;;;;;1513:6:436;1441:85;;9478:210:0;;;;;;;;;;-1:-1:-1;9478:210:0;;;;;:::i;:::-;;:::i;2156:29::-;;;;;;;;;;;;;;;;9785:356;;;;;;;;;;-1:-1:-1;9785:356:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;6969:239::-;;;;;;;;;;-1:-1:-1;6969:239:0;;;;;:::i;:::-;;:::i;8944:279::-;;;;;;;;;;-1:-1:-1;8944:279:0;;;;;:::i;:::-;;:::i;1345:56::-;;;;;;;;;;-1:-1:-1;1345:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;13236:157;;;;;;;;;;-1:-1:-1;13236:157:0;;;;;:::i;:::-;;:::i;12296:462::-;;;;;;;;;;;;;:::i;14492:208::-;;;;;;;;;;-1:-1:-1;14492:208:0;;;;;:::i;:::-;;:::i;2570:33::-;;;;;;;;;;;;;;;;530:27:134;;;;;;;;;;-1:-1:-1;530:27:134;;;;-1:-1:-1;;;;;530:27:134;;;3998:240:0;;;;;;;;;;-1:-1:-1;3998:240:0;;;;;:::i;:::-;;:::i;13397:173::-;;;;;;;;;;-1:-1:-1;13397:173:0;;;;;:::i;:::-;;:::i;14000:195::-;;;;;;;;;;-1:-1:-1;14000:195:0;;;;;:::i;:::-;;:::i;2839:155:134:-;;;;;;;;;;-1:-1:-1;2839:155:134;;;;;:::i;:::-;;:::i;3665:107:0:-;;;;;;;;;;-1:-1:-1;3665:107:0;;;;;:::i;:::-;;:::i;14199:289::-;;;;;;;;;;-1:-1:-1;14199:289:0;;;;;:::i;:::-;;:::i;2158:541:134:-;;;;;;;;;;;;;:::i;1891:67:0:-;;;;;;;;;;-1:-1:-1;1891:67:0;;;;;:::i;:::-;;:::i;2322:27::-;;;;;;;;;;;;;;;;3357:304;;;;;;;;;;-1:-1:-1;3357:304:0;;;;;:::i;:::-;;:::i;13017:215::-;1334:13:436;:11;:13::i;:::-;13127:4:0::1;13119;:12;;13111:68;;;;-1:-1:-1::0;;;13111:68:0::1;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;;;;;13185:35:0;;::::1;;::::0;;;:22:::1;:35;::::0;;;;:42;13017:215::o;5565:683::-;5628:7;;-1:-1:-1;;;;;5675:26:0;;;929:10:449;5675:40:0;;-1:-1:-1;;;;;;5675:40:0;;;;;;;-1:-1:-1;;;;;2764:32:486;;;5675:40:0;;;2746:51:486;2719:18;;5675:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5643:72:0;-1:-1:-1;;;5725:18:0;5721:43;;-1:-1:-1;;5752:12:0;;;5565:683;-1:-1:-1;5565:683:0:o;5721:43::-;5770:28;5826:7;-1:-1:-1;;;;;5826:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5770:79;;5855:22;5880:11;-1:-1:-1;;;;;5880:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5855:45;;5906:26;5935:6;-1:-1:-1;;;;;5935:12:0;;5964:7;-1:-1:-1;;;;;5948:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5935:52;;-1:-1:-1;;;;;;5935:52:0;;;;;;;-1:-1:-1;;;;;2764:32:486;;;5935:52:0;;;2746:51:486;2719:18;;5935:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5906:81;;5993:26;6022:7;-1:-1:-1;;;;;6022:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5993:47;;;-1:-1:-1;6046:24:0;6112:22;5993:47;6112:2;:22;:::i;:::-;6074:34;6095:13;6074:18;:34;:::i;:::-;6073:61;;;;:::i;:::-;6046:88;;6163:12;;6144:16;:31;6140:60;;;-1:-1:-1;6192:1:0;;5565:683;-1:-1:-1;;;;;;;5565:683:0:o;6140:60::-;6227:16;6212:12;;:31;;;;:::i;:::-;6205:38;5565:683;-1:-1:-1;;;;;;;;5565:683:0:o;13827:169::-;-1:-1:-1;;;;;13951:40:0;;;;;;:24;:40;;;;;;;;;13944:47;;;;;;;;;;;;;;;;;13911:25;;13944:47;;;13951:40;13944:47;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13944:47:0;;;;;;;;;;;;;;;;;;;;;;;13827:169;;;:::o;11384:190::-;1334:13:436;:11;:13::i;:::-;-1:-1:-1;;;;;11503:46:0;;::::1;;::::0;;;:27:::1;:46;::::0;;;;:66;;-1:-1:-1;;;;;;11503:66:0::1;::::0;;;::::1;;::::0;;11384:190::o;1963:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1963:70:0;;-1:-1:-1;1963:70:0;;-1:-1:-1;1963:70:0:o;6500:294::-;1334:13:436;:11;:13::i;:::-;6603:18:0;;;;;:51:::1;;-1:-1:-1::0;6625:29:0;;::::1;6603:51;6595:111;;;::::0;-1:-1:-1;;;6595:111:0;;15827:2:486;6595:111:0::1;::::0;::::1;15809:21:486::0;15866:2;15846:18;;;15839:30;15905:34;15885:18;;;15878:62;-1:-1:-1;;;15956:18:486;;;15949:45;16011:19;;6595:111:0::1;15625:411:486::0;6595:111:0::1;6717:9;6712:77;6732:18:::0;;::::1;6712:77;;;6757:32;6781:4;;6786:1;6781:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6757:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;6757:7:0;;-1:-1:-1;6757:7:0;;-1:-1:-1;6765:1:0;;-1:-1:-1;6757:10:0;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6757:23:0::1;::::0;::::1;:32::i;:::-;-1:-1:-1::0;6752:3:0;::::1;::::0;::::1;:::i;:::-;;;;6712:77;;;;6500:294:::0;;;;:::o;4404:603::-;-1:-1:-1;;;;;4471:27:0;;4467:536;;4526:21;4563:11;4555:57;;;;-1:-1:-1;;;4555:57:0;;17041:2:486;4555:57:0;;;17023:21:486;17080:2;17060:18;;;17053:30;17119:34;17099:18;;;17092:62;-1:-1:-1;;;17170:18:486;;;17163:31;17211:19;;4555:57:0;16839:397:486;4555:57:0;4621:12;4639:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;4639:7:0;-1:-1:-1;;;;;4639:12:0;4660:7;4639:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4620:53;;;4689:7;4681:65;;;;-1:-1:-1;;;4681:65:0;;17653:2:486;4681:65:0;;;17635:21:486;17692:2;17672:18;;;17665:30;17731:34;17711:18;;;17704:62;-1:-1:-1;;;17782:18:486;;;17775:43;17835:19;;4681:65:0;17451:409:486;4681:65:0;4500:253;;4404:603;:::o;4467:536::-;4851:30;;-1:-1:-1;;;4851:30:0;;4875:4;4851:30;;;2746:51:486;4811:13:0;;4767:23;;-1:-1:-1;;;;;4851:15:0;;;;;2719:18:486;;4851:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4833:48;;4907:1;4897:7;:11;4889:63;;;;-1:-1:-1;;;4889:63:0;;18067:2:486;4889:63:0;;;18049:21:486;18106:2;18086:18;;;18079:30;18145:34;18125:18;;;18118:62;-1:-1:-1;;;18196:18:486;;;18189:37;18243:19;;4889:63:0;17865:403:486;4889:63:0;4960:36;4979:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;4979:7:0;-1:-1:-1;;;;;4960:18:0;;;4988:7;4960:18;:36::i;4467:536::-;4404:603;:::o;13574:249::-;1334:13:436;:11;:13::i;:::-;13746:72:0::1;::::0;-1:-1:-1;;;13746:72:0;;-1:-1:-1;;;;;18555:15:486;;;13746:72:0::1;::::0;::::1;18537:34:486::0;18607:15;;;18587:18;;;18580:43;13746:36:0;::::1;::::0;::::1;::::0;18472:18:486;;13746:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13574:249:::0;;;:::o;7355:1495::-;7494:7;;;7607:21;7625:2;7494:7;7607:15;;:21;:::i;:::-;7596:53;;;;;;;:::i;:::-;7552:97;;-1:-1:-1;7552:97:0;-1:-1:-1;;;;;;7663:25:0;;7678:10;7663:25;7655:64;;;;-1:-1:-1;;;7655:64:0;;19581:2:486;7655:64:0;;;19563:21:486;19620:2;19600:18;;;19593:30;19659:28;19639:18;;;19632:56;19705:18;;7655:64:0;19379:350:486;7655:64:0;7813:12;7855:10;7867;7881:14;;7879:16;;;;;:::i;:::-;;;;;-1:-1:-1;7838:58:0;;-1:-1:-1;;19989:2:486;19985:15;;;19981:24;;7838:58:0;;;19969:37:486;20040:15;;;;20036:24;;;20022:12;;;20015:46;20077:12;;;20070:28;20114:12;;7838:58:0;;;;;;;;;;;;7828:69;;;;;;7813:84;;7904:40;7964:34;;;;;;;;:::i;:::-;-1:-1:-1;;7964:34:0;;;;;;;;;;;;;;;;7947:69;;7964:34;8000:15;;;;7964:34;7947:69;;:::i;:::-;;;;;;;;;;;;;7904:112;;8022:13;8038:63;8064:1;8067:4;8073:27;8038:25;:63::i;:::-;8143:35;;;8108:32;8143:35;;;:21;:35;;;;;;;;8108:70;;;;;;;;;;-1:-1:-1;;;;;8108:70:0;;;;;;;;8022:79;;-1:-1:-1;8108:32:0;;:70;;8143:35;;8108:70;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8108:70:0;;;;-1:-1:-1;;8240:19:0;;8302:88;;-1:-1:-1;;;8302:88:0;;-1:-1:-1;;;;;18555:15:486;;;8302:88:0;;;18537:34:486;8184:36:0;18587:18:486;;;18580:43;8240:19:0;;-1:-1:-1;8240:19:0;;8302:37;;;-1:-1:-1;8302:37:0;;18472:18:486;;8302:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;8484:54:0;;8445:36;8484:54;;;:24;:54;;;;;;;;8445:93;;;;;;;;;;;;;;;;;;;8484:54;;8445:93;;;8484:54;8445:93;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8445:93:0;;;;;;;;;;;;;;;;;;;;;;;8549:9;8544:203;8568:10;:17;8564:1;:21;8544:203;;;8621:19;-1:-1:-1;;;;;8604:36:0;:10;8615:1;8604:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8604:36:0;;8600:50;;;8642:8;;8600:50;8670:5;-1:-1:-1;;;;;8658:37:0;;8696:10;8707:1;8696:13;;;;;;;;:::i;:::-;;;;;;;;;;;8658:82;;-1:-1:-1;;;;;;8658:82:0;;;;;;;-1:-1:-1;;;;;18555:15:486;;;8658:82:0;;;18537:34:486;8736:1:0;18587:18:486;;;18580:43;18472:18;;8658:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8544:203;8587:3;;;;:::i;:::-;;;;8544:203;;;-1:-1:-1;8752:74:0;;-1:-1:-1;;;8752:74:0;;-1:-1:-1;;;;;8752:58:0;;;;;:74;;8811:14;;;;8752:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8840:5:0;;-1:-1:-1;;;;;;;;;;;7355:1495:0;;;;;;;:::o;5381:180::-;1334:13:436;:11;:13::i;:::-;5482:12:0::1;:28:::0;;;;5516:18:::1;:40:::0;5381:180::o;1602:386:134:-;1334:13:436;:11;:13::i;:::-;1758:12:134::1;::::0;;-1:-1:-1;;;;;1830:30:134;;::::1;-1:-1:-1::0;;;;;;1830:30:134;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;18537:34:486::0;;;18602:2;18587:18;;18580:43;;;;1934:49:134::1;::::0;18472:18:486;1934:49:134::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:436;:11;:13::i;:::-;2804:26:134::1;::::0;-1:-1:-1;;;2804:26:134;;21888:2:486;2804:26:134::1;::::0;::::1;21870:21:486::0;21927:2;21907:18;;;21900:30;-1:-1:-1;;;21946:18:486;;;21939:46;22002:18;;2804:26:134::1;21686:340:486::0;11768:411:0;11862:4;1334:13:436;:11;:13::i;:::-;11874:27:0::1;11925:10;11874:62;;11943:24;11978:6;-1:-1:-1::0;;;;;11978:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12021:45:0;;::::1;;::::0;;;:27:::1;:45;::::0;;;;;;;12000:67;;-1:-1:-1;;;12000:67:0;;12021:45;;::::1;12000:67;::::0;::::1;2746:51:486::0;12021:45:0;;-1:-1:-1;12000:20:0;::::1;::::0;::::1;::::0;2719:18:486;;12000:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12073:24;12108:6;-1:-1:-1::0;;;;;12108:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12073:51;;12158:16;-1:-1:-1::0;;;;;12138:36:0::1;:16;-1:-1:-1::0;;;;;12138:36:0::1;;;12131:43;;;;;1357:1:436;11768:411:0::0;;;:::o;10886:264::-;-1:-1:-1;;;;;11000:46:0;;;10972:7;11000:46;;;:27;:46;;;;;;10972:7;;11000:46;:145;;11128:17;11000:145;;;-1:-1:-1;;;;;11071:46:0;;;;;;;:27;:46;;;;;;;11000:145;10987:158;10886:264;-1:-1:-1;;10886:264:0:o;10526:271::-;1334:13:436;:11;:13::i;:::-;10727:65:0::1;;;;;;;;10748:17;-1:-1:-1::0;;;;;10727:65:0::1;;;;;10767:24;;10727:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;10727:65:0;;;;-1:-1:-1;;10689:35:0::1;::::0;::::1;::::0;;:21:::1;:35;::::0;;;;;;;:103;;;;-1:-1:-1;;;;;;10689:103:0::1;-1:-1:-1::0;;;;;10689:103:0;;::::1;;::::0;;;;::::1;::::0;;;:35;;-1:-1:-1;10689:103:0::1;::::0;-1:-1:-1;10689:103:0;::::1;::::0;;::::1;::::0;::::1;:::i;9478:210::-:0;1334:13:436;:11;:13::i;:::-;-1:-1:-1;;;;;9612:51:0;;::::1;;::::0;;;:32:::1;:51;::::0;;;;:71;;-1:-1:-1;;;;;;9612:71:0::1;::::0;;;::::1;;::::0;;9478:210::o;9785:356::-;9922:35;;;9858:7;9922:35;;;:21;:35;;;;;;;;9887:70;;;;;;;;;;-1:-1:-1;;;;;9887:70:0;;;;;;;;9867:12;;9858:7;;9887:70;9922:35;9887:70;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9887:70:0;;;;-1:-1:-1;;10005:19:0;;9887:70;;-1:-1:-1;9963:23:0;;-1:-1:-1;;;;;10005:33:0;;;;-1:-1:-1;10005:131:0;;10121:1;10125:10;10005:131;;;10050:19;;10071:29;;;;10005:131;9992:144;;;;;;9785:356;;;:::o;6969:239::-;1334:13:436;:11;:13::i;:::-;7070:18:0;7062:61:::1;;;::::0;-1:-1:-1;;;7062:61:0;;22507:2:486;7062:61:0::1;::::0;::::1;22489:21:486::0;22546:2;22526:18;;;22519:30;22585:32;22565:18;;;22558:60;22635:18;;7062:61:0::1;22305:354:486::0;7062:61:0::1;7134:9;7129:74;7149:18:::0;;::::1;7129:74;;;7174:29;7198:4;;7174:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;7174:7:0;;-1:-1:-1;7174:7:0;;-1:-1:-1;7182:1:0;;-1:-1:-1;7174:10:0;;::::1;;;;;:::i;:29::-;-1:-1:-1::0;7169:3:0;::::1;::::0;::::1;:::i;:::-;;;;7129:74;;8944:279:::0;-1:-1:-1;;;;;9063:51:0;;;9035:7;9063:51;;;:32;:51;;;;;;9035:7;;9063:51;:155;;9201:17;9063:155;;;-1:-1:-1;;;;;;9139:51:0;;;;;;;:32;:51;;;;;;;;8944:279::o;13236:157::-;-1:-1:-1;;;;;13354:34:0;;;;;;:21;:34;;;;;;;;;13347:41;;;;;;;;;;;;;;;;;13314:25;;13347:41;;;13354:34;13347:41;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13347:41:0;;;;;;;;;;;;;;;;;;;;;;13236:157;;;:::o;12296:462::-;12419:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12419:40:0;-1:-1:-1;;;12419:40:0;;;12397:63;;12346:7;;;;;;12397:10;;:63;;12419:40;12397:63;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12361:99;;;;12471:7;:28;;;;;12482:4;:11;12497:2;12482:17;12471:28;12467:251;;;12509:19;12542:4;12531:27;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12586:35:0;;12566:17;12586:35;;;:22;:35;;;;;;12509:49;;-1:-1:-1;12633:14:0;;12629:46;;;12664:10;12296:462;-1:-1:-1;;;;12296:462:0:o;12629:46::-;12700:1;12687:10;:14;12683:28;;;12710:1;12703:8;;;;;;12296:462;:::o;12683:28::-;12501:217;;12467:251;12731:22;;12724:29;;;;12296:462;:::o;14492:208::-;14635:19;;:60;;-1:-1:-1;;;14635:60:0;;-1:-1:-1;;;;;23492:15:486;;;14635:60:0;;;23474:34:486;23544:15;;;23524:18;;;23517:43;23596:15;;;23576:18;;;23569:43;-1:-1:-1;;;;;;23648:33:486;;23628:18;;;23621:61;14616:4:0;;14635:19;;:27;;23408:19:486;;14635:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14628:67;;14492:208;;;;;;;:::o;3998:240::-;1334:13:436;:11;:13::i;:::-;4127:4:0::1;4100:23;:31;;4092:87;;;;-1:-1:-1::0;;;4092:87:0::1;;;;;;;:::i;:::-;4185:22;:48:::0;3998:240::o;13397:173::-;1334:13:436;:11;:13::i;:::-;-1:-1:-1;;;;;13518:34:0;::::1;;::::0;;;:21:::1;:34;::::0;;;;:47:::1;::::0;13555:10;;13518:47:::1;:::i;:::-;;13397:173:::0;;;:::o;14000:195::-;1334:13:436;:11;:13::i;:::-;-1:-1:-1;;;;;14137:40:0;::::1;;::::0;;;:24:::1;:40;::::0;;;;:53:::1;::::0;14180:10;;14137:53:::1;:::i;2839:155:134:-:0;1334:13:436;:11;:13::i;:::-;2937:12:134::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:134;;::::1;18537:34:486::0;;18607:15;;;18602:2;18587:18;;18580:43;2921:39:134::1;::::0;18472:18:486;2921:39:134::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:134::1;-1:-1:-1::0;;;;;2966:23:134;;;::::1;::::0;;;::::1;::::0;;2839:155::o;3665:107:0:-;1513:6:436;;-1:-1:-1;;;;;1513:6:436;929:10:449;791:23:134;;820:183;;842:13;858:16;3090:66;3262:15;-1:-1:-1;;;;;3262:15:134;;2998:284;858:16;842:32;-1:-1:-1;;;;;;897:21:134;;929:10:449;897:21:134;;926:70;;;;-1:-1:-1;;;926:70:134;;24177:2:486;926:70:134;;;24159:21:486;24216:2;24196:18;;;24189:30;24255:34;24235:18;;;24228:62;-1:-1:-1;;;24306:18:486;;;24299:48;24364:19;;926:70:134;23975:414:486;926:70:134;834:169;;820:183;-1:-1:-1;3742:19:0::1;:25:::0;;-1:-1:-1;;;;;;3742:25:0::1;-1:-1:-1::0;;;;;3742:25:0;;;::::1;::::0;;;::::1;::::0;;3665:107::o;14199:289::-;1334:13:436;:11;:13::i;:::-;14272:24:0::1;14299:4;-1:-1:-1::0;;;;;14299:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;14299:20:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;14272:47;;14355:4;-1:-1:-1::0;;;;;14355:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14382:7;14377:107;14399:7;:14;14395:1;:18;;;14377:107;;;14456:7;14464:1;14456:10;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;14456:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14415:3;;;;;:::i;:::-;;;;14377:107;;2158:541:134::0;2285:12;;-1:-1:-1;;;;;2285:12:134;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:134;;26220:2:486;2263:60:134;;;26202:21:486;26259:2;26239:18;;;26232:30;-1:-1:-1;;;26278:18:486;;;26271:51;26339:18;;2263:60:134;26018:345:486;2263:60:134;2378:16;2397:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;2397:7:134;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:134;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:134;;;2605:32;;;-1:-1:-1;;;;;18555:15:486;;18537:34;;-1:-1:-1;18602:2:486;18587:18;;18580:43;2605:32:134;;18472:18:486;2605:32:134;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;18555:15:486;;;18537:34;;2681:12:134;;;18602:2:486;18587:18;;18580:43;2648:46:134;;18472:18:486;2648:46:134;18273:356:486;1891:67:0;;;;;;;;;;;;;;;;;;;;3357:304;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;26570:2:486;3314:201:439;;;26552:21:486;26609:2;26589:18;;;26582:30;26648:34;26628:18;;;26621:62;-1:-1:-1;;;26699:18:486;;;26692:44;26753:19;;3314:201:439;26368:410:486;3314:201:439;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;3470:4:0::1;3443:23;:31;;3435:87;;;;-1:-1:-1::0;;;3435:87:0::1;;;;;;;:::i;:::-;3528:30;3547:10;3528:18;:30::i;:::-;3564:22;:48:::0;;;-1:-1:-1;;3618:18:0::1;:38:::0;3636:99:439;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;26935:36:486;;3710:14:439;;26923:2:486;26908:18;3710:14:439;26783:194:486;3636:99:439;3258:483;3357:304:0;:::o;1599:130:436:-;1513:6;;-1:-1:-1;;;;;1513:6:436;929:10:449;1662:23:436;1654:68;;;;-1:-1:-1;;;1654:68:436;;27184:2:486;1654:68:436;;;27166:21:486;;;27203:18;;;27196:30;27262:34;27242:18;;;27235:62;27314:18;;1654:68:436;26982:356:486;1654:68:436;1599:130::o;3476:185:448:-;3551:12;3582:72;3604:6;3612:4;3618:1;3582:72;;;;;;;;;;;;;;;;;:21;:72::i;:::-;3575:79;3476:185;-1:-1:-1;;;3476:185:448:o;818:216:447:-;968:58;;;-1:-1:-1;;;;;27535:32:486;;968:58:447;;;27517:51:486;27584:18;;;;27577:34;;;968:58:447;;;;;;;;;;27490:18:486;;;;968:58:447;;;;;;;;-1:-1:-1;;;;;968:58:447;-1:-1:-1;;;968:58:447;;;941:86;;961:5;;941:19;:86::i;1092:514:450:-;1209:12;1266:6;1241:21;:31;;1233:73;;;;-1:-1:-1;;;1233:73:450;;27824:2:486;1233:73:450;;;27806:21:486;27863:2;27843:18;;;27836:30;27902:31;27882:18;;;27875:59;27951:18;;1233:73:450;27622:353:486;1233:73:450;1324:15;;1316:65;;;;-1:-1:-1;;;1316:65:450;;28182:2:486;1316:65:450;;;28164:21:486;;;28201:18;;;28194:30;28260:34;28240:18;;;28233:62;28312:18;;1316:65:450;27980:356:486;1316:65:450;1519:4;1508:8;1502:15;1495:4;1485:8;1481:19;1473:6;1465:59;1457:67;-1:-1:-1;;;;;;1551:18:450;;1543:56;;;;-1:-1:-1;;;1543:56:450;;28543:2:486;1543:56:450;;;28525:21:486;28582:2;28562:18;;;28555:30;28621:27;28601:18;;;28594:55;28666:18;;1543:56:450;28341:349:486;2673:187:436;2765:6;;;-1:-1:-1;;;;;2781:17:436;;;-1:-1:-1;;;;;;2781:17:436;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;562:129:134:-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;638:16:134::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;4970:446:448:-:0;5135:12;5192:5;5167:21;:30;;5159:81;;;;-1:-1:-1;;;5159:81:448;;29309:2:486;5159:81:448;;;29291:21:486;29348:2;29328:18;;;29321:30;29387:34;29367:18;;;29360:62;-1:-1:-1;;;29438:18:486;;;29431:36;29484:19;;5159:81:448;29107:402:486;5159:81:448;5251:12;5265:23;5292:6;-1:-1:-1;;;;;5292:11:448;5311:5;5318:4;5292:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5250:73;;;;5340:69;5367:6;5375:7;5384:10;5396:12;5340:26;:69::i;:::-;5333:76;4970:446;-1:-1:-1;;;;;;;4970:446:448:o;3868:717:447:-;4298:23;4324:69;4352:4;4324:69;;;;;;;;;;;;;;;;;4332:5;-1:-1:-1;;;;;4324:27:447;;;:69;;;;;:::i;:::-;4407:17;;4298:95;;-1:-1:-1;4407:21:447;4403:176;;4502:10;4491:30;;;;;;;;;;;;:::i;:::-;4483:85;;;;-1:-1:-1;;;4483:85:447;;29716:2:486;4483:85:447;;;29698:21:486;29755:2;29735:18;;;29728:30;29794:34;29774:18;;;29767:62;-1:-1:-1;;;29845:18:486;;;29838:40;29895:19;;4483:85:447;29514:406:486;1003:95:436;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1065:26:436::1;:24;:26::i;6588:628:448:-:0;6768:12;6796:7;6792:418;;;6823:17;;6819:286;;-1:-1:-1;;;;;1476:19:448;;;7030:60;;;;-1:-1:-1;;;7030:60:448;;30127:2:486;7030:60:448;;;30109:21:486;30166:2;30146:18;;;30139:30;30205:31;30185:18;;;30178:59;30254:18;;7030:60:448;29925:353:486;7030:60:448;-1:-1:-1;7125:10:448;7118:17;;6792:418;7166:33;7174:10;7186:12;7166:7;:33::i;3883:223::-;4016:12;4047:52;4069:6;4077:4;4083:1;4086:12;4047:21;:52::i;1104:111:436:-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1176:32:436::1;929:10:449::0;1176:18:436::1;:32::i;7738:540:448:-:0;7897:17;;:21;7893:379;;8125:10;8119:17;8181:15;8168:10;8164:2;8160:19;8153:44;7893:379;8248:12;8241:20;;-1:-1:-1;;;8241:20:448;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:486;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;150:314;217:6;225;278:2;266:9;257:7;253:23;249:32;246:52;;;294:1;291;284:12;246:52;333:9;320:23;352:31;377:5;352:31;:::i;:::-;402:5;454:2;439:18;;;;426:32;;-1:-1:-1;;;150:314:486:o;469:264::-;545:6;598:2;586:9;577:7;573:23;569:32;566:52;;;614:1;611;604:12;566:52;653:9;640:23;672:31;697:5;672:31;:::i;1172:684::-;1369:2;1421:21;;;1491:13;;1394:18;;;1513:22;;;1340:4;;1369:2;1592:15;;;;1566:2;1551:18;;;1340:4;1635:195;1649:6;1646:1;1643:13;1635:195;;;1714:13;;-1:-1:-1;;;;;1710:39:486;1698:52;;1805:15;;;;1770:12;;;;1746:1;1664:9;1635:195;;;-1:-1:-1;1847:3:486;;1172:684;-1:-1:-1;;;;;;1172:684:486:o;1861:388::-;1929:6;1937;1990:2;1978:9;1969:7;1965:23;1961:32;1958:52;;;2006:1;2003;1996:12;1958:52;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;-1:-1:-1;2171:2:486;2156:18;;2143:32;2184:33;2143:32;2184:33;:::i;:::-;2236:7;2226:17;;;1861:388;;;;;:::o;2808:367::-;2871:8;2881:6;2935:3;2928:4;2920:6;2916:17;2912:27;2902:55;;2953:1;2950;2943:12;2902:55;-1:-1:-1;2976:20:486;;3019:18;3008:30;;3005:50;;;3051:1;3048;3041:12;3005:50;3088:4;3080:6;3076:17;3064:29;;3148:3;3141:4;3131:6;3128:1;3124:14;3116:6;3112:27;3108:38;3105:47;3102:67;;;3165:1;3162;3155:12;3102:67;2808:367;;;;;:::o;3180:784::-;3313:6;3321;3329;3337;3390:2;3378:9;3369:7;3365:23;3361:32;3358:52;;;3406:1;3403;3396:12;3358:52;3446:9;3433:23;3475:18;3516:2;3508:6;3505:14;3502:34;;;3532:1;3529;3522:12;3502:34;3571:70;3633:7;3624:6;3613:9;3609:22;3571:70;:::i;:::-;3660:8;;-1:-1:-1;3545:96:486;-1:-1:-1;3748:2:486;3733:18;;3720:32;;-1:-1:-1;3764:16:486;;;3761:36;;;3793:1;3790;3783:12;3761:36;;3832:72;3896:7;3885:8;3874:9;3870:24;3832:72;:::i;:::-;3180:784;;;;-1:-1:-1;3923:8:486;-1:-1:-1;;;;3180:784:486:o;3969:589::-;4106:6;4114;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4230:9;4217:23;4249:31;4274:5;4249:31;:::i;:::-;4299:5;-1:-1:-1;4356:2:486;4341:18;;4328:32;4369:33;4328:32;4369:33;:::i;:::-;4421:7;-1:-1:-1;4480:2:486;4465:18;;4452:32;4493:33;4452:32;4493:33;:::i;:::-;4545:7;4535:17;;;3969:589;;;;;:::o;4563:114::-;4647:4;4640:5;4636:16;4629:5;4626:27;4616:55;;4667:1;4664;4657:12;4682:347;4733:8;4743:6;4797:3;4790:4;4782:6;4778:17;4774:27;4764:55;;4815:1;4812;4805:12;4764:55;-1:-1:-1;4838:20:486;;4881:18;4870:30;;4867:50;;;4913:1;4910;4903:12;4867:50;4950:4;4942:6;4938:17;4926:29;;5002:3;4995:4;4986:6;4978;4974:19;4970:30;4967:39;4964:59;;;5019:1;5016;5009:12;5034:848;5131:6;5139;5147;5155;5163;5216:2;5204:9;5195:7;5191:23;5187:32;5184:52;;;5232:1;5229;5222:12;5184:52;5271:9;5258:23;5290:29;5313:5;5290:29;:::i;:::-;5338:5;-1:-1:-1;5394:2:486;5379:18;;5366:32;5417:18;5447:14;;;5444:34;;;5474:1;5471;5464:12;5444:34;5513:58;5563:7;5554:6;5543:9;5539:22;5513:58;:::i;:::-;5590:8;;-1:-1:-1;5487:84:486;-1:-1:-1;5678:2:486;5663:18;;5650:32;;-1:-1:-1;5694:16:486;;;5691:36;;;5723:1;5720;5713:12;5691:36;;5762:60;5814:7;5803:8;5792:9;5788:24;5762:60;:::i;:::-;5034:848;;;;-1:-1:-1;5034:848:486;;-1:-1:-1;5841:8:486;;5736:86;5034:848;-1:-1:-1;;;5034:848:486:o;6095:248::-;6163:6;6171;6224:2;6212:9;6203:7;6199:23;6195:32;6192:52;;;6240:1;6237;6230:12;6192:52;-1:-1:-1;;6263:23:486;;;6333:2;6318:18;;;6305:32;;-1:-1:-1;6095:248:486:o;6540:681::-;6626:6;6634;6642;6650;6703:2;6691:9;6682:7;6678:23;6674:32;6671:52;;;6719:1;6716;6709:12;6671:52;6758:9;6745:23;6777:29;6800:5;6777:29;:::i;:::-;6825:5;-1:-1:-1;6882:2:486;6867:18;;6854:32;6895:33;6854:32;6895:33;:::i;:::-;6947:7;-1:-1:-1;7005:2:486;6990:18;;6977:32;7032:18;7021:30;;7018:50;;;7064:1;7061;7054:12;7018:50;7103:58;7153:7;7144:6;7133:9;7129:22;7103:58;:::i;7463:243::-;7520:6;7573:2;7561:9;7552:7;7548:23;7544:32;7541:52;;;7589:1;7586;7579:12;7541:52;7628:9;7615:23;7647:29;7670:5;7647:29;:::i;7711:258::-;7783:1;7793:113;7807:6;7804:1;7801:13;7793:113;;;7883:11;;;7877:18;7864:11;;;7857:39;7829:2;7822:10;7793:113;;;7924:6;7921:1;7918:13;7915:48;;;-1:-1:-1;;7959:1:486;7941:16;;7934:27;7711:258::o;7974:257::-;8015:3;8053:5;8047:12;8080:6;8075:3;8068:19;8096:63;8152:6;8145:4;8140:3;8136:14;8129:4;8122:5;8118:16;8096:63;:::i;:::-;8213:2;8192:15;-1:-1:-1;;8188:29:486;8179:39;;;;8220:4;8175:50;;7974:257;-1:-1:-1;;7974:257:486:o;8236:314::-;-1:-1:-1;;;;;8411:32:486;;8393:51;;8480:2;8475;8460:18;;8453:30;;;-1:-1:-1;;8500:44:486;;8525:18;;8517:6;8500:44;:::i;8555:745::-;8661:6;8669;8677;8685;8738:2;8726:9;8717:7;8713:23;8709:32;8706:52;;;8754:1;8751;8744:12;8706:52;8794:9;8781:23;8823:18;8864:2;8856:6;8853:14;8850:34;;;8880:1;8877;8870:12;8850:34;8919:70;8981:7;8972:6;8961:9;8957:22;8919:70;:::i;:::-;9008:8;;-1:-1:-1;8893:96:486;-1:-1:-1;9096:2:486;9081:18;;9068:32;;-1:-1:-1;9112:16:486;;;9109:36;;;9141:1;9138;9131:12;9109:36;;9180:60;9232:7;9221:8;9210:9;9206:24;9180:60;:::i;9485:712::-;9570:6;9578;9586;9594;9647:3;9635:9;9626:7;9622:23;9618:33;9615:53;;;9664:1;9661;9654:12;9615:53;9703:9;9690:23;9722:31;9747:5;9722:31;:::i;:::-;9772:5;-1:-1:-1;9829:2:486;9814:18;;9801:32;9842:33;9801:32;9842:33;:::i;:::-;9894:7;-1:-1:-1;9953:2:486;9938:18;;9925:32;9966:33;9925:32;9966:33;:::i;:::-;10018:7;-1:-1:-1;10077:2:486;10062:18;;10049:32;-1:-1:-1;;;;;;10112:34:486;;10100:47;;10090:75;;10161:1;10158;10151:12;10090:75;9485:712;;;;-1:-1:-1;9485:712:486;;-1:-1:-1;;9485:712:486:o;10202:180::-;10261:6;10314:2;10302:9;10293:7;10289:23;10285:32;10282:52;;;10330:1;10327;10320:12;10282:52;-1:-1:-1;10353:23:486;;10202:180;-1:-1:-1;10202:180:486:o;10387:598::-;10508:6;10516;10524;10577:2;10565:9;10556:7;10552:23;10548:32;10545:52;;;10593:1;10590;10583:12;10545:52;10632:9;10619:23;10651:31;10676:5;10651:31;:::i;:::-;10701:5;-1:-1:-1;10757:2:486;10742:18;;10729:32;10784:18;10773:30;;10770:50;;;10816:1;10813;10806:12;10770:50;10855:70;10917:7;10908:6;10897:9;10893:22;10855:70;:::i;:::-;10387:598;;10944:8;;-1:-1:-1;10829:96:486;;-1:-1:-1;;;;10387:598:486:o;11549:407::-;11751:2;11733:21;;;11790:2;11770:18;;;11763:30;11829:34;11824:2;11809:18;;11802:62;-1:-1:-1;;;11895:2:486;11880:18;;11873:41;11946:3;11931:19;;11549:407::o;11961:368::-;12058:6;12066;12074;12082;12135:3;12123:9;12114:7;12110:23;12106:33;12103:53;;;12152:1;12149;12142:12;12103:53;-1:-1:-1;;12175:16:486;;12231:2;12216:18;;12210:25;12275:2;12260:18;;12254:25;12319:2;12304:18;;;12298:25;12175:16;;12210:25;;-1:-1:-1;12298:25:486;;-1:-1:-1;11961:368:486;-1:-1:-1;11961:368:486:o;12334:277::-;12430:6;12483:2;12471:9;12462:7;12458:23;12454:32;12451:52;;;12499:1;12496;12489:12;12451:52;12531:9;12525:16;12550:31;12575:5;12550:31;:::i;13153:184::-;13223:6;13276:2;13264:9;13255:7;13251:23;13247:32;13244:52;;;13292:1;13289;13282:12;13244:52;-1:-1:-1;13315:16:486;;13153:184;-1:-1:-1;13153:184:486:o;13342:247::-;13410:6;13463:2;13451:9;13442:7;13438:23;13434:32;13431:52;;;13479:1;13476;13469:12;13431:52;13511:9;13505:16;13530:29;13553:5;13530:29;:::i;13594:127::-;13655:10;13650:3;13646:20;13643:1;13636:31;13686:4;13683:1;13676:15;13710:4;13707:1;13700:15;13726:422;13815:1;13858:5;13815:1;13872:270;13893:7;13883:8;13880:21;13872:270;;;13952:4;13948:1;13944:6;13940:17;13934:4;13931:27;13928:53;;;13961:18;;:::i;:::-;14011:7;14001:8;13997:22;13994:55;;;14031:16;;;;13994:55;14110:22;;;;14070:15;;;;13872:270;;;13876:3;13726:422;;;;;:::o;14153:806::-;14202:5;14232:8;14222:80;;-1:-1:-1;14273:1:486;14287:5;;14222:80;14321:4;14311:76;;-1:-1:-1;14358:1:486;14372:5;;14311:76;14403:4;14421:1;14416:59;;;;14489:1;14484:130;;;;14396:218;;14416:59;14446:1;14437:10;;14460:5;;;14484:130;14521:3;14511:8;14508:17;14505:43;;;14528:18;;:::i;:::-;-1:-1:-1;;14584:1:486;14570:16;;14599:5;;14396:218;;14698:2;14688:8;14685:16;14679:3;14673:4;14670:13;14666:36;14660:2;14650:8;14647:16;14642:2;14636:4;14633:12;14629:35;14626:77;14623:159;;;-1:-1:-1;14735:19:486;;;14767:5;;14623:159;14814:34;14839:8;14833:4;14814:34;:::i;:::-;14884:6;14880:1;14876:6;14872:19;14863:7;14860:32;14857:58;;;14895:18;;:::i;:::-;14933:20;;14153:806;-1:-1:-1;;;14153:806:486:o;14964:131::-;15024:5;15053:36;15080:8;15074:4;15053:36;:::i;15100:168::-;15140:7;15206:1;15202;15198:6;15194:14;15191:1;15188:21;15183:1;15176:9;15169:17;15165:45;15162:71;;;15213:18;;:::i;:::-;-1:-1:-1;15253:9:486;;15100:168::o;15273:217::-;15313:1;15339;15329:132;;15383:10;15378:3;15374:20;15371:1;15364:31;15418:4;15415:1;15408:15;15446:4;15443:1;15436:15;15329:132;-1:-1:-1;15475:9:486;;15273:217::o;15495:125::-;15535:4;15563:1;15560;15557:8;15554:34;;;15568:18;;:::i;:::-;-1:-1:-1;15605:9:486;;15495:125::o;16041:127::-;16102:10;16097:3;16093:20;16090:1;16083:31;16133:4;16130:1;16123:15;16157:4;16154:1;16147:15;16173:521;16250:4;16256:6;16316:11;16303:25;16410:2;16406:7;16395:8;16379:14;16375:29;16371:43;16351:18;16347:68;16337:96;;16429:1;16426;16419:12;16337:96;16456:33;;16508:20;;;-1:-1:-1;16551:18:486;16540:30;;16537:50;;;16583:1;16580;16573:12;16537:50;16616:4;16604:17;;-1:-1:-1;16647:14:486;16643:27;;;16633:38;;16630:58;;;16684:1;16681;16674:12;16699:135;16738:3;-1:-1:-1;;16759:17:486;;16756:43;;;16779:18;;:::i;:::-;-1:-1:-1;16826:1:486;16815:13;;16699:135::o;18634:331::-;18739:9;18750;18792:8;18780:10;18777:24;18774:44;;;18814:1;18811;18804:12;18774:44;18843:6;18833:8;18830:20;18827:40;;;18863:1;18860;18853:12;18827:40;-1:-1:-1;;18889:23:486;;;18934:25;;;;;-1:-1:-1;18634:331:486:o;20137:457::-;20322:3;20360:6;20354:13;20376:53;20422:6;20417:3;20410:4;20402:6;20398:17;20376:53;:::i;:::-;20451:16;;20504:6;20496;20451:16;20476:35;20568:1;20530:18;;20557:13;;;-1:-1:-1;20530:18:486;;20137:457;-1:-1:-1;;;20137:457:486:o;20599:380::-;20678:1;20674:12;;;;20721;;;20742:61;;20796:4;20788:6;20784:17;20774:27;;20742:61;20849:2;20841:6;20838:14;20818:18;20815:38;20812:161;;;20895:10;20890:3;20886:20;20883:1;20876:31;20930:4;20927:1;20920:15;20958:4;20955:1;20948:15;20812:161;;20599:380;;;:::o;20984:388::-;21141:2;21130:9;21123:21;21180:6;21175:2;21164:9;21160:18;21153:34;21237:6;21229;21224:2;21213:9;21209:18;21196:48;21293:1;21264:22;;;21288:2;21260:31;;;21253:42;;;;21356:2;21335:15;;;-1:-1:-1;;21331:29:486;21316:45;21312:54;;20984:388;-1:-1:-1;20984:388:486:o;22664:274::-;22793:3;22831:6;22825:13;22847:53;22893:6;22888:3;22881:4;22873:6;22869:17;22847:53;:::i;:::-;22916:16;;;;;22664:274;-1:-1:-1;;22664:274:486:o;23693:277::-;23760:6;23813:2;23801:9;23792:7;23788:23;23784:32;23781:52;;;23829:1;23826;23819:12;23781:52;23861:9;23855:16;23914:5;23907:13;23900:21;23893:5;23890:32;23880:60;;23936:1;23933;23926:12;24394:127;24455:10;24450:3;24446:20;24443:1;24436:31;24486:4;24483:1;24476:15;24510:4;24507:1;24500:15;24526:147;24614:13;;24636:31;24614:13;24636:31;:::i;24678:1155::-;24790:6;24821:2;24864;24852:9;24843:7;24839:23;24835:32;24832:52;;;24880:1;24877;24870:12;24832:52;24913:9;24907:16;24942:18;24983:2;24975:6;24972:14;24969:34;;;24999:1;24996;24989:12;24969:34;25037:6;25026:9;25022:22;25012:32;;25082:7;25075:4;25071:2;25067:13;25063:27;25053:55;;25104:1;25101;25094:12;25053:55;25133:2;25127:9;25155:2;25151;25148:10;25145:36;;;25161:18;;:::i;:::-;25207:2;25204:1;25200:10;25239:2;25233:9;25302:2;25298:7;25293:2;25289;25285:11;25281:25;25273:6;25269:38;25357:6;25345:10;25342:22;25337:2;25325:10;25322:18;25319:46;25316:72;;;25368:18;;:::i;:::-;25404:2;25397:22;25454:18;;;25488:15;;;;-1:-1:-1;25530:11:486;;;25526:20;;;25558:19;;;25555:39;;;25590:1;25587;25580:12;25555:39;25614:11;;;;25634:168;25650:6;25645:3;25642:15;25634:168;;;25716:43;25755:3;25716:43;:::i;:::-;25704:56;;25667:12;;;;25780;;;;25634:168;;25838:175;25875:3;25919:4;25912:5;25908:16;25948:4;25939:7;25936:17;25933:43;;;25956:18;;:::i;:::-;26005:1;25992:15;;25838:175;-1:-1:-1;;25838:175:486:o;28695:407::-;28897:2;28879:21;;;28936:2;28916:18;;;28909:30;28975:34;28970:2;28955:18;;28948:62;-1:-1:-1;;;29041:2:486;29026:18;;29019:41;29092:3;29077:19;;28695:407::o;30283:219::-;30432:2;30421:9;30414:21;30395:4;30452:44;30492:2;30481:9;30477:18;30469:6;30452:44;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_callPool(address[],bytes)": "b01b86fd", + "_callPool(address[],bytes[])": "2acbff39", + "_registerComptrollerExtension(address,address,address)": "3ddd836d", + "_setCErc20DelegateExtensions(address,address[])": "eab8a388", + "_setComptrollerExtensions(address,address[])": "e95600be", + "_setCustomInterestFeeRate(address,int256)": "06bc4611", + "_setDefaultInterestFeeRate(uint256)": "e35a4801", + "_setLatestCErc20Delegate(uint8,address,bytes)": "88457be1", + "_setLatestComptrollerImplementation(address,address)": "930d2438", + "_setLatestPluginImplementation(address,address)": "1259821c", + "_setPendingOwner(address)": "6e96dfd7", + "_setPoolLimits(uint256,uint256)": "642843a5", + "_upgradePluginToLatestImplementation(address)": "7a1133d6", + "_withdrawAssets(address)": "3465b6e1", + "authoritiesRegistry()": "8aac2f0c", + "autoUpgradePool(address)": "fa7cc72d", + "cErc20DelegateExtensions(address,uint256)": "2203abb5", + "canCall(address,address,address,bytes4)": "df595cb8", + "comptrollerExtensions(address,uint256)": "fc773d33", + "customInterestFeeRates(address)": "c5232b47", + "defaultInterestFeeRate()": "84651d73", + "deployCErc20(uint8,bytes,bytes)": "51f02d6a", + "getCErc20DelegateExtensions(address)": "11a0e217", + "getComptrollerExtensions(address)": "cbc505f8", + "getMinBorrowEth(address)": "0b2a2394", + "initialize(uint256)": "fe4b84df", + "interestFeeRate()": "dd86fea1", + "latestCErc20Delegate(uint8)": "aa84161c", + "latestComptrollerImplementation(address)": "bbcdd6d3", + "latestPluginImplementation(address)": "81218ea9", + "marketsCounter()": "a71d085d", + "maxUtilizationRate()": "dfcb48bd", + "minBorrowEth()": "fdb25fb1", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "reinitialize(address)": "f7e7d1fd", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/FeeDistributor_Proxy.json b/packages/sdk/deployments/mode/FeeDistributor_Proxy.json new file mode 100644 index 0000000000..91789021cd --- /dev/null +++ b/packages/sdk/deployments/mode/FeeDistributor_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "transactionIndex": 1, + "gasUsed": "816495", + "logsBloom": "0x01000000000000000000000000000020400000000000000000800000000200100000000000000000000000000000000000000000102000000000000000000000000000000000000000000800000002000001000000000000000000000000000000000000020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000100000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d", + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000009a0af901cae82f309f1047e1026f66a08c6fceec" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + }, + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + }, + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + }, + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + }, + { + "transactionIndex": 1, + "blockNumber": 2065461, + "transactionHash": "0x08e8511ddc11538bbc416909effb2b08623aad29bd30d309feb37fd0936a12c8", + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x7c639deb464e9eca4b8b015e32b84c347b3d96d3ada8236e9632430863d3fb6d" + } + ], + "blockNumber": 2065461, + "cumulativeGasUsed": "863408", + "status": 1, + "byzantium": true + }, + "args": [ + "0x9a0aF901CAE82f309F1047e1026F66A08C6FCEEC", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xfe4b84df000000000000000000000000000000000000000000000000016345785d8a0000" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/FixedNativePriceOracle.json b/packages/sdk/deployments/mode/FixedNativePriceOracle.json new file mode 100644 index 0000000000..515dce7966 --- /dev/null +++ b/packages/sdk/deployments/mode/FixedNativePriceOracle.json @@ -0,0 +1,403 @@ +{ + "address": "0x1D7669b6BDfdb83066dd7C0aDa4B630b25cBc28a", + "abi": [ + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xf784ea452046ad9a64a135fad47f479dc6062eac9285d06ae46dbf01f0795aed", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x1D7669b6BDfdb83066dd7C0aDa4B630b25cBc28a", + "transactionIndex": 1, + "gasUsed": "89259", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xbdf9580dbba9d9e8e4a30de9ef227e1f3248b9f3764b0512c142a715d180721d", + "transactionHash": "0xf784ea452046ad9a64a135fad47f479dc6062eac9285d06ae46dbf01f0795aed", + "logs": [], + "blockNumber": 2097485, + "cumulativeGasUsed": "136172", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getUnderlyingPrice(address)": { + "details": "Implements the `PriceOracle` interface for Ionic pools (and Compound v2).", + "returns": { + "_0": "Price in native token of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`." + } + }, + "price(address)": { + "details": "Returns the price in native token of `underlying` (implements `BasePriceOracle`)." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getUnderlyingPrice(address)": { + "notice": "Returns the price in native token of the token underlying `cToken`." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/oracles/default/FixedNativePriceOracle.sol": "FixedNativePriceOracle" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/FixedNativePriceOracle.sol": { + "keccak256": "0x8c03761765330065bd349ba59bb607a0e8d93c6afa4858ee2dca8ce9aaecdff9", + "urls": [ + "bzz-raw://e7153e1d087364b4a8fe1ba5de4403a5c9090363e25ac5fdf5bbacfcff2f54ce", + "dweb:/ipfs/Qmeq7SrkSGmQhqn71HYHX4Lfvkw7tnJvuQW2kxV72hQYX8" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5060a68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c8063aea91078146037578063fc57d4df146037575b600080fd5b604f60423660046078565b50670de0b6b3a764000090565b60405190815260200160405180910390f35b6001600160a01b0381168114607557600080fd5b50565b600060208284031215608957600080fd5b81356092816061565b939250505056fea164736f6c634300080a000a", + "sourceMap": "501:661:252:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052348015600f57600080fd5b506004361060325760003560e01c8063aea91078146037578063fc57d4df146037575b600080fd5b604f60423660046078565b50670de0b6b3a764000090565b60405190815260200160405180910390f35b6001600160a01b0381168114607557600080fd5b50565b600060208284031215608957600080fd5b81356092816061565b939250505056fea164736f6c634300080a000a", + "sourceMap": "501:661:252:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:98;;;;;;:::i;:::-;-1:-1:-1;749:4:252;;660:98;;;;548:25:486;;;536:2;521:18;660:98:252;;;;;;;14:131:486;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:486:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "getUnderlyingPrice(address)": "fc57d4df", + "price(address)": "aea91078" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/IonicFlywheelLensRouter.json b/packages/sdk/deployments/mode/IonicFlywheelLensRouter.json new file mode 100644 index 0000000000..e1a2414ebc --- /dev/null +++ b/packages/sdk/deployments/mode/IonicFlywheelLensRouter.json @@ -0,0 +1,1218 @@ +{ + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "abi": [ + { + "inputs": [ + { + "internalType": "contract PoolDirectory", + "name": "_fpd", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "claimAllRewardTokens", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract ERC20", + "name": "market", + "type": "address" + }, + { + "internalType": "contract IonicFlywheelCore[]", + "name": "flywheels", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "accrue", + "type": "bool[]" + } + ], + "name": "claimRewardsForMarket", + "outputs": [ + { + "internalType": "contract IonicFlywheelCore[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "rewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "rewards", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract ERC20[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "contract IonicFlywheelCore[]", + "name": "flywheels", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "accrue", + "type": "bool[]" + } + ], + "name": "claimRewardsForMarkets", + "outputs": [ + { + "internalType": "contract IonicFlywheelCore[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "rewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "rewards", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "name": "claimRewardsForPool", + "outputs": [ + { + "internalType": "contract IonicFlywheelCore[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + } + ], + "name": "claimRewardsOfRewardToken", + "outputs": [ + { + "internalType": "uint256", + "name": "rewardsClaimed", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "fpd", + "outputs": [ + { + "internalType": "contract PoolDirectory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "blocksPerYear", + "type": "int256" + }, + { + "internalType": "address[]", + "name": "offchainRewardsAprMarkets", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "offchainRewardsAprs", + "type": "int256[]" + } + ], + "name": "getAdjustedUserNetApr", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getAllRewardTokens", + "outputs": [ + { + "internalType": "address[]", + "name": "uniqueRewardTokens", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20[]", + "name": "markets", + "type": "address[]" + } + ], + "name": "getMarketRewardsInfo", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "market", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "rewardSpeedPerSecondPerToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "formattedAPR", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + } + ], + "internalType": "struct IonicFlywheelLensRouter.RewardsInfo[]", + "name": "rewardsInfo", + "type": "tuple[]" + } + ], + "internalType": "struct IonicFlywheelLensRouter.MarketRewardsInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "name": "getPoolMarketRewardsInfo", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "market", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "rewardSpeedPerSecondPerToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "formattedAPR", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + } + ], + "internalType": "struct IonicFlywheelLensRouter.RewardsInfo[]", + "name": "rewardsInfo", + "type": "tuple[]" + } + ], + "internalType": "struct IonicFlywheelLensRouter.MarketRewardsInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "blocksPerYear", + "type": "int256" + } + ], + "name": "getUserNetApr", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xe826950746f774ae5ca0393038d9e990930e3f5d1815894e2102bd6d840d825a", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "transactionIndex": 1, + "gasUsed": "3407433", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x98915572b79a0513cece0dfc64613259fd108021fb0b4b33d434a8bd89cb293c", + "transactionHash": "0xe826950746f774ae5ca0393038d9e990930e3f5d1815894e2102bd6d840d825a", + "logs": [], + "blockNumber": 2097478, + "cumulativeGasUsed": "3471446", + "status": 1, + "byzantium": true + }, + "args": [ + "0x39C353Cf9041CcF467A04d0e78B63d961E81458a" + ], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract PoolDirectory", + "name": "_fpd", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimAllRewardTokens", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract ERC20", + "name": "market", + "type": "address" + }, + { + "internalType": "contract IonicFlywheelCore[]", + "name": "flywheels", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "accrue", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimRewardsForMarket", + "outputs": [ + { + "internalType": "contract IonicFlywheelCore[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "rewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "rewards", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract ERC20[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "contract IonicFlywheelCore[]", + "name": "flywheels", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "accrue", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimRewardsForMarkets", + "outputs": [ + { + "internalType": "contract IonicFlywheelCore[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "rewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "rewards", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimRewardsForPool", + "outputs": [ + { + "internalType": "contract IonicFlywheelCore[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimRewardsOfRewardToken", + "outputs": [ + { + "internalType": "uint256", + "name": "rewardsClaimed", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "fpd", + "outputs": [ + { + "internalType": "contract PoolDirectory", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "blocksPerYear", + "type": "int256" + }, + { + "internalType": "address[]", + "name": "offchainRewardsAprMarkets", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "offchainRewardsAprs", + "type": "int256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getAdjustedUserNetApr", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllRewardTokens", + "outputs": [ + { + "internalType": "address[]", + "name": "uniqueRewardTokens", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20[]", + "name": "markets", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getMarketRewardsInfo", + "outputs": [ + { + "internalType": "struct IonicFlywheelLensRouter.MarketRewardsInfo[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "market", + "type": "address" + }, + { + "internalType": "struct IonicFlywheelLensRouter.RewardsInfo[]", + "name": "rewardsInfo", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "rewardSpeedPerSecondPerToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "formattedAPR", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + } + ] + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolMarketRewardsInfo", + "outputs": [ + { + "internalType": "struct IonicFlywheelLensRouter.MarketRewardsInfo[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "market", + "type": "address" + }, + { + "internalType": "struct IonicFlywheelLensRouter.RewardsInfo[]", + "name": "rewardsInfo", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "rewardSpeedPerSecondPerToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "formattedAPR", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + } + ] + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "blocksPerYear", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getUserNetApr", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/strategies/flywheel/IonicFlywheelLensRouter.sol": "IonicFlywheelLensRouter" + }, + "libraries": {} + }, + "sources": { + "contracts/PoolDirectory.sol": { + "keccak256": "0xd3d28cd044a0205a86f0c2d82021a36018ec4b0e95f72064c92bcad99f84f6c8", + "urls": [ + "bzz-raw://0c8ab6e3f922b9165cae038507497be2aed81df002ffe7921e0aa1f10f690531", + "dweb:/ipfs/QmNpfDhHaVPyxXZDY7Si2Bpidneh6Ckr8C4dGhRmA9pEEa" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x84edc2b901bfc47df6728100716d0e23de7f095543fcc4b919ae8f5f049a2d08", + "urls": [ + "bzz-raw://dc2a5d197584bf0a6ebe3bbad4a6c97f448cef027d3fc397ce2453b1e87826fa", + "dweb:/ipfs/QmdL2TZVb8W1nM3VMe2eUoXgzUjSb8FBvxmbCPWPWndVTU" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelLensRouter.sol": { + "keccak256": "0x07825b93d0316925a45f5257c2c3d7bcd87d38f01fa07a881a5b2070f7c63c03", + "urls": [ + "bzz-raw://4422587ad677c0df40a56b387788c83b67a3bfb6040ec2923416ea7a7d2839de", + "dweb:/ipfs/QmRW4ofvDuZkaZwQeZ8k9yDKFnTCFuFWveQBFwdrv6twUF" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040523480156200001157600080fd5b5060405162003cda38038062003cda83398101604081905262000034916200005a565b600080546001600160a01b0319166001600160a01b03929092169190911790556200008c565b6000602082840312156200006d57600080fd5b81516001600160a01b03811681146200008557600080fd5b9392505050565b613c3e806200009c6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637e70aa49116100715780637e70aa49146101315780638260a696146101515780639cf1fd5314610164578063bdfc183914610185578063d1040bae14610198578063de858c63146101ab57600080fd5b80630d9d7fdc146100ae57806312edb24c146100d45780633610c407146100e95780634f471e6d1461010b5780637d3cab4c1461011e575b600080fd5b6100c16100bc366004612d63565b6101d6565b6040519081526020015b60405180910390f35b6100dc610204565b6040516100cb9190612dd3565b6100fc6100f7366004612de6565b610630565b6040516100cb93929190612e4f565b6100fc610119366004612f05565b6108ee565b6100c161012c366004613095565b610ce9565b61014461013f366004613174565b611149565b6040516100cb919061320d565b6100fc61015f3660046133c6565b61129e565b6101776101723660046134b4565b61165d565b6040516100cb9291906134d1565b6100c1610193366004612de6565b61171c565b6101446101a63660046134b4565b611c28565b6000546101be906001600160a01b031681565b6040516001600160a01b0390911681526020016100cb565b60408051600080825260208201818152828401909352916101f985858484610ce9565b925050505b92915050565b60008054604080516323b020d560e21b81529051606093926001600160a01b031691638ec0835491600480830192869291908290030181865afa15801561024f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610277919081019061367b565b915060009050805b825181101561033857600083828151811061029c5761029c613736565b60200260200101516040015190506000816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610312919081019061374c565b905080518461032191906137f0565b93505050808061033090613808565b91505061027f565b506000816001600160401b0381111561035357610353612f99565b60405190808252806020026020018201604052801561037c578160200160208202803683370190505b5090506000805b84518110156105825760008582815181106103a0576103a0613736565b60200260200101516040015190506000816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610416919081019061374c565b905060005b815181101561056c57600082828151811061043857610438613736565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a19190613823565b90506001600160a01b0381166104b7575061056c565b6000805b8851811015610512578881815181106104d6576104d6613736565b60200260200101516001600160a01b0316836001600160a01b031614156105005760019150610512565b8061050a81613808565b9150506104bb565b50806105575781888861052481613808565b99508151811061053657610536613736565b60200260200101906001600160a01b031690816001600160a01b0316815250505b5050808061056490613808565b91505061041b565b505050808061057a90613808565b915050610383565b50806001600160401b0381111561059b5761059b612f99565b6040519080825280602002602001820160405280156105c4578160200160208202803683370190505b50945060005b81811015610628578281815181106105e4576105e4613736565b60200260200101518682815181106105fe576105fe613736565b6001600160a01b03909216602092830291909101909101528061062081613808565b9150506105ca565b505050505090565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610675573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261069d9190810190613840565b9050600081516001600160401b038111156106ba576106ba612f99565b6040519080825280602002602001820160405280156106e3578160200160208202803683370190505b5090506000866001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015610726573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261074e919081019061374c565b9050600081516001600160401b0381111561076b5761076b612f99565b604051908082528060200260200182016040528015610794578160200160208202803683370190505b509050600082516001600160401b038111156107b2576107b2612f99565b6040519080825280602002602001820160405280156107db578160200160208202803683370190505b50905060005b835181101561086c578381815181106107fc576107fc613736565b602002602001015183828151811061081657610816613736565b60200260200101906001600160a01b031690816001600160a01b031681525050600182828151811061084a5761084a613736565b911515602092830291909101909101528061086481613808565b9150506107e1565b5060005b85518110156108cf5785818151811061088b5761088b613736565b60200260200101518582815181106108a5576108a5613736565b6001600160a01b0390921660209283029190910190910152806108c781613808565b915050610870565b506108dc8a85848461129e565b97509750975050505050509250925092565b6060808085806001600160401b0381111561090b5761090b612f99565b604051908082528060200260200182016040528015610934578160200160208202803683370190505b509150806001600160401b0381111561094f5761094f612f99565b604051908082528060200260200182016040528015610978578160200160208202803683370190505b50925060005b81811015610c9957600087878381811061099a5761099a613736565b90506020020160208101906109af91906138ce565b15610a58578989838181106109c6576109c6613736565b90506020020160208101906109db91906134b4565b604051632e6f912b60e21b81526001600160a01b038d811660048301528e81166024830152919091169063b9be44ac906044016020604051808303816000875af1158015610a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5191906138e9565b9050610af0565b898983818110610a6a57610a6a613736565b9050602002016020810190610a7f91906134b4565b604051630ff6b5a760e31b81526001600160a01b038e811660048301529190911690637fb5ad38906024016020604051808303816000875af1158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed91906138e9565b90505b80848381518110610b0357610b03613736565b60200260200101511015610b175780610b32565b838281518110610b2957610b29613736565b60200260200101515b848381518110610b4457610b44613736565b602002602001018181525050898983818110610b6257610b62613736565b9050602002016020810190610b7791906134b4565b604051633bd73ee360e21b81526001600160a01b038e81166004830152919091169063ef5cfb8c90602401600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b50505050898983818110610be657610be6613736565b9050602002016020810190610bfb91906134b4565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5c9190613823565b858381518110610c6e57610c6e613736565b6001600160a01b03909216602092830291909101909101525080610c9181613808565b91505061097e565b5087878484838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929a5093985091965050505050505096509650969350505050565b6040805160a0810182526000808252602082018190529181018290526060808201526080810182905260008060009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8e919081019061367b565b91505060005b8151811015611107576000828281518110610db157610db1613736565b6020026020010151604001519050806001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e219190613823565b84604001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ea49190810190613840565b606085015260005b8460600151518110156110f2576000805b8951811015610f455786606001518381518110610edc57610edc613736565b60200260200101516001600160a01b03168a8281518110610eff57610eff613736565b60200260200101516001600160a01b03161415610f3357888181518110610f2857610f28613736565b602002602001015191505b80610f3d81613808565b915050610ebd565b50670de0b6b3a764000086604001516001600160a01b031663fc57d4df88606001518581518110610f7857610f78613736565b60200260200101516040518263ffffffff1660e01b8152600401610fab91906001600160a01b0391909116815260200190565b602060405180830381865afa158015610fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fec91906138e9565b8760600151848151811061100257611002613736565b6020908102919091010151604051633af9e66960e01b81526001600160a01b038f8116600483015290911690633af9e66990602401602060405180830381865afa158015611054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107891906138e9565b6110829190613902565b61108c9190613937565b8651879061109b908390613965565b905250606086015180516110ca918d91859081106110bb576110bb613736565b6020026020010151838d611c9e565b866020018181516110db9190613965565b9052508190506110ea81613808565b915050610eac565b505080806110ff90613808565b915050610d94565b50815161111957600092505050611141565b8151602083015161113290670de0b6b3a76400006139a6565b61113c9190613937565b925050505b949350505050565b60606000805b835181101561128c57600084828151811061116c5761116c613736565b6020026020010151905060006001600160a01b0316836001600160a01b031614156111fa57806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f39190613823565b9250611279565b826001600160a01b0316816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190613823565b6001600160a01b03161461127957600080fd5b508061128481613808565b91505061114f565b506112978382611ea8565b9392505050565b606080606084516001600160401b038111156112bc576112bc612f99565b6040519080825280602002602001820160405280156112e5578160200160208202803683370190505b50905084516001600160401b0381111561130157611301612f99565b60405190808252806020026020018201604052801561132a578160200160208202803683370190505b50915060005b85518110156116505760005b875181101561151f57600088828151811061135957611359613736565b60200260200101519050600087848151811061137757611377613736565b60200260200101511561141d5788848151811061139657611396613736565b6020908102919091010151604051632e6f912b60e21b81526001600160a01b0384811660048301528d811660248301529091169063b9be44ac906044016020604051808303816000875af11580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141691906138e9565b90506114aa565b88848151811061142f5761142f613736565b6020908102919091010151604051630ff6b5a760e31b81526001600160a01b038d8116600483015290911690637fb5ad38906024016020604051808303816000875af1158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a791906138e9565b90505b808585815181106114bd576114bd613736565b602002602001015110156114d157806114ec565b8484815181106114e3576114e3613736565b60200260200101515b8585815181106114fe576114fe613736565b6020026020010181815250505050808061151790613808565b91505061133c565b5085818151811061153257611532613736565b6020908102919091010151604051633bd73ee360e21b81526001600160a01b038a811660048301529091169063ef5cfb8c90602401600060405180830381600087803b15801561158157600080fd5b505af1158015611595573d6000803e3d6000fd5b505050508581815181106115ab576115ab613736565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116149190613823565b83828151811061162657611626613736565b6001600160a01b03909216602092830291909101909101528061164881613808565b915050611330565b5093969095509293505050565b606080600061166a610204565b9050600081516001600160401b0381111561168757611687612f99565b6040519080825280602002602001820160405280156116b0578160200160208202803683370190505b50905060005b8251811015611711576116e2868483815181106116d5576116d5613736565b602002602001015161171c565b8282815181106116f4576116f4613736565b60209081029190910101528061170981613808565b9150506116b6565b509094909350915050565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918416906370a0823190602401602060405180830381865afa158015611767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178b91906138e9565b905060008060009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa1580156117e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611809919081019061367b565b91505060005b8151811015611ba357600082828151811061182c5761182c613736565b602002602001015160400151905060606000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561187c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118a49190810190613840565b905080516001600160401b038111156118bf576118bf612f99565b6040519080825280602002602001820160405280156118e8578160200160208202803683370190505b50915060005b815181101561194d5781818151811061190957611909613736565b602002602001015183828151811061192357611923613736565b6001600160a01b03909216602092830291909101909101528061194581613808565b9150506118ee565b50506000826001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa15801561198f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119b7919081019061374c565b905060005b8151811015611b8c5760008282815181106119d9576119d9613736565b60200260200101519050896001600160a01b0316816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190613823565b6001600160a01b03161415611b795760005b8451811015611b1c57816001600160a01b031663b9be44ac868381518110611a8b57611a8b613736565b60200260200101518e6040518363ffffffff1660e01b8152600401611ac69291906001600160a01b0392831681529116602082015260400190565b6020604051808303816000875af1158015611ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0991906138e9565b5080611b1481613808565b915050611a61565b50604051633bd73ee360e21b81526001600160a01b038c8116600483015282169063ef5cfb8c90602401600060405180830381600087803b158015611b6057600080fd5b505af1158015611b74573d6000803e3d6000fd5b505050505b5080611b8481613808565b9150506119bc565b505050508080611b9b90613808565b91505061180f565b506040516370a0823160e01b81526001600160a01b038681166004830152600091908616906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1291906138e9565b9050611c1e8382613a2b565b9695505050505050565b60606000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c929190810190613840565b90506112978184611ea8565b600080846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d039190613823565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d699190613823565b9050600085611d7989898861266b565b611d8289612746565b611d8c9190613965565b611d969190613965565b60405163fc57d4df60e01b81526001600160a01b0389811660048301529192506ec097ce7bc90715b34b9f10000000009184169063fc57d4df90602401602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1491906138e9565b604051633af9e66960e01b81526001600160a01b038b811660048301528a1690633af9e66990602401602060405180830381865afa158015611e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7e91906138e9565b611e8890846139a6565b611e9291906139a6565b611e9c9190613937565b98975050505050505050565b60606001600160a01b0382161580611ebf57508251155b15611f11576040805160008082526020820190925290611f09565b60408051606080820183526000808352602083015291810191909152815260200190600190039081611eda5790505b5090506101fe565b6000826001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f79919081019061374c565b9050600081516001600160401b03811115611f9657611f96612f99565b604051908082528060200260200182016040528015611fbf578160200160208202803683370190505b509050600082516001600160401b03811115611fdd57611fdd612f99565b604051908082528060200260200182016040528015612006578160200160208202803683370190505b509050600083516001600160401b0381111561202457612024612f99565b60405190808252806020026020018201604052801561204d578160200160208202803683370190505b5090506000866001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190613823565b9050600088516001600160401b038111156120d1576120d1612f99565b60405190808252806020026020018201604052801561211e57816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816120ef5790505b50905060005b895181101561265e57600087516001600160401b0381111561214857612148612f99565b6040519080825280602002602001820160405280156121bd57816020015b6121aa6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152602001906001900390816121665790505b50905060008b83815181106121d4576121d4613736565b602002602001015190506000856001600160a01b031663aea91078836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122519190613823565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b991906138e9565b90508361248c5760005b8a5181101561248a5760008b82815181106122e0576122e0613736565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123499190613823565b9050808b838151811061235e5761235e613736565b6001600160a01b0392831660209182029290920101526040516315d5220f60e31b815282821660048201529089169063aea9107890602401602060405180830381865afa1580156123b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d791906138e9565b8a83815181106123e9576123e9613736565b602002602001018181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124579190613a42565b60ff1689838151811061246c5761246c613736565b6020908102919091010152508061248281613808565b9150506122c3565b505b60005b8a518110156126065760008b82815181106124ac576124ac613736565b6020026020010151905060006124dc82868c86815181106124cf576124cf613736565b6020026020010151612ad2565b90506000612566828d86815181106124f6576124f6613736565b602002602001015187896001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256191906138e9565b612c8e565b90506040518060a001604052808381526020018d868151811061258b5761258b613736565b60200260200101518152602001828152602001846001600160a01b031681526020018e86815181106125bf576125bf613736565b60200260200101516001600160a01b03168152508785815181106125e5576125e5613736565b602002602001018190525050505080806125fe90613808565b91505061248f565b506040518060600160405280828152602001836001600160a01b031681526020018481525085858151811061263d5761263d613736565b6020026020010181905250505050808061265690613808565b915050612124565b5098975050505050505050565b600081836001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d091906138e9565b846001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273291906138e9565b61273c9190613a65565b61114191906139a6565b600080826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ab9190613823565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128119190613823565b60405163fc57d4df60e01b81526001600160a01b03868116600483015291925060009183169063fc57d4df90602401602060405180830381865afa15801561285d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288191906138e9565b90506000836001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa1580156128c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128eb919081019061374c565b905060005b8151811015612ac857600082828151811061290d5761290d613736565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297b9190613823565b905060006129ee838b846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e69190613a42565b60ff16612ad2565b6040516315d5220f60e31b81526001600160a01b038481166004830152919250600091612aa39184918b169063aea9107890602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6491906138e9565b898e6001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d6000803e3d6000fd5b9050612aaf818b613965565b9950505050508080612ac090613808565b9150506128f0565b5050505050919050565b60405163dde684a560e01b81526001600160a01b03808416600483015260009184918391829188169063dde684a59060240160408051808303816000875af1158015612b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b469190613aa4565b604051632e6f912b60e21b81526001600160a01b038681166004830152600060248301529294509092509088169063b9be44ac906044016020604051808303816000875af1158015612b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc091906138e9565b5060405163dde684a560e01b81526001600160a01b03848116600483015260009182918a169063dde684a59060240160408051808303816000875af1158015612c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c319190613aa4565b915091508263ffffffff168163ffffffff161115612c8257612c538382613ae8565b63ffffffff16612c75612c668685613b0d565b6001600160e01b031689612cfb565b612c7f9190613b2d565b95505b50505050509392505050565b600084612c9d57506000611141565b6000612ca98587613902565b90506000612cbb826301e187e0613902565b90506000612cc98683613b2d565b90506000612cdf82670de0b6b3a7640000613902565b90506000612ced8783613b2d565b9a9950505050505050505050565b60006012821115612d2b57612d11601283613a2b565b612d1c90600a613c25565b612d269084613b2d565b611297565b612d36826012613a2b565b612d4190600a613c25565b6112979084613902565b6001600160a01b0381168114612d6057600080fd5b50565b60008060408385031215612d7657600080fd5b8235612d8181612d4b565b946020939093013593505050565b600081518084526020808501945080840160005b83811015612dc85781516001600160a01b031687529582019590820190600101612da3565b509495945050505050565b6020815260006112976020830184612d8f565b60008060408385031215612df957600080fd5b8235612e0481612d4b565b91506020830135612e1481612d4b565b809150509250929050565b600081518084526020808501945080840160005b83811015612dc857815187529582019590820190600101612e33565b606080825284519082018190526000906020906080840190828801845b82811015612e915781516001600160a01b031684529284019290840190600101612e6c565b50505083810382850152612ea58187612d8f565b9150508281036040840152611c1e8185612e1f565b60008083601f840112612ecc57600080fd5b5081356001600160401b03811115612ee357600080fd5b6020830191508360208260051b8501011115612efe57600080fd5b9250929050565b60008060008060008060808789031215612f1e57600080fd5b8635612f2981612d4b565b95506020870135612f3981612d4b565b945060408701356001600160401b0380821115612f5557600080fd5b612f618a838b01612eba565b90965094506060890135915080821115612f7a57600080fd5b50612f8789828a01612eba565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715612fd157612fd1612f99565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612fff57612fff612f99565b604052919050565b60006001600160401b0382111561302057613020612f99565b5060051b60200190565b600082601f83011261303b57600080fd5b8135602061305061304b83613007565b612fd7565b82815260059290921b8401810191818101908684111561306f57600080fd5b8286015b8481101561308a5780358352918301918301613073565b509695505050505050565b600080600080608085870312156130ab57600080fd5b84356130b681612d4b565b9350602085810135935060408601356001600160401b03808211156130da57600080fd5b818801915088601f8301126130ee57600080fd5b81356130fc61304b82613007565b81815260059190911b8301840190848101908b83111561311b57600080fd5b938501935b8285101561314257843561313381612d4b565b82529385019390850190613120565b96505050606088013592508083111561315a57600080fd5b50506131688782880161302a565b91505092959194509250565b6000602080838503121561318757600080fd5b82356001600160401b0381111561319d57600080fd5b8301601f810185136131ae57600080fd5b80356131bc61304b82613007565b81815260059190911b820183019083810190878311156131db57600080fd5b928401925b828410156132025783356131f381612d4b565b825292840192908401906131e0565b979650505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156132dd57888303603f19018552815180518452878101516001600160a01b03908116898601529087015160608886018190528151818701819052918a019290916080918288019160005b818110156132c5578651805185528e8101518f8601528d8101518e86015286810151841687860152850151831685850152958d019560a090930192600101613282565b505050978a0197955050509187019150600101613234565b509098975050505050505050565b600082601f8301126132fc57600080fd5b8135602061330c61304b83613007565b82815260059290921b8401810191818101908684111561332b57600080fd5b8286015b8481101561308a57803561334281612d4b565b835291830191830161332f565b8035801515811461335f57600080fd5b919050565b600082601f83011261337557600080fd5b8135602061338561304b83613007565b82815260059290921b840181019181810190868411156133a457600080fd5b8286015b8481101561308a576133b98161334f565b83529183019183016133a8565b600080600080608085870312156133dc57600080fd5b84356133e781612d4b565b93506020858101356001600160401b038082111561340457600080fd5b818801915088601f83011261341857600080fd5b813561342661304b82613007565b81815260059190911b8301840190848101908b83111561344557600080fd5b938501935b8285101561346c57843561345d81612d4b565b8252938501939085019061344a565b97505050604088013592508083111561348457600080fd5b61349089848a016132eb565b945060608801359250808311156134a657600080fd5b505061316887828801613364565b6000602082840312156134c657600080fd5b813561129781612d4b565b6040815260006134e46040830185612d8f565b82810360208401526134f68185612e1f565b95945050505050565b805161335f81612d4b565b6000601f838184011261351c57600080fd5b8251602061352c61304b83613007565b82815260059290921b8501810191818101908784111561354b57600080fd5b8287015b8481101561366f5780516001600160401b038082111561356f5760008081fd5b9089019060a0601f19838d03810182131561358a5760008081fd5b613592612faf565b88850151848111156135a45760008081fd5b8501603f81018f136135b65760008081fd5b89810151858111156135ca576135ca612f99565b6135d98b858f84011601612fd7565b9550808652604093508f848284010111156135f45760008081fd5b60005b81811015613612578281018501518782018d01528b016135f7565b818111156136235760008c83890101525b5050508381526136348286016134ff565b89820152606093506136478486016134ff565b918101919091526080848101519382019390935292015190820152835291830191830161354f565b50979650505050505050565b6000806040838503121561368e57600080fd5b82516001600160401b03808211156136a557600080fd5b818501915085601f8301126136b957600080fd5b815160206136c961304b83613007565b82815260059290921b840181019181810190898411156136e857600080fd5b948201945b83861015613706578551825294820194908201906136ed565b9188015191965090935050508082111561371f57600080fd5b5061372c8582860161350a565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000602080838503121561375f57600080fd5b82516001600160401b0381111561377557600080fd5b8301601f8101851361378657600080fd5b805161379461304b82613007565b81815260059190911b820183019083810190878311156137b357600080fd5b928401925b828410156132025783516137cb81612d4b565b825292840192908401906137b8565b634e487b7160e01b600052601160045260246000fd5b60008219821115613803576138036137da565b500190565b600060001982141561381c5761381c6137da565b5060010190565b60006020828403121561383557600080fd5b815161129781612d4b565b6000602080838503121561385357600080fd5b82516001600160401b0381111561386957600080fd5b8301601f8101851361387a57600080fd5b805161388861304b82613007565b81815260059190911b820183019083810190878311156138a757600080fd5b928401925b828410156132025783516138bf81612d4b565b825292840192908401906138ac565b6000602082840312156138e057600080fd5b6112978261334f565b6000602082840312156138fb57600080fd5b5051919050565b600081600019048311821515161561391c5761391c6137da565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261394657613946613921565b600160ff1b821460001984141615613960576139606137da565b500590565b600080821280156001600160ff1b0384900385131615613987576139876137da565b600160ff1b83900384128116156139a0576139a06137da565b50500190565b60006001600160ff1b03818413828413808216868404861116156139cc576139cc6137da565b600160ff1b60008712828116878305891216156139eb576139eb6137da565b60008712925087820587128484161615613a0757613a076137da565b87850587128184161615613a1d57613a1d6137da565b505050929093029392505050565b600082821015613a3d57613a3d6137da565b500390565b600060208284031215613a5457600080fd5b815160ff8116811461129757600080fd5b60008083128015600160ff1b850184121615613a8357613a836137da565b6001600160ff1b0384018313811615613a9e57613a9e6137da565b50500390565b60008060408385031215613ab757600080fd5b82516001600160e01b0381168114613ace57600080fd5b602084015190925063ffffffff81168114612e1457600080fd5b600063ffffffff83811690831681811015613b0557613b056137da565b039392505050565b60006001600160e01b0383811690831681811015613b0557613b056137da565b600082613b3c57613b3c613921565b500490565b600181815b80851115613b7c578160001904821115613b6257613b626137da565b80851615613b6f57918102915b93841c9390800290613b46565b509250929050565b600082613b93575060016101fe565b81613ba0575060006101fe565b8160018114613bb65760028114613bc057613bdc565b60019150506101fe565b60ff841115613bd157613bd16137da565b50506001821b6101fe565b5060208310610133831016604e8410600b8410161715613bff575081810a6101fe565b613c098383613b41565b8060001904821115613c1d57613c1d6137da565b029392505050565b60006112978383613b8456fea164736f6c634300080a000a", + "sourceMap": "633:14538:172:-:0;;;699:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;737:3;:10;;-1:-1:-1;;;;;;737:10:172;-1:-1:-1;;;;;737:10:172;;;;;;;;;;633:14538;;14:312:486;106:6;159:2;147:9;138:7;134:23;130:32;127:52;;;175:1;172;165:12;127:52;201:16;;-1:-1:-1;;;;;246:31:486;;236:42;;226:70;;292:1;289;282:12;226:70;315:5;14:312;-1:-1:-1;;;14:312:486:o;:::-;633:14538:172;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637e70aa49116100715780637e70aa49146101315780638260a696146101515780639cf1fd5314610164578063bdfc183914610185578063d1040bae14610198578063de858c63146101ab57600080fd5b80630d9d7fdc146100ae57806312edb24c146100d45780633610c407146100e95780634f471e6d1461010b5780637d3cab4c1461011e575b600080fd5b6100c16100bc366004612d63565b6101d6565b6040519081526020015b60405180910390f35b6100dc610204565b6040516100cb9190612dd3565b6100fc6100f7366004612de6565b610630565b6040516100cb93929190612e4f565b6100fc610119366004612f05565b6108ee565b6100c161012c366004613095565b610ce9565b61014461013f366004613174565b611149565b6040516100cb919061320d565b6100fc61015f3660046133c6565b61129e565b6101776101723660046134b4565b61165d565b6040516100cb9291906134d1565b6100c1610193366004612de6565b61171c565b6101446101a63660046134b4565b611c28565b6000546101be906001600160a01b031681565b6040516001600160a01b0390911681526020016100cb565b60408051600080825260208201818152828401909352916101f985858484610ce9565b925050505b92915050565b60008054604080516323b020d560e21b81529051606093926001600160a01b031691638ec0835491600480830192869291908290030181865afa15801561024f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610277919081019061367b565b915060009050805b825181101561033857600083828151811061029c5761029c613736565b60200260200101516040015190506000816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610312919081019061374c565b905080518461032191906137f0565b93505050808061033090613808565b91505061027f565b506000816001600160401b0381111561035357610353612f99565b60405190808252806020026020018201604052801561037c578160200160208202803683370190505b5090506000805b84518110156105825760008582815181106103a0576103a0613736565b60200260200101516040015190506000816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610416919081019061374c565b905060005b815181101561056c57600082828151811061043857610438613736565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a19190613823565b90506001600160a01b0381166104b7575061056c565b6000805b8851811015610512578881815181106104d6576104d6613736565b60200260200101516001600160a01b0316836001600160a01b031614156105005760019150610512565b8061050a81613808565b9150506104bb565b50806105575781888861052481613808565b99508151811061053657610536613736565b60200260200101906001600160a01b031690816001600160a01b0316815250505b5050808061056490613808565b91505061041b565b505050808061057a90613808565b915050610383565b50806001600160401b0381111561059b5761059b612f99565b6040519080825280602002602001820160405280156105c4578160200160208202803683370190505b50945060005b81811015610628578281815181106105e4576105e4613736565b60200260200101518682815181106105fe576105fe613736565b6001600160a01b03909216602092830291909101909101528061062081613808565b9150506105ca565b505050505090565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610675573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261069d9190810190613840565b9050600081516001600160401b038111156106ba576106ba612f99565b6040519080825280602002602001820160405280156106e3578160200160208202803683370190505b5090506000866001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015610726573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261074e919081019061374c565b9050600081516001600160401b0381111561076b5761076b612f99565b604051908082528060200260200182016040528015610794578160200160208202803683370190505b509050600082516001600160401b038111156107b2576107b2612f99565b6040519080825280602002602001820160405280156107db578160200160208202803683370190505b50905060005b835181101561086c578381815181106107fc576107fc613736565b602002602001015183828151811061081657610816613736565b60200260200101906001600160a01b031690816001600160a01b031681525050600182828151811061084a5761084a613736565b911515602092830291909101909101528061086481613808565b9150506107e1565b5060005b85518110156108cf5785818151811061088b5761088b613736565b60200260200101518582815181106108a5576108a5613736565b6001600160a01b0390921660209283029190910190910152806108c781613808565b915050610870565b506108dc8a85848461129e565b97509750975050505050509250925092565b6060808085806001600160401b0381111561090b5761090b612f99565b604051908082528060200260200182016040528015610934578160200160208202803683370190505b509150806001600160401b0381111561094f5761094f612f99565b604051908082528060200260200182016040528015610978578160200160208202803683370190505b50925060005b81811015610c9957600087878381811061099a5761099a613736565b90506020020160208101906109af91906138ce565b15610a58578989838181106109c6576109c6613736565b90506020020160208101906109db91906134b4565b604051632e6f912b60e21b81526001600160a01b038d811660048301528e81166024830152919091169063b9be44ac906044016020604051808303816000875af1158015610a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5191906138e9565b9050610af0565b898983818110610a6a57610a6a613736565b9050602002016020810190610a7f91906134b4565b604051630ff6b5a760e31b81526001600160a01b038e811660048301529190911690637fb5ad38906024016020604051808303816000875af1158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed91906138e9565b90505b80848381518110610b0357610b03613736565b60200260200101511015610b175780610b32565b838281518110610b2957610b29613736565b60200260200101515b848381518110610b4457610b44613736565b602002602001018181525050898983818110610b6257610b62613736565b9050602002016020810190610b7791906134b4565b604051633bd73ee360e21b81526001600160a01b038e81166004830152919091169063ef5cfb8c90602401600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b50505050898983818110610be657610be6613736565b9050602002016020810190610bfb91906134b4565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5c9190613823565b858381518110610c6e57610c6e613736565b6001600160a01b03909216602092830291909101909101525080610c9181613808565b91505061097e565b5087878484838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929a5093985091965050505050505096509650969350505050565b6040805160a0810182526000808252602082018190529181018290526060808201526080810182905260008060009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8e919081019061367b565b91505060005b8151811015611107576000828281518110610db157610db1613736565b6020026020010151604001519050806001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e219190613823565b84604001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ea49190810190613840565b606085015260005b8460600151518110156110f2576000805b8951811015610f455786606001518381518110610edc57610edc613736565b60200260200101516001600160a01b03168a8281518110610eff57610eff613736565b60200260200101516001600160a01b03161415610f3357888181518110610f2857610f28613736565b602002602001015191505b80610f3d81613808565b915050610ebd565b50670de0b6b3a764000086604001516001600160a01b031663fc57d4df88606001518581518110610f7857610f78613736565b60200260200101516040518263ffffffff1660e01b8152600401610fab91906001600160a01b0391909116815260200190565b602060405180830381865afa158015610fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fec91906138e9565b8760600151848151811061100257611002613736565b6020908102919091010151604051633af9e66960e01b81526001600160a01b038f8116600483015290911690633af9e66990602401602060405180830381865afa158015611054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107891906138e9565b6110829190613902565b61108c9190613937565b8651879061109b908390613965565b905250606086015180516110ca918d91859081106110bb576110bb613736565b6020026020010151838d611c9e565b866020018181516110db9190613965565b9052508190506110ea81613808565b915050610eac565b505080806110ff90613808565b915050610d94565b50815161111957600092505050611141565b8151602083015161113290670de0b6b3a76400006139a6565b61113c9190613937565b925050505b949350505050565b60606000805b835181101561128c57600084828151811061116c5761116c613736565b6020026020010151905060006001600160a01b0316836001600160a01b031614156111fa57806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f39190613823565b9250611279565b826001600160a01b0316816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190613823565b6001600160a01b03161461127957600080fd5b508061128481613808565b91505061114f565b506112978382611ea8565b9392505050565b606080606084516001600160401b038111156112bc576112bc612f99565b6040519080825280602002602001820160405280156112e5578160200160208202803683370190505b50905084516001600160401b0381111561130157611301612f99565b60405190808252806020026020018201604052801561132a578160200160208202803683370190505b50915060005b85518110156116505760005b875181101561151f57600088828151811061135957611359613736565b60200260200101519050600087848151811061137757611377613736565b60200260200101511561141d5788848151811061139657611396613736565b6020908102919091010151604051632e6f912b60e21b81526001600160a01b0384811660048301528d811660248301529091169063b9be44ac906044016020604051808303816000875af11580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141691906138e9565b90506114aa565b88848151811061142f5761142f613736565b6020908102919091010151604051630ff6b5a760e31b81526001600160a01b038d8116600483015290911690637fb5ad38906024016020604051808303816000875af1158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a791906138e9565b90505b808585815181106114bd576114bd613736565b602002602001015110156114d157806114ec565b8484815181106114e3576114e3613736565b60200260200101515b8585815181106114fe576114fe613736565b6020026020010181815250505050808061151790613808565b91505061133c565b5085818151811061153257611532613736565b6020908102919091010151604051633bd73ee360e21b81526001600160a01b038a811660048301529091169063ef5cfb8c90602401600060405180830381600087803b15801561158157600080fd5b505af1158015611595573d6000803e3d6000fd5b505050508581815181106115ab576115ab613736565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116149190613823565b83828151811061162657611626613736565b6001600160a01b03909216602092830291909101909101528061164881613808565b915050611330565b5093969095509293505050565b606080600061166a610204565b9050600081516001600160401b0381111561168757611687612f99565b6040519080825280602002602001820160405280156116b0578160200160208202803683370190505b50905060005b8251811015611711576116e2868483815181106116d5576116d5613736565b602002602001015161171c565b8282815181106116f4576116f4613736565b60209081029190910101528061170981613808565b9150506116b6565b509094909350915050565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918416906370a0823190602401602060405180830381865afa158015611767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178b91906138e9565b905060008060009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa1580156117e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611809919081019061367b565b91505060005b8151811015611ba357600082828151811061182c5761182c613736565b602002602001015160400151905060606000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561187c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118a49190810190613840565b905080516001600160401b038111156118bf576118bf612f99565b6040519080825280602002602001820160405280156118e8578160200160208202803683370190505b50915060005b815181101561194d5781818151811061190957611909613736565b602002602001015183828151811061192357611923613736565b6001600160a01b03909216602092830291909101909101528061194581613808565b9150506118ee565b50506000826001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa15801561198f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119b7919081019061374c565b905060005b8151811015611b8c5760008282815181106119d9576119d9613736565b60200260200101519050896001600160a01b0316816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190613823565b6001600160a01b03161415611b795760005b8451811015611b1c57816001600160a01b031663b9be44ac868381518110611a8b57611a8b613736565b60200260200101518e6040518363ffffffff1660e01b8152600401611ac69291906001600160a01b0392831681529116602082015260400190565b6020604051808303816000875af1158015611ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0991906138e9565b5080611b1481613808565b915050611a61565b50604051633bd73ee360e21b81526001600160a01b038c8116600483015282169063ef5cfb8c90602401600060405180830381600087803b158015611b6057600080fd5b505af1158015611b74573d6000803e3d6000fd5b505050505b5080611b8481613808565b9150506119bc565b505050508080611b9b90613808565b91505061180f565b506040516370a0823160e01b81526001600160a01b038681166004830152600091908616906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1291906138e9565b9050611c1e8382613a2b565b9695505050505050565b60606000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c929190810190613840565b90506112978184611ea8565b600080846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d039190613823565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d699190613823565b9050600085611d7989898861266b565b611d8289612746565b611d8c9190613965565b611d969190613965565b60405163fc57d4df60e01b81526001600160a01b0389811660048301529192506ec097ce7bc90715b34b9f10000000009184169063fc57d4df90602401602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1491906138e9565b604051633af9e66960e01b81526001600160a01b038b811660048301528a1690633af9e66990602401602060405180830381865afa158015611e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7e91906138e9565b611e8890846139a6565b611e9291906139a6565b611e9c9190613937565b98975050505050505050565b60606001600160a01b0382161580611ebf57508251155b15611f11576040805160008082526020820190925290611f09565b60408051606080820183526000808352602083015291810191909152815260200190600190039081611eda5790505b5090506101fe565b6000826001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f79919081019061374c565b9050600081516001600160401b03811115611f9657611f96612f99565b604051908082528060200260200182016040528015611fbf578160200160208202803683370190505b509050600082516001600160401b03811115611fdd57611fdd612f99565b604051908082528060200260200182016040528015612006578160200160208202803683370190505b509050600083516001600160401b0381111561202457612024612f99565b60405190808252806020026020018201604052801561204d578160200160208202803683370190505b5090506000866001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190613823565b9050600088516001600160401b038111156120d1576120d1612f99565b60405190808252806020026020018201604052801561211e57816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816120ef5790505b50905060005b895181101561265e57600087516001600160401b0381111561214857612148612f99565b6040519080825280602002602001820160405280156121bd57816020015b6121aa6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152602001906001900390816121665790505b50905060008b83815181106121d4576121d4613736565b602002602001015190506000856001600160a01b031663aea91078836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122519190613823565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b991906138e9565b90508361248c5760005b8a5181101561248a5760008b82815181106122e0576122e0613736565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123499190613823565b9050808b838151811061235e5761235e613736565b6001600160a01b0392831660209182029290920101526040516315d5220f60e31b815282821660048201529089169063aea9107890602401602060405180830381865afa1580156123b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d791906138e9565b8a83815181106123e9576123e9613736565b602002602001018181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124579190613a42565b60ff1689838151811061246c5761246c613736565b6020908102919091010152508061248281613808565b9150506122c3565b505b60005b8a518110156126065760008b82815181106124ac576124ac613736565b6020026020010151905060006124dc82868c86815181106124cf576124cf613736565b6020026020010151612ad2565b90506000612566828d86815181106124f6576124f6613736565b602002602001015187896001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256191906138e9565b612c8e565b90506040518060a001604052808381526020018d868151811061258b5761258b613736565b60200260200101518152602001828152602001846001600160a01b031681526020018e86815181106125bf576125bf613736565b60200260200101516001600160a01b03168152508785815181106125e5576125e5613736565b602002602001018190525050505080806125fe90613808565b91505061248f565b506040518060600160405280828152602001836001600160a01b031681526020018481525085858151811061263d5761263d613736565b6020026020010181905250505050808061265690613808565b915050612124565b5098975050505050505050565b600081836001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d091906138e9565b846001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273291906138e9565b61273c9190613a65565b61114191906139a6565b600080826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ab9190613823565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128119190613823565b60405163fc57d4df60e01b81526001600160a01b03868116600483015291925060009183169063fc57d4df90602401602060405180830381865afa15801561285d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288191906138e9565b90506000836001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa1580156128c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128eb919081019061374c565b905060005b8151811015612ac857600082828151811061290d5761290d613736565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297b9190613823565b905060006129ee838b846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e69190613a42565b60ff16612ad2565b6040516315d5220f60e31b81526001600160a01b038481166004830152919250600091612aa39184918b169063aea9107890602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6491906138e9565b898e6001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d6000803e3d6000fd5b9050612aaf818b613965565b9950505050508080612ac090613808565b9150506128f0565b5050505050919050565b60405163dde684a560e01b81526001600160a01b03808416600483015260009184918391829188169063dde684a59060240160408051808303816000875af1158015612b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b469190613aa4565b604051632e6f912b60e21b81526001600160a01b038681166004830152600060248301529294509092509088169063b9be44ac906044016020604051808303816000875af1158015612b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc091906138e9565b5060405163dde684a560e01b81526001600160a01b03848116600483015260009182918a169063dde684a59060240160408051808303816000875af1158015612c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c319190613aa4565b915091508263ffffffff168163ffffffff161115612c8257612c538382613ae8565b63ffffffff16612c75612c668685613b0d565b6001600160e01b031689612cfb565b612c7f9190613b2d565b95505b50505050509392505050565b600084612c9d57506000611141565b6000612ca98587613902565b90506000612cbb826301e187e0613902565b90506000612cc98683613b2d565b90506000612cdf82670de0b6b3a7640000613902565b90506000612ced8783613b2d565b9a9950505050505050505050565b60006012821115612d2b57612d11601283613a2b565b612d1c90600a613c25565b612d269084613b2d565b611297565b612d36826012613a2b565b612d4190600a613c25565b6112979084613902565b6001600160a01b0381168114612d6057600080fd5b50565b60008060408385031215612d7657600080fd5b8235612d8181612d4b565b946020939093013593505050565b600081518084526020808501945080840160005b83811015612dc85781516001600160a01b031687529582019590820190600101612da3565b509495945050505050565b6020815260006112976020830184612d8f565b60008060408385031215612df957600080fd5b8235612e0481612d4b565b91506020830135612e1481612d4b565b809150509250929050565b600081518084526020808501945080840160005b83811015612dc857815187529582019590820190600101612e33565b606080825284519082018190526000906020906080840190828801845b82811015612e915781516001600160a01b031684529284019290840190600101612e6c565b50505083810382850152612ea58187612d8f565b9150508281036040840152611c1e8185612e1f565b60008083601f840112612ecc57600080fd5b5081356001600160401b03811115612ee357600080fd5b6020830191508360208260051b8501011115612efe57600080fd5b9250929050565b60008060008060008060808789031215612f1e57600080fd5b8635612f2981612d4b565b95506020870135612f3981612d4b565b945060408701356001600160401b0380821115612f5557600080fd5b612f618a838b01612eba565b90965094506060890135915080821115612f7a57600080fd5b50612f8789828a01612eba565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715612fd157612fd1612f99565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612fff57612fff612f99565b604052919050565b60006001600160401b0382111561302057613020612f99565b5060051b60200190565b600082601f83011261303b57600080fd5b8135602061305061304b83613007565b612fd7565b82815260059290921b8401810191818101908684111561306f57600080fd5b8286015b8481101561308a5780358352918301918301613073565b509695505050505050565b600080600080608085870312156130ab57600080fd5b84356130b681612d4b565b9350602085810135935060408601356001600160401b03808211156130da57600080fd5b818801915088601f8301126130ee57600080fd5b81356130fc61304b82613007565b81815260059190911b8301840190848101908b83111561311b57600080fd5b938501935b8285101561314257843561313381612d4b565b82529385019390850190613120565b96505050606088013592508083111561315a57600080fd5b50506131688782880161302a565b91505092959194509250565b6000602080838503121561318757600080fd5b82356001600160401b0381111561319d57600080fd5b8301601f810185136131ae57600080fd5b80356131bc61304b82613007565b81815260059190911b820183019083810190878311156131db57600080fd5b928401925b828410156132025783356131f381612d4b565b825292840192908401906131e0565b979650505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156132dd57888303603f19018552815180518452878101516001600160a01b03908116898601529087015160608886018190528151818701819052918a019290916080918288019160005b818110156132c5578651805185528e8101518f8601528d8101518e86015286810151841687860152850151831685850152958d019560a090930192600101613282565b505050978a0197955050509187019150600101613234565b509098975050505050505050565b600082601f8301126132fc57600080fd5b8135602061330c61304b83613007565b82815260059290921b8401810191818101908684111561332b57600080fd5b8286015b8481101561308a57803561334281612d4b565b835291830191830161332f565b8035801515811461335f57600080fd5b919050565b600082601f83011261337557600080fd5b8135602061338561304b83613007565b82815260059290921b840181019181810190868411156133a457600080fd5b8286015b8481101561308a576133b98161334f565b83529183019183016133a8565b600080600080608085870312156133dc57600080fd5b84356133e781612d4b565b93506020858101356001600160401b038082111561340457600080fd5b818801915088601f83011261341857600080fd5b813561342661304b82613007565b81815260059190911b8301840190848101908b83111561344557600080fd5b938501935b8285101561346c57843561345d81612d4b565b8252938501939085019061344a565b97505050604088013592508083111561348457600080fd5b61349089848a016132eb565b945060608801359250808311156134a657600080fd5b505061316887828801613364565b6000602082840312156134c657600080fd5b813561129781612d4b565b6040815260006134e46040830185612d8f565b82810360208401526134f68185612e1f565b95945050505050565b805161335f81612d4b565b6000601f838184011261351c57600080fd5b8251602061352c61304b83613007565b82815260059290921b8501810191818101908784111561354b57600080fd5b8287015b8481101561366f5780516001600160401b038082111561356f5760008081fd5b9089019060a0601f19838d03810182131561358a5760008081fd5b613592612faf565b88850151848111156135a45760008081fd5b8501603f81018f136135b65760008081fd5b89810151858111156135ca576135ca612f99565b6135d98b858f84011601612fd7565b9550808652604093508f848284010111156135f45760008081fd5b60005b81811015613612578281018501518782018d01528b016135f7565b818111156136235760008c83890101525b5050508381526136348286016134ff565b89820152606093506136478486016134ff565b918101919091526080848101519382019390935292015190820152835291830191830161354f565b50979650505050505050565b6000806040838503121561368e57600080fd5b82516001600160401b03808211156136a557600080fd5b818501915085601f8301126136b957600080fd5b815160206136c961304b83613007565b82815260059290921b840181019181810190898411156136e857600080fd5b948201945b83861015613706578551825294820194908201906136ed565b9188015191965090935050508082111561371f57600080fd5b5061372c8582860161350a565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000602080838503121561375f57600080fd5b82516001600160401b0381111561377557600080fd5b8301601f8101851361378657600080fd5b805161379461304b82613007565b81815260059190911b820183019083810190878311156137b357600080fd5b928401925b828410156132025783516137cb81612d4b565b825292840192908401906137b8565b634e487b7160e01b600052601160045260246000fd5b60008219821115613803576138036137da565b500190565b600060001982141561381c5761381c6137da565b5060010190565b60006020828403121561383557600080fd5b815161129781612d4b565b6000602080838503121561385357600080fd5b82516001600160401b0381111561386957600080fd5b8301601f8101851361387a57600080fd5b805161388861304b82613007565b81815260059190911b820183019083810190878311156138a757600080fd5b928401925b828410156132025783516138bf81612d4b565b825292840192908401906138ac565b6000602082840312156138e057600080fd5b6112978261334f565b6000602082840312156138fb57600080fd5b5051919050565b600081600019048311821515161561391c5761391c6137da565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261394657613946613921565b600160ff1b821460001984141615613960576139606137da565b500590565b600080821280156001600160ff1b0384900385131615613987576139876137da565b600160ff1b83900384128116156139a0576139a06137da565b50500190565b60006001600160ff1b03818413828413808216868404861116156139cc576139cc6137da565b600160ff1b60008712828116878305891216156139eb576139eb6137da565b60008712925087820587128484161615613a0757613a076137da565b87850587128184161615613a1d57613a1d6137da565b505050929093029392505050565b600082821015613a3d57613a3d6137da565b500390565b600060208284031215613a5457600080fd5b815160ff8116811461129757600080fd5b60008083128015600160ff1b850184121615613a8357613a836137da565b6001600160ff1b0384018313811615613a9e57613a9e6137da565b50500390565b60008060408385031215613ab757600080fd5b82516001600160e01b0381168114613ace57600080fd5b602084015190925063ffffffff81168114612e1457600080fd5b600063ffffffff83811690831681811015613b0557613b056137da565b039392505050565b60006001600160e01b0383811690831681811015613b0557613b056137da565b600082613b3c57613b3c613921565b500490565b600181815b80851115613b7c578160001904821115613b6257613b626137da565b80851615613b6f57918102915b93841c9390800290613b46565b509250929050565b600082613b93575060016101fe565b81613ba0575060006101fe565b8160018114613bb65760028114613bc057613bdc565b60019150506101fe565b60ff841115613bd157613bd16137da565b50506001821b6101fe565b5060208310610133831016604e8410600b8410161715613bff575081810a6101fe565b613c098383613b41565b8060001904821115613c1d57613c1d6137da565b029392505050565b60006112978383613b8456fea164736f6c634300080a000a", + "sourceMap": "633:14538:172:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9080:285;;;;;;:::i;:::-;;:::i;:::-;;;613:25:486;;;601:2;586:18;9080:285:172;;;;;;;;9369:1346;;;:::i;:::-;;;;;;;:::i;13268:875::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;12359:905::-;;;;;;:::i;:::-;;:::i;7804:1272::-;;;;;;:::i;:::-;;:::i;1641:417::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14147:1022::-;;;;;;:::i;:::-;;:::i;10719:442::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;11165:1190::-;;;;;;:::i;:::-;;:::i;1406:231::-;;;;;;:::i;:::-;;:::i;670:24::-;;;;;-1:-1:-1;;;;;670:24:172;;;;;;-1:-1:-1;;;;;15773:32:486;;;15755:51;;15743:2;15728:18;670:24:172;15587:225:486;9080:285:172;9205:16;;;9157:6;9205:16;;;;;;9259:15;;;;;;;;;9157:6;9287:73;9309:4;9315:13;9205:16;;9287:21;:73::i;:::-;9280:80;;;;9080:285;;;;;:::o;9369:1346::-;9466:33;9503:3;;:20;;;-1:-1:-1;;;9503:20:172;;;;9420:35;;9466:33;-1:-1:-1;;;;;9503:3:172;;:18;;:20;;;;;9466:33;;9503:20;;;;;;;:3;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9503:20:172;;;;;;;;;;;;:::i;:::-;9463:60;-1:-1:-1;9530:27:172;;-1:-1:-1;9530:27:172;9563:222;9587:5;:12;9583:1;:16;9563:222;;;9614:21;9655:5;9661:1;9655:8;;;;;;;;:::i;:::-;;;;;;;:20;;;9614:62;;9684:20;9707:4;-1:-1:-1;;;;;9707:27:172;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9707:29:172;;;;;;;;;;;;:::i;:::-;9684:52;;9768:3;:10;9745:33;;;;;:::i;:::-;;;9606:179;;9601:3;;;;;:::i;:::-;;;;9563:222;;;;9791:29;9837:19;-1:-1:-1;;;;;9823:34:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9823:34:172;;9791:66;;9864:33;9912:9;9907:621;9931:5;:12;9927:1;:16;9907:621;;;9958:21;9999:5;10005:1;9999:8;;;;;;;;:::i;:::-;;;;;;;:20;;;9958:62;;10028:20;10051:4;-1:-1:-1;;;;;10051:27:172;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10051:29:172;;;;;;;;;;;;:::i;:::-;10028:52;;10094:9;10089:433;10113:3;:10;10109:1;:14;10089:433;;;10140:15;10184:3;10188:1;10184:6;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;10166:37:172;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10140:66;-1:-1:-1;;;;;;10220:21:172;;10216:32;;10243:5;;;10216:32;10259:10;;10279:162;10303:12;:19;10299:1;:23;10279:162;;;10356:12;10369:1;10356:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;10345:26:172;:7;-1:-1:-1;;;;;10345:26:172;;10341:90;;;10395:4;10387:12;;10413:5;;10341:90;10324:3;;;;:::i;:::-;;;;10279:162;;;;10455:5;10450:63;;10506:7;10462:12;10475:27;;;;:::i;:::-;;;10462:41;;;;;;;;:::i;:::-;;;;;;:51;-1:-1:-1;;;;;10462:51:172;;;-1:-1:-1;;;;;10462:51:172;;;;;10450:63;10130:392;;10125:3;;;;;:::i;:::-;;;;10089:433;;;;9950:578;;9945:3;;;;;:::i;:::-;;;;9907:621;;;;10569:25;-1:-1:-1;;;;;10555:40:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10555:40:172;;10534:61;;10606:9;10601:110;10625:25;10621:1;:29;10601:110;;;10689:12;10702:1;10689:15;;;;;;;;:::i;:::-;;;;;;;10665:18;10684:1;10665:21;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10665:39:172;;;:21;;;;;;;;;;;:39;10652:3;;;;:::i;:::-;;;;10601:110;;;;9457:1258;;;;9369:1346;:::o;13268:875::-;13372:26;13406:16;13430;13461:24;13488:11;-1:-1:-1;;;;;13488:25:172;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13488:27:172;;;;;;;;;;;;:::i;:::-;13461:54;;13521:22;13558:7;:14;-1:-1:-1;;;;;13546:27:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13546:27:172;;13521:52;;13579:34;13616:11;-1:-1:-1;;;;;13616:32:172;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13616:34:172;;;;;;;;;;;;:::i;:::-;13579:71;;13656:36;13719:17;:24;-1:-1:-1;;;;;13695:49:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13695:49:172;;13656:88;;13750:20;13784:17;:24;-1:-1:-1;;;;;13773:36:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13773:36:172;;13750:59;;13821:9;13816:148;13840:17;:24;13836:1;:28;13816:148;;;13912:17;13930:1;13912:20;;;;;;;;:::i;:::-;;;;;;;13879:9;13889:1;13879:12;;;;;;;;:::i;:::-;;;;;;:54;-1:-1:-1;;;;;13879:54:172;;;-1:-1:-1;;;;;13879:54:172;;;;;13953:4;13941:6;13948:1;13941:9;;;;;;;;:::i;:::-;:16;;;:9;;;;;;;;;;;:16;13866:3;;;;:::i;:::-;;;;13816:148;;;;13975:9;13970:99;13994:7;:14;13990:1;:18;13970:99;;;14050:7;14058:1;14050:10;;;;;;;;:::i;:::-;;;;;;;14023:7;14031:1;14023:10;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14023:39:172;;;:10;;;;;;;;;;;:39;14010:3;;;;:::i;:::-;;;;13970:99;;;;14082:56;14105:4;14111:7;14120:9;14131:6;14082:22;:56::i;:::-;14075:63;;;;;;;;;;;13268:875;;;;;:::o;12359:905::-;12535:26;;;12660:9;;-1:-1:-1;;;;;12692:19:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12692:19:172;;12682:29;;12746:4;-1:-1:-1;;;;;12732:19:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12732:19:172;;12717:34;;12763:9;12758:454;12782:4;12778:1;:8;12758:454;;;12801:18;12831:6;;12838:1;12831:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;12827:151;;;12865:9;;12875:1;12865:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:33;;-1:-1:-1;;;12865:33:172;;-1:-1:-1;;;;;23119:15:486;;;12865:33:172;;;23101:34:486;23171:15;;;23151:18;;;23144:43;12865:19:172;;;;;;;23036:18:486;;12865:33:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12852:46;;12827:151;;;12936:9;;12946:1;12936:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:33;;-1:-1:-1;;;12936:33:172;;-1:-1:-1;;;;;15773:32:486;;;12936:33:172;;;15755:51:486;12936:27:172;;;;;;;15728:18:486;;12936:33:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12923:46;;12827:151;13068:10;13054:7;13062:1;13054:10;;;;;;;;:::i;:::-;;;;;;;:24;;:50;;13094:10;13054:50;;;13081:7;13089:1;13081:10;;;;;;;;:::i;:::-;;;;;;;13054:50;13041:7;13049:1;13041:10;;;;;;;;:::i;:::-;;;;;;:63;;;;;13113:9;;13123:1;13113:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:31;;-1:-1:-1;;;13113:31:172;;-1:-1:-1;;;;;15773:32:486;;;13113:31:172;;;15755:51:486;13113:25:172;;;;;;;15728:18:486;;13113:31:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13178:9;;13188:1;13178:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13178:24:172;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13152:12;13165:1;13152:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13152:53:172;;;:15;;;;;;;;;;;:53;-1:-1:-1;12788:3:172;;;;:::i;:::-;;;;12758:454;;;;13226:9;;13237:12;13251:7;13218:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13218:41:172;;-1:-1:-1;13218:41:172;;-1:-1:-1;13218:41:172;;-1:-1:-1;;;;;;;12359:905:172;;;;;;;;;;:::o;7804:1272::-;-1:-1:-1;;;;;;;;7988:6:172;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;8046:33:172;8083:3;;;;;;;;;-1:-1:-1;;;;;8083:3:172;-1:-1:-1;;;;;8083:18:172;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8083:20:172;;;;;;;;;;;;:::i;:::-;8043:60;;;8114:9;8109:839;8133:5;:12;8129:1;:16;8109:839;;;8160:21;8201:5;8207:1;8201:8;;;;;;;;:::i;:::-;;;;;;;:20;;;8160:62;;8244:4;-1:-1:-1;;;;;8244:11:172;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8230:4;:11;;:27;-1:-1:-1;;;;;8230:27:172;;;-1:-1:-1;;;;;8230:27:172;;;;;8280:4;-1:-1:-1;;;;;8280:18:172;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8280:20:172;;;;;;;;;;;;:::i;:::-;8265:12;;;:35;8313:9;8308:634;8332:4;:12;;;:19;8328:1;:23;8308:634;;;8368:25;8412:9;8407:191;8431:25;:32;8427:1;:36;8407:191;;;8526:4;:12;;;8539:1;8526:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8486:56:172;:25;8512:1;8486:28;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8486:56:172;;8482:105;;;8565:19;8585:1;8565:22;;;;;;;;:::i;:::-;;;;;;;8544:43;;8482:105;8465:3;;;;:::i;:::-;;;;8407:191;;;;8756:4;8695;:11;;;-1:-1:-1;;;;;8695:30:172;;8726:4;:12;;;8739:1;8726:15;;;;;;;;:::i;:::-;;;;;;;8695:47;;;;;;;;;;;;;;-1:-1:-1;;;;;15773:32:486;;;;15755:51;;15743:2;15728:18;;15587:225;8695:47:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8651:4;:12;;;8664:1;8651:15;;;;;;;;:::i;:::-;;;;;;;;;;;:41;;-1:-1:-1;;;8651:41:172;;-1:-1:-1;;;;;15773:32:486;;;8651:41:172;;;15755:51:486;8651:35:172;;;;;;15728:18:486;;8651:41:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:91;;;;:::i;:::-;8644:116;;;;:::i;:::-;8607:153;;:4;;:153;;;;;:::i;:::-;;;-1:-1:-1;8853:12:172;;;;:15;;8796:137;;8837:4;;8866:1;;8853:15;;;;;;:::i;:::-;;;;;;;8880:18;8910:13;8796:29;:137::i;:::-;8770:4;:22;;:163;;;;;;;:::i;:::-;;;-1:-1:-1;8353:3:172;;-1:-1:-1;8353:3:172;;;:::i;:::-;;;;8308:634;;;;8152:796;8147:3;;;;;:::i;:::-;;;;8109:839;;;-1:-1:-1;8958:23:172;;8954:117;;8995:1;8988:8;;;;;;8954:117;9048:23;;9015:22;;;;:29;;9040:4;9015:29;:::i;:::-;9014:57;;;;:::i;:::-;9007:64;;;;7804:1272;;;;;;;:::o;1641:417::-;1715:26;1749:21;;1776:229;1800:7;:14;1796:1;:18;1776:229;;;1829:16;1864:7;1872:1;1864:10;;;;;;;;:::i;:::-;;;;;;;1829:47;;1913:1;-1:-1:-1;;;;;1888:27:172;1896:4;-1:-1:-1;;;;;1888:27:172;;1884:114;;;1924:8;-1:-1:-1;;;;;1924:20:172;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1917:29;;1884:114;;;1993:4;-1:-1:-1;;;;;1967:30:172;:8;-1:-1:-1;;;;;1967:20:172;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1967:30:172;;1959:39;;;;;;-1:-1:-1;1816:3:172;;;;:::i;:::-;;;;1776:229;;;;2017:36;2039:7;2048:4;2017:21;:36::i;:::-;2010:43;1641:417;-1:-1:-1;;;1641:417:172:o;14147:1022::-;14328:26;14362:29;14399:24;14462:9;:16;-1:-1:-1;;;;;14448:31:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14448:31:172;;14438:41;;14514:9;:16;-1:-1:-1;;;;;14500:31:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14500:31:172;;14485:46;;14543:9;14538:579;14562:9;:16;14558:1;:20;14538:579;;;14598:9;14593:417;14617:7;:14;14613:1;:18;14593:417;;;14648:12;14663:7;14671:1;14663:10;;;;;;;;:::i;:::-;;;;;;;14648:25;;14684:18;14716:6;14723:1;14716:9;;;;;;;;:::i;:::-;;;;;;;14712:159;;;14752:9;14762:1;14752:12;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;-1:-1:-1;;;14752:33:172;;-1:-1:-1;;;;;23119:15:486;;;14752:33:172;;;23101:34:486;23171:15;;;23151:18;;;23144:43;14752:19:172;;;;;;23036:18:486;;14752:33:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14739:46;;14712:159;;;14827:9;14837:1;14827:12;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;-1:-1:-1;;;14827:33:172;;-1:-1:-1;;;;;15773:32:486;;;14827:33:172;;;15755:51:486;14827:27:172;;;;;;15728:18:486;;14827:33:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14814:46;;14712:159;14965:10;14951:7;14959:1;14951:10;;;;;;;;:::i;:::-;;;;;;;:24;;:50;;14991:10;14951:50;;;14978:7;14986:1;14978:10;;;;;;;;:::i;:::-;;;;;;;14951:50;14938:7;14946:1;14938:10;;;;;;;;:::i;:::-;;;;;;:63;;;;;14638:372;;14633:3;;;;;:::i;:::-;;;;14593:417;;;;15018:9;15028:1;15018:12;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;-1:-1:-1;;;15018:31:172;;-1:-1:-1;;;;;15773:32:486;;;15018:31:172;;;15755:51:486;15018:25:172;;;;;;15728:18:486;;15018:31:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15083:9;15093:1;15083:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15083:24:172;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15057:12;15070:1;15057:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15057:53:172;;;:15;;;;;;;;;;;:53;14580:3;;;;:::i;:::-;;;;14538:579;;;-1:-1:-1;15131:9:172;;14147:1022;;-1:-1:-1;14147:1022:172;;-1:-1:-1;;;14147:1022:172:o;10719:442::-;10781:16;10799;10823:29;10855:20;:18;:20::i;:::-;10823:52;;10881:39;10937:12;:19;-1:-1:-1;;;;;10923:34:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10923:34:172;;10881:76;;10969:9;10964:141;10988:12;:19;10984:1;:23;10964:141;;;11050:48;11076:4;11082:12;11095:1;11082:15;;;;;;;;:::i;:::-;;;;;;;11050:25;:48::i;:::-;11022:22;11045:1;11022:25;;;;;;;;:::i;:::-;;;;;;;;;;:76;11009:3;;;;:::i;:::-;;;;10964:141;;;-1:-1:-1;11119:12:172;;11133:22;;-1:-1:-1;10719:442:172;-1:-1:-1;;10719:442:172:o;11165:1190::-;11305:34;;-1:-1:-1;;;11305:34:172;;-1:-1:-1;;;;;15773:32:486;;;11305:34:172;;;15755:51:486;11251:22:172;;;;11305:28;;;;;15728:18:486;;11305:34:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11281:58;;11348:33;11385:3;;;;;;;;;-1:-1:-1;;;;;11385:3:172;-1:-1:-1;;;;;11385:18:172;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11385:20:172;;;;;;;;;;;;:::i;:::-;11345:60;;;11416:9;11411:835;11435:5;:12;11431:1;:16;11411:835;;;11462:21;11503:5;11509:1;11503:8;;;;;;;;:::i;:::-;;;;;;;:20;;;11462:62;;11532:22;11572:24;11599:4;-1:-1:-1;;;;;11599:18:172;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11599:20:172;;;;;;;;;;;;:::i;:::-;11572:47;;11651:7;:14;-1:-1:-1;;;;;11639:27:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11639:27:172;;11629:37;;11681:9;11676:107;11700:7;:14;11696:1;:18;11676:107;;;11760:7;11768:1;11760:10;;;;;;;;:::i;:::-;;;;;;;11733:7;11741:1;11733:10;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11733:39:172;;;:10;;;;;;;;;;;:39;11716:3;;;;:::i;:::-;;;;11676:107;;;;11562:229;11799:34;11836:4;-1:-1:-1;;;;;11836:25:172;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11836:27:172;;;;;;;;;;;;:::i;:::-;11799:64;;11876:9;11871:369;11895:17;:24;11891:1;:28;11871:369;;;11936:26;11983:17;12001:1;11983:20;;;;;;;;:::i;:::-;;;;;;;11936:68;;12053:11;-1:-1:-1;;;;;12018:46:172;12026:8;-1:-1:-1;;;;;12026:20:172;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12018:46:172;;12014:218;;;12083:9;12078:105;12102:7;:14;12098:1;:18;12078:105;;;12137:8;-1:-1:-1;;;;;12137:15:172;;12153:7;12161:1;12153:10;;;;;;;;:::i;:::-;;;;;;;12165:4;12137:33;;;;;;;;;;;;;;;-1:-1:-1;;;;;23119:15:486;;;23101:34;;23171:15;;23166:2;23151:18;;23144:43;23051:2;23036:18;;22873:320;12137:33:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12118:3:172;;;;:::i;:::-;;;;12078:105;;;-1:-1:-1;12194:27:172;;-1:-1:-1;;;12194:27:172;;-1:-1:-1;;;;;15773:32:486;;;12194:27:172;;;15755:51:486;12194:21:172;;;;;15728:18:486;;12194:27:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12014:218;-1:-1:-1;11921:3:172;;;;:::i;:::-;;;;11871:369;;;;11454:792;;;11449:3;;;;;:::i;:::-;;;;11411:835;;;-1:-1:-1;12275:34:172;;-1:-1:-1;;;12275:34:172;;-1:-1:-1;;;;;15773:32:486;;;12275:34:172;;;15755:51:486;12252:20:172;;12275:28;;;;;;15728:18:486;;12275:34:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12252:57;-1:-1:-1;12322:28:172;12337:13;12252:57;12322:28;:::i;:::-;12315:35;11165:1190;-1:-1:-1;;;;;;11165:1190:172:o;1406:231::-;1488:26;1522:24;1549:11;-1:-1:-1;;;;;1549:25:172;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1549:27:172;;;;;;;;;;;;:::i;:::-;1522:54;;1589:43;1611:7;1620:11;1589:21;:43::i;6856:522::-;7005:6;7019:28;7050:6;-1:-1:-1;;;;;7050:18:172;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7019:51;;7076:22;7101:11;-1:-1:-1;;;;;7101:18:172;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7076:45;;7127:13;7247:11;7182:56;7210:4;7216:6;7224:13;7182:27;:56::i;:::-;7143:30;7166:6;7143:22;:30::i;:::-;:95;;;;:::i;:::-;:115;;;;:::i;:::-;7331:33;;-1:-1:-1;;;7331:33:172;;-1:-1:-1;;;;;15773:32:486;;;7331:33:172;;;15755:51:486;7127:131:172;;-1:-1:-1;7369:4:172;;7331:25;;;;;15728:18:486;;7331:33:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7288:32;;-1:-1:-1;;;7288:32:172;;-1:-1:-1;;;;;15773:32:486;;;7288::172;;;15755:51:486;7288:26:172;;;;;15728:18:486;;7288:32:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7272:49;;:6;:49;:::i;:::-;:93;;;;:::i;:::-;7271:102;;;;:::i;:::-;7264:109;6856:522;-1:-1:-1;;;;;;;;6856:522:172:o;2062:2179::-;2175:26;-1:-1:-1;;;;;2215:34:172;;;;:57;;-1:-1:-1;2253:14:172;;:19;2215:57;2211:96;;;2281:26;;;2305:1;2281:26;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;2281:26:172;;;;;;;;;;;;;;;;2274:33;;;;2211:96;2314:26;2343:11;-1:-1:-1;;;;;2343:32:172;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2343:34:172;;;;;;;;;;;;:::i;:::-;2314:63;;2383:29;2429:9;:16;-1:-1:-1;;;;;2415:31:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2415:31:172;;2383:63;;2452:34;2503:9;:16;-1:-1:-1;;;;;2489:31:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2489:31:172;;2452:68;;2526:36;2579:9;:16;-1:-1:-1;;;;;2565:31:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2565:31:172;;2526:70;;2602:22;2627:11;-1:-1:-1;;;;;2627:18:172;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2602:45;;2654:35;2716:7;:14;-1:-1:-1;;;;;2692:39:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;2692:39:172;;;;;;;;;;;;;;;;2654:77;;2742:9;2737:1478;2761:7;:14;2757:1;:18;2737:1478;;;2790:32;2843:9;:16;-1:-1:-1;;;;;2825:35:172;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2825:35:172;;;;;;;;;;;;;;;;;2790:70;;2869:14;2902:7;2910:1;2902:10;;;;;;;;:::i;:::-;;;;;;;2869:45;;2922:13;2938:6;-1:-1:-1;;;;;2938:12:172;;2951:6;-1:-1:-1;;;;;2951:17:172;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2938:33;;-1:-1:-1;;;;;;2938:33:172;;;;;;;-1:-1:-1;;;;;15773:32:486;;;2938:33:172;;;15755:51:486;15728:18;;2938:33:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2922:49;-1:-1:-1;3002:6:172;2998:370;;3025:9;3020:340;3044:9;:16;3040:1;:20;3020:340;;;3079:17;3117:9;3127:1;3117:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3099:43:172;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3079:65;;3182:11;3156:12;3169:1;3156:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3156:38:172;;;:15;;;;;;;;;:38;3229:34;;-1:-1:-1;;;3229:34:172;;15773:32:486;;;3229:34:172;;;15755:51:486;3229:12:172;;;;;;15728:18:486;;3229:34:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3206:17;3224:1;3206:20;;;;;;;;:::i;:::-;;;;;;:57;;;;;3326:11;-1:-1:-1;;;;;3326:20:172;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3318:31;;3293:19;3313:1;3293:22;;;;;;;;:::i;:::-;;;;;;;;;;:56;-1:-1:-1;3062:3:172;;;;:::i;:::-;;;;3020:340;;;;2998:370;3381:9;3376:723;3400:9;:16;3396:1;:20;3376:723;;;3433:26;3480:9;3490:1;3480:12;;;;;;;;:::i;:::-;;;;;;;3433:60;;3504:36;3543:113;3586:8;3606:6;3624:19;3644:1;3624:22;;;;;;;;:::i;:::-;;;;;;;3543:31;:113::i;:::-;3504:152;;3666:11;3680:95;3687:28;3717:17;3735:1;3717:20;;;;;;;;:::i;:::-;;;;;;;3739:5;3746:6;-1:-1:-1;;;;;3746:26:172;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3680:6;:95::i;:::-;3666:109;;3803:287;;;;;;;;3857:28;3803:287;;;;3933:17;3951:1;3933:20;;;;;;;;:::i;:::-;;;;;;;3803:287;;;;3979:3;3803:287;;;;4030:8;-1:-1:-1;;;;;3803:287:172;;;;;4064:12;4077:1;4064:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3803:287:172;;;;3786:11;3798:1;3786:14;;;;;;;;:::i;:::-;;;;;;:304;;;;3423:676;;;3418:3;;;;;:::i;:::-;;;;3376:723;;;;4121:87;;;;;;;;4200:5;4121:87;;;;4149:6;-1:-1:-1;;;;;4121:87:172;;;;;4170:11;4121:87;;;4107:8;4116:1;4107:11;;;;;;;;:::i;:::-;;;;;;:101;;;;2782:1433;;;2777:3;;;;;:::i;:::-;;;;2737:1478;;;-1:-1:-1;4228:8:172;2062:2179;-1:-1:-1;;;;;;;;2062:2179:172:o;7382:240::-;7505:6;7604:13;7572:6;-1:-1:-1;;;;;7572:25:172;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7534:6;-1:-1:-1;;;;;7534:25:172;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7527:73;;;;:::i;:::-;7526:91;;;;:::i;5930:922::-;5996:28;6032;6063:6;-1:-1:-1;;;;;6063:18:172;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6032:51;;6089:22;6114:11;-1:-1:-1;;;;;6114:18:172;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6166:33;;-1:-1:-1;;;6166:33:172;;-1:-1:-1;;;;;15773:32:486;;;6166:33:172;;;15755:51:486;6089:45:172;;-1:-1:-1;6140:23:172;;6166:25;;;;;15728:18:486;;6166:33:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6140:59;;6206:26;6235:11;-1:-1:-1;;;;;6235:32:172;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6235:34:172;;;;;;;;;;;;:::i;:::-;6206:63;;6280:9;6275:573;6299:9;:16;6295:1;:20;6275:573;;;6330:26;6377:9;6387:1;6377:12;;;;;;;;:::i;:::-;;;;;;;6330:60;;6398:17;6418:8;-1:-1:-1;;;;;6418:20:172;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6398:42;;6449:36;6488:114;6529:8;6547:6;6571:11;-1:-1:-1;;;;;6571:20:172;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6563:31;;6488;:114::i;:::-;6685:34;;-1:-1:-1;;;6685:34:172;;-1:-1:-1;;;;;15773:32:486;;;6685:34:172;;;15755:51:486;6449:153:172;;-1:-1:-1;6611:17:172;;6631:159;;6449:153;;6685:12;;;;;15728:18:486;;6685:34:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6729:15;6754:6;-1:-1:-1;;;;;6754:26:172;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6631:159;6611:179;-1:-1:-1;6799:42:172;6611:179;6799:42;;:::i;:::-;;;6322:526;;;;6317:3;;;;;:::i;:::-;;;;6275:573;;;;6026:826;;;;5930:922;;;:::o;4464:698::-;4749:32;;-1:-1:-1;;;4749:32:172;;-1:-1:-1;;;;;15773:32:486;;;4749::172;;;15755:51:486;4601:36:172;;4676:6;;4601:36;;;;4749:22;;;;;15728:18:486;;4749:32:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4787:37;;-1:-1:-1;;;4787:37:172;;-1:-1:-1;;;;;23119:15:486;;;4787:37:172;;;23101:34:486;4821:1:172;23151:18:486;;;23144:43;4690:91:172;;-1:-1:-1;4690:91:172;;-1:-1:-1;4787:15:172;;;;;;23036:18:486;;4787:37:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4887:32:172;;-1:-1:-1;;;4887:32:172;;-1:-1:-1;;;;;15773:32:486;;;4887::172;;;15755:51:486;4831:18:172;;;;4887:22;;;;;15728:18:486;;4887:32:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4830:89;;;;4957:26;4929:54;;:25;:54;;;4925:233;;;5096:54;5124:26;5096:25;:54;:::i;:::-;5032:119;;:52;5048:24;5061:11;5048:10;:24;:::i;:::-;-1:-1:-1;;;;;5032:52:172;5075:8;5032:14;:52::i;:::-;:119;;;;:::i;:::-;4993:158;;4925:233;4639:523;;;;;4464:698;;;;;:::o;5166:760::-;5336:7;5355:33;5351:47;;-1:-1:-1;5397:1:172;5390:8;;5351:47;5404:37;5444:47;5475:16;5444:28;:47;:::i;:::-;5404:87;-1:-1:-1;5515:35:172;5553:43;5404:87;5585:11;5553:43;:::i;:::-;5515:81;-1:-1:-1;5620:34:172;5657:45;5687:15;5515:81;5657:45;:::i;:::-;5620:82;-1:-1:-1;5726:40:172;5769:33;5620:82;5798:4;5769:33;:::i;:::-;5726:76;-1:-1:-1;5826:11:172;5840:47;5875:12;5726:76;5840:47;:::i;:::-;5826:61;5166:760;-1:-1:-1;;;;;;;;;;5166:760:172:o;4245:215::-;4329:7;4363:2;4351:8;:14;;:104;;4440:13;4451:2;4440:8;:13;:::i;:::-;4435:19;;:2;:19;:::i;:::-;4413:42;;4421:9;4413:42;:::i;:::-;4351:104;;;4395:13;4400:8;4395:2;:13;:::i;:::-;4390:19;;:2;:19;:::i;:::-;4368:42;;4376:9;4368:42;:::i;14:131:486:-;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:314::-;217:6;225;278:2;266:9;257:7;253:23;249:32;246:52;;;294:1;291;284:12;246:52;333:9;320:23;352:31;377:5;352:31;:::i;:::-;402:5;454:2;439:18;;;;426:32;;-1:-1:-1;;;150:314:486:o;649:461::-;702:3;740:5;734:12;767:6;762:3;755:19;793:4;822:2;817:3;813:12;806:19;;859:2;852:5;848:14;880:1;890:195;904:6;901:1;898:13;890:195;;;969:13;;-1:-1:-1;;;;;965:39:486;953:52;;1025:12;;;;1060:15;;;;1001:1;919:9;890:195;;;-1:-1:-1;1101:3:486;;649:461;-1:-1:-1;;;;;649:461:486:o;1115:261::-;1294:2;1283:9;1276:21;1257:4;1314:56;1366:2;1355:9;1351:18;1343:6;1314:56;:::i;1381:414::-;1475:6;1483;1536:2;1524:9;1515:7;1511:23;1507:32;1504:52;;;1552:1;1549;1542:12;1504:52;1591:9;1578:23;1610:31;1635:5;1610:31;:::i;:::-;1660:5;-1:-1:-1;1717:2:486;1702:18;;1689:32;1730:33;1689:32;1730:33;:::i;:::-;1782:7;1772:17;;;1381:414;;;;;:::o;1800:435::-;1853:3;1891:5;1885:12;1918:6;1913:3;1906:19;1944:4;1973:2;1968:3;1964:12;1957:19;;2010:2;2003:5;1999:14;2031:1;2041:169;2055:6;2052:1;2049:13;2041:169;;;2116:13;;2104:26;;2150:12;;;;2185:15;;;;2077:1;2070:9;2041:169;;2240:1064;2613:2;2625:21;;;2695:13;;2598:18;;;2717:22;;;2565:4;;2793;;2770:3;2755:19;;;2820:15;;;2565:4;2863:195;2877:6;2874:1;2871:13;2863:195;;;2942:13;;-1:-1:-1;;;;;2938:39:486;2926:52;;2998:12;;;;3033:15;;;;2974:1;2892:9;2863:195;;;2867:3;;;3103:9;3098:3;3094:19;3089:2;3078:9;3074:18;3067:47;3137:41;3174:3;3166:6;3137:41;:::i;:::-;3123:55;;;3226:9;3218:6;3214:22;3209:2;3198:9;3194:18;3187:50;3254:44;3291:6;3283;3254:44;:::i;3309:386::-;3391:8;3401:6;3455:3;3448:4;3440:6;3436:17;3432:27;3422:55;;3473:1;3470;3463:12;3422:55;-1:-1:-1;3496:20:486;;-1:-1:-1;;;;;3528:30:486;;3525:50;;;3571:1;3568;3561:12;3525:50;3608:4;3600:6;3596:17;3584:29;;3668:3;3661:4;3651:6;3648:1;3644:14;3636:6;3632:27;3628:38;3625:47;3622:67;;;3685:1;3682;3675:12;3622:67;3309:386;;;;;:::o;3700:1128::-;3880:6;3888;3896;3904;3912;3920;3973:3;3961:9;3952:7;3948:23;3944:33;3941:53;;;3990:1;3987;3980:12;3941:53;4029:9;4016:23;4048:31;4073:5;4048:31;:::i;:::-;4098:5;-1:-1:-1;4155:2:486;4140:18;;4127:32;4168:33;4127:32;4168:33;:::i;:::-;4220:7;-1:-1:-1;4278:2:486;4263:18;;4250:32;-1:-1:-1;;;;;4331:14:486;;;4328:34;;;4358:1;4355;4348:12;4328:34;4397:89;4478:7;4469:6;4458:9;4454:22;4397:89;:::i;:::-;4505:8;;-1:-1:-1;4371:115:486;-1:-1:-1;4593:2:486;4578:18;;4565:32;;-1:-1:-1;4609:16:486;;;4606:36;;;4638:1;4635;4628:12;4606:36;;4677:91;4760:7;4749:8;4738:9;4734:24;4677:91;:::i;:::-;3700:1128;;;;-1:-1:-1;3700:1128:486;;-1:-1:-1;3700:1128:486;;4787:8;;3700:1128;-1:-1:-1;;;3700:1128:486:o;4833:127::-;4894:10;4889:3;4885:20;4882:1;4875:31;4925:4;4922:1;4915:15;4949:4;4946:1;4939:15;4965:253;5037:2;5031:9;5079:4;5067:17;;-1:-1:-1;;;;;5099:34:486;;5135:22;;;5096:62;5093:88;;;5161:18;;:::i;:::-;5197:2;5190:22;4965:253;:::o;5223:275::-;5294:2;5288:9;5359:2;5340:13;;-1:-1:-1;;5336:27:486;5324:40;;-1:-1:-1;;;;;5379:34:486;;5415:22;;;5376:62;5373:88;;;5441:18;;:::i;:::-;5477:2;5470:22;5223:275;;-1:-1:-1;5223:275:486:o;5503:183::-;5563:4;-1:-1:-1;;;;;5588:6:486;5585:30;5582:56;;;5618:18;;:::i;:::-;-1:-1:-1;5663:1:486;5659:14;5675:4;5655:25;;5503:183::o;5691:661::-;5744:5;5797:3;5790:4;5782:6;5778:17;5774:27;5764:55;;5815:1;5812;5805:12;5764:55;5851:6;5838:20;5877:4;5901:60;5917:43;5957:2;5917:43;:::i;:::-;5901:60;:::i;:::-;5995:15;;;6081:1;6077:10;;;;6065:23;;6061:32;;;6026:12;;;;6105:15;;;6102:35;;;6133:1;6130;6123:12;6102:35;6169:2;6161:6;6157:15;6181:142;6197:6;6192:3;6189:15;6181:142;;;6263:17;;6251:30;;6301:12;;;;6214;;6181:142;;;-1:-1:-1;6341:5:486;5691:661;-1:-1:-1;;;;;;5691:661:486:o;6357:1420::-;6491:6;6499;6507;6515;6568:3;6556:9;6547:7;6543:23;6539:33;6536:53;;;6585:1;6582;6575:12;6536:53;6624:9;6611:23;6643:31;6668:5;6643:31;:::i;:::-;6693:5;-1:-1:-1;6717:2:486;6751:18;;;6738:32;;-1:-1:-1;6821:2:486;6806:18;;6793:32;-1:-1:-1;;;;;6874:14:486;;;6871:34;;;6901:1;6898;6891:12;6871:34;6939:6;6928:9;6924:22;6914:32;;6984:7;6977:4;6973:2;6969:13;6965:27;6955:55;;7006:1;7003;6996:12;6955:55;7042:2;7029:16;7065:60;7081:43;7121:2;7081:43;:::i;7065:60::-;7159:15;;;7241:1;7237:10;;;;7229:19;;7225:28;;;7190:12;;;;7265:19;;;7262:39;;;7297:1;7294;7287:12;7262:39;7321:11;;;;7341:223;7357:6;7352:3;7349:15;7341:223;;;7439:3;7426:17;7456:33;7481:7;7456:33;:::i;:::-;7502:20;;7374:12;;;;7542;;;;7341:223;;;7583:5;-1:-1:-1;;;7641:2:486;7626:18;;7613:32;;-1:-1:-1;7657:16:486;;;7654:36;;;7686:1;7683;7676:12;7654:36;;;7709:62;7763:7;7752:8;7741:9;7737:24;7709:62;:::i;:::-;7699:72;;;6357:1420;;;;;;;:::o;7782:983::-;7883:6;7914:2;7957;7945:9;7936:7;7932:23;7928:32;7925:52;;;7973:1;7970;7963:12;7925:52;8013:9;8000:23;-1:-1:-1;;;;;8038:6:486;8035:30;8032:50;;;8078:1;8075;8068:12;8032:50;8101:22;;8154:4;8146:13;;8142:27;-1:-1:-1;8132:55:486;;8183:1;8180;8173:12;8132:55;8219:2;8206:16;8242:60;8258:43;8298:2;8258:43;:::i;8242:60::-;8336:15;;;8418:1;8414:10;;;;8406:19;;8402:28;;;8367:12;;;;8442:19;;;8439:39;;;8474:1;8471;8464:12;8439:39;8498:11;;;;8518:217;8534:6;8529:3;8526:15;8518:217;;;8614:3;8601:17;8631:31;8656:5;8631:31;:::i;:::-;8675:18;;8551:12;;;;8713;;;;8518:217;;;8754:5;7782:983;-1:-1:-1;;;;;;;7782:983:486:o;8770:2002::-;8984:4;9013:2;9053;9042:9;9038:18;9083:2;9072:9;9065:21;9106:6;9141;9135:13;9172:6;9164;9157:22;9198:2;9188:12;;9231:2;9220:9;9216:18;9209:25;;9293:2;9283:6;9280:1;9276:14;9265:9;9261:30;9257:39;9331:2;9323:6;9319:15;9352:1;9362:1381;9376:6;9373:1;9370:13;9362:1381;;;9441:22;;;-1:-1:-1;;9437:36:486;9425:49;;9497:13;;9607:9;;9592:25;;9656:11;;;9650:18;-1:-1:-1;;;;;9747:21:486;;;9730:15;;;9723:46;9810:11;;;9804:18;9533:4;9842:15;;;9835:27;;;9923:21;;9564:15;;;9957:24;;;10073:23;;;;9533:4;;10004:3;;10029:15;;;;10120:1;10134:501;10150:8;10145:3;10142:17;10134:501;;;10223:15;;10269:9;;10255:24;;10325:11;;;10319:18;10303:14;;;10296:42;10384:11;;;10378:18;10362:14;;;10355:42;10447:11;;;10441:18;10437:27;;10421:14;;;10414:51;10515:11;;10509:18;10505:27;;10489:14;;;10482:51;10604:17;;;;10570:4;10559:16;;;;10178:1;10169:11;10134:501;;;-1:-1:-1;;;10721:12:486;;;;10658:5;-1:-1:-1;;;10686:15:486;;;;-1:-1:-1;9398:1:486;9391:9;9362:1381;;;-1:-1:-1;10760:6:486;;8770:2002;-1:-1:-1;;;;;;;;8770:2002:486:o;10777:756::-;10850:5;10903:3;10896:4;10888:6;10884:17;10880:27;10870:55;;10921:1;10918;10911:12;10870:55;10957:6;10944:20;10983:4;11007:60;11023:43;11063:2;11023:43;:::i;11007:60::-;11101:15;;;11187:1;11183:10;;;;11171:23;;11167:32;;;11132:12;;;;11211:15;;;11208:35;;;11239:1;11236;11229:12;11208:35;11275:2;11267:6;11263:15;11287:217;11303:6;11298:3;11295:15;11287:217;;;11383:3;11370:17;11400:31;11425:5;11400:31;:::i;:::-;11444:18;;11482:12;;;;11320;;11287:217;;11538:160;11603:20;;11659:13;;11652:21;11642:32;;11632:60;;11688:1;11685;11678:12;11632:60;11538:160;;;:::o;11703:662::-;11754:5;11807:3;11800:4;11792:6;11788:17;11784:27;11774:55;;11825:1;11822;11815:12;11774:55;11861:6;11848:20;11887:4;11911:60;11927:43;11967:2;11927:43;:::i;11911:60::-;12005:15;;;12091:1;12087:10;;;;12075:23;;12071:32;;;12036:12;;;;12115:15;;;12112:35;;;12143:1;12140;12133:12;12112:35;12179:2;12171:6;12167:15;12191:145;12207:6;12202:3;12199:15;12191:145;;;12273:20;12289:3;12273:20;:::i;:::-;12261:33;;12314:12;;;;12224;;12191:145;;12370:1637;12571:6;12579;12587;12595;12648:3;12636:9;12627:7;12623:23;12619:33;12616:53;;;12665:1;12662;12655:12;12616:53;12704:9;12691:23;12723:31;12748:5;12723:31;:::i;:::-;12773:5;-1:-1:-1;12797:2:486;12835:18;;;12822:32;-1:-1:-1;;;;;12903:14:486;;;12900:34;;;12930:1;12927;12920:12;12900:34;12968:6;12957:9;12953:22;12943:32;;13013:7;13006:4;13002:2;12998:13;12994:27;12984:55;;13035:1;13032;13025:12;12984:55;13071:2;13058:16;13094:60;13110:43;13150:2;13110:43;:::i;13094:60::-;13188:15;;;13270:1;13266:10;;;;13258:19;;13254:28;;;13219:12;;;;13294:19;;;13291:39;;;13326:1;13323;13316:12;13291:39;13350:11;;;;13370:223;13386:6;13381:3;13378:15;13370:223;;;13468:3;13455:17;13485:33;13510:7;13485:33;:::i;:::-;13531:20;;13403:12;;;;13571;;;;13370:223;;;13612:5;-1:-1:-1;;;13670:2:486;13655:18;;13642:32;;-1:-1:-1;13686:16:486;;;13683:36;;;13715:1;13712;13705:12;13683:36;13738:82;13812:7;13801:8;13790:9;13786:24;13738:82;:::i;:::-;13728:92;;13873:2;13862:9;13858:18;13845:32;13829:48;;13902:2;13892:8;13889:16;13886:36;;;13918:1;13915;13908:12;13886:36;;;13941:60;13993:7;13982:8;13971:9;13967:24;13941:60;:::i;14012:247::-;14071:6;14124:2;14112:9;14103:7;14099:23;14095:32;14092:52;;;14140:1;14137;14130:12;14092:52;14179:9;14166:23;14198:31;14223:5;14198:31;:::i;14264:465::-;14521:2;14510:9;14503:21;14484:4;14547:56;14599:2;14588:9;14584:18;14576:6;14547:56;:::i;:::-;14651:9;14643:6;14639:22;14634:2;14623:9;14619:18;14612:50;14679:44;14716:6;14708;14679:44;:::i;:::-;14671:52;14264:465;-1:-1:-1;;;;;14264:465:486:o;15817:138::-;15896:13;;15918:31;15896:13;15918:31;:::i;15960:2531::-;16029:5;16059:4;16103:3;16098:2;16090:6;16086:15;16082:25;16072:53;;16121:1;16118;16111:12;16072:53;16150:6;16144:13;16176:4;16200:60;16216:43;16256:2;16216:43;:::i;16200:60::-;16294:15;;;16380:1;16376:10;;;;16364:23;;16360:32;;;16325:12;;;;16404:15;;;16401:35;;;16432:1;16429;16422:12;16401:35;16468:2;16460:6;16456:15;16480:1982;16496:6;16491:3;16488:15;16480:1982;;;16575:3;16569:10;-1:-1:-1;;;;;16652:2:486;16639:11;16636:19;16633:109;;;16696:1;16725:2;16721;16714:14;16633:109;16765:24;;;;16812:4;-1:-1:-1;;16870:12:486;;;16866:21;;16862:30;-1:-1:-1;16859:120:486;;;16933:1;16962:2;16958;16951:14;16859:120;17005:22;;:::i;:::-;17070:2;17066;17062:11;17056:18;17103:2;17093:8;17090:16;17087:109;;;17148:1;17178:3;17173;17166:16;17087:109;17220:17;;17273:2;17264:12;;17260:22;-1:-1:-1;17250:123:486;;17325:1;17355:3;17350;17343:16;17250:123;17412:2;17407:3;17403:12;17397:19;17440:2;17435:3;17432:11;17429:37;;;17446:18;;:::i;:::-;17494:47;17537:2;17532;17527;17522:3;17518:12;17514:21;17510:30;17494:47;:::i;:::-;17479:62;;17570:3;17561:7;17554:20;17598:2;17587:13;;17644:3;17638;17632;17627;17623:13;17619:23;17616:32;17613:125;;;17690:1;17720:3;17715;17708:16;17613:125;17760:1;17774:145;17788:3;17785:1;17782:10;17774:145;;;17886:11;;;17882:21;;17876:28;17854:15;;;17850:24;;17843:62;17800:10;;17774:145;;;17941:3;17938:1;17935:10;17932:95;;;18011:1;18006:2;18000:3;17991:7;17987:17;17983:26;17976:37;17932:95;;;;18054:7;18047:5;18040:22;18098:43;18136:3;18132:2;18128:12;18098:43;:::i;:::-;18093:2;18086:5;18082:14;18075:67;18166:2;18155:13;;18205:43;18243:3;18239:2;18235:12;18205:43;:::i;:::-;18188:15;;;18181:68;;;;18273:3;18319:12;;;18313:19;18296:15;;;18289:44;;;;18376:11;;18370:18;18353:15;;;18346:43;18402:18;;18440:12;;;;16513;;16480:1982;;;-1:-1:-1;18480:5:486;15960:2531;-1:-1:-1;;;;;;;15960:2531:486:o;18496:1160::-;18647:6;18655;18708:2;18696:9;18687:7;18683:23;18679:32;18676:52;;;18724:1;18721;18714:12;18676:52;18757:9;18751:16;-1:-1:-1;;;;;18827:2:486;18819:6;18816:14;18813:34;;;18843:1;18840;18833:12;18813:34;18881:6;18870:9;18866:22;18856:32;;18926:7;18919:4;18915:2;18911:13;18907:27;18897:55;;18948:1;18945;18938:12;18897:55;18977:2;18971:9;18999:4;19023:60;19039:43;19079:2;19039:43;:::i;19023:60::-;19117:15;;;19199:1;19195:10;;;;19187:19;;19183:28;;;19148:12;;;;19223:19;;;19220:39;;;19255:1;19252;19245:12;19220:39;19279:11;;;;19299:135;19315:6;19310:3;19307:15;19299:135;;;19381:10;;19369:23;;19332:12;;;;19412;;;;19299:135;;;19489:18;;;19483:25;19453:5;;-1:-1:-1;19483:25:486;;-1:-1:-1;;;19520:16:486;;;19517:36;;;19549:1;19546;19539:12;19517:36;;19572:78;19642:7;19631:8;19620:9;19616:24;19572:78;:::i;:::-;19562:88;;;18496:1160;;;;;:::o;19661:127::-;19722:10;19717:3;19713:20;19710:1;19703:31;19753:4;19750:1;19743:15;19777:4;19774:1;19767:15;19793:956;19888:6;19919:2;19962;19950:9;19941:7;19937:23;19933:32;19930:52;;;19978:1;19975;19968:12;19930:52;20011:9;20005:16;-1:-1:-1;;;;;20036:6:486;20033:30;20030:50;;;20076:1;20073;20066:12;20030:50;20099:22;;20152:4;20144:13;;20140:27;-1:-1:-1;20130:55:486;;20181:1;20178;20171:12;20130:55;20210:2;20204:9;20233:60;20249:43;20289:2;20249:43;:::i;20233:60::-;20327:15;;;20409:1;20405:10;;;;20397:19;;20393:28;;;20358:12;;;;20433:19;;;20430:39;;;20465:1;20462;20455:12;20430:39;20489:11;;;;20509:210;20525:6;20520:3;20517:15;20509:210;;;20598:3;20592:10;20615:31;20640:5;20615:31;:::i;:::-;20659:18;;20542:12;;;;20697;;;;20509:210;;20754:127;20815:10;20810:3;20806:20;20803:1;20796:31;20846:4;20843:1;20836:15;20870:4;20867:1;20860:15;20886:128;20926:3;20957:1;20953:6;20950:1;20947:13;20944:39;;;20963:18;;:::i;:::-;-1:-1:-1;20999:9:486;;20886:128::o;21019:135::-;21058:3;-1:-1:-1;;21079:17:486;;21076:43;;;21099:18;;:::i;:::-;-1:-1:-1;21146:1:486;21135:13;;21019:135::o;21159:267::-;21245:6;21298:2;21286:9;21277:7;21273:23;21269:32;21266:52;;;21314:1;21311;21304:12;21266:52;21346:9;21340:16;21365:31;21390:5;21365:31;:::i;21431:973::-;21543:6;21574:2;21617;21605:9;21596:7;21592:23;21588:32;21585:52;;;21633:1;21630;21623:12;21585:52;21666:9;21660:16;-1:-1:-1;;;;;21691:6:486;21688:30;21685:50;;;21731:1;21728;21721:12;21685:50;21754:22;;21807:4;21799:13;;21795:27;-1:-1:-1;21785:55:486;;21836:1;21833;21826:12;21785:55;21865:2;21859:9;21888:60;21904:43;21944:2;21904:43;:::i;21888:60::-;21982:15;;;22064:1;22060:10;;;;22052:19;;22048:28;;;22013:12;;;;22088:19;;;22085:39;;;22120:1;22117;22110:12;22085:39;22144:11;;;;22164:210;22180:6;22175:3;22172:15;22164:210;;;22253:3;22247:10;22270:31;22295:5;22270:31;:::i;:::-;22314:18;;22197:12;;;;22352;;;;22164:210;;22409:180;22465:6;22518:2;22506:9;22497:7;22493:23;22489:32;22486:52;;;22534:1;22531;22524:12;22486:52;22557:26;22573:9;22557:26;:::i;23198:184::-;23268:6;23321:2;23309:9;23300:7;23296:23;23292:32;23289:52;;;23337:1;23334;23327:12;23289:52;-1:-1:-1;23360:16:486;;23198:184;-1:-1:-1;23198:184:486:o;24101:168::-;24141:7;24207:1;24203;24199:6;24195:14;24192:1;24189:21;24184:1;24177:9;24170:17;24166:45;24163:71;;;24214:18;;:::i;:::-;-1:-1:-1;24254:9:486;;24101:168::o;24274:127::-;24335:10;24330:3;24326:20;24323:1;24316:31;24366:4;24363:1;24356:15;24390:4;24387:1;24380:15;24406:193;24445:1;24471;24461:35;;24476:18;;:::i;:::-;-1:-1:-1;;;24512:18:486;;-1:-1:-1;;24532:13:486;;24508:38;24505:64;;;24549:18;;:::i;:::-;-1:-1:-1;24583:10:486;;24406:193::o;24604:265::-;24643:3;24671:9;;;24696:10;;-1:-1:-1;;;;;24715:27:486;;;24708:35;;24692:52;24689:78;;;24747:18;;:::i;:::-;-1:-1:-1;;;24794:19:486;;;24787:27;;24779:36;;24776:62;;;24818:18;;:::i;:::-;-1:-1:-1;;24854:9:486;;24604:265::o;24874:553::-;24913:7;-1:-1:-1;;;;;24983:9:486;;;25011;;;25036:11;;;25055:10;;;25049:17;;25032:35;25029:61;;;25070:18;;:::i;:::-;-1:-1:-1;;;25146:1:486;25139:9;;25164:11;;;25184;;;25177:19;;25160:37;25157:63;;;25200:18;;:::i;:::-;25246:1;25243;25239:9;25229:19;;25293:1;25289:2;25284:11;25281:1;25277:19;25272:2;25268;25264:11;25260:37;25257:63;;;25300:18;;:::i;:::-;25365:1;25361:2;25356:11;25353:1;25349:19;25344:2;25340;25336:11;25332:37;25329:63;;;25372:18;;:::i;:::-;-1:-1:-1;;;25412:9:486;;;;;24874:553;-1:-1:-1;;;24874:553:486:o;25714:125::-;25754:4;25782:1;25779;25776:8;25773:34;;;25787:18;;:::i;:::-;-1:-1:-1;25824:9:486;;25714:125::o;26100:273::-;26168:6;26221:2;26209:9;26200:7;26196:23;26192:32;26189:52;;;26237:1;26234;26227:12;26189:52;26269:9;26263:16;26319:4;26312:5;26308:16;26301:5;26298:27;26288:55;;26339:1;26336;26329:12;26378:267;26417:4;26446:9;;;26471:10;;-1:-1:-1;;;26490:19:486;;26483:27;;26467:44;26464:70;;;26514:18;;:::i;:::-;-1:-1:-1;;;;;26561:27:486;;26554:35;;26546:44;;26543:70;;;26593:18;;:::i;:::-;-1:-1:-1;;26630:9:486;;26378:267::o;26874:455::-;26952:6;26960;27013:2;27001:9;26992:7;26988:23;26984:32;26981:52;;;27029:1;27026;27019:12;26981:52;27055:16;;-1:-1:-1;;;;;27100:31:486;;27090:42;;27080:70;;27146:1;27143;27136:12;27080:70;27219:2;27204:18;;27198:25;27169:5;;-1:-1:-1;27267:10:486;27254:24;;27242:37;;27232:65;;27293:1;27290;27283:12;27334:221;27373:4;27402:10;27462;;;;27432;;27484:12;;;27481:38;;;27499:18;;:::i;:::-;27536:13;;27334:221;-1:-1:-1;;;27334:221:486:o;27560:231::-;27600:4;-1:-1:-1;;;;;27698:10:486;;;;27668;;27720:12;;;27717:38;;;27735:18;;:::i;27796:120::-;27836:1;27862;27852:35;;27867:18;;:::i;:::-;-1:-1:-1;27901:9:486;;27796:120::o;27921:422::-;28010:1;28053:5;28010:1;28067:270;28088:7;28078:8;28075:21;28067:270;;;28147:4;28143:1;28139:6;28135:17;28129:4;28126:27;28123:53;;;28156:18;;:::i;:::-;28206:7;28196:8;28192:22;28189:55;;;28226:16;;;;28189:55;28305:22;;;;28265:15;;;;28067:270;;;28071:3;27921:422;;;;;:::o;28348:806::-;28397:5;28427:8;28417:80;;-1:-1:-1;28468:1:486;28482:5;;28417:80;28516:4;28506:76;;-1:-1:-1;28553:1:486;28567:5;;28506:76;28598:4;28616:1;28611:59;;;;28684:1;28679:130;;;;28591:218;;28611:59;28641:1;28632:10;;28655:5;;;28679:130;28716:3;28706:8;28703:17;28700:43;;;28723:18;;:::i;:::-;-1:-1:-1;;28779:1:486;28765:16;;28794:5;;28591:218;;28893:2;28883:8;28880:16;28874:3;28868:4;28865:13;28861:36;28855:2;28845:8;28842:16;28837:2;28831:4;28828:12;28824:35;28821:77;28818:159;;;-1:-1:-1;28930:19:486;;;28962:5;;28818:159;29009:34;29034:8;29028:4;29009:34;:::i;:::-;29079:6;29075:1;29071:6;29067:19;29058:7;29055:32;29052:58;;;29090:18;;:::i;:::-;29128:20;;28348:806;-1:-1:-1;;;28348:806:486:o;29159:131::-;29219:5;29248:36;29275:8;29269:4;29248:36;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "claimAllRewardTokens(address)": "9cf1fd53", + "claimRewardsForMarket(address,address,address[],bool[])": "4f471e6d", + "claimRewardsForMarkets(address,address[],address[],bool[])": "8260a696", + "claimRewardsForPool(address,address)": "3610c407", + "claimRewardsOfRewardToken(address,address)": "bdfc1839", + "fpd()": "de858c63", + "getAdjustedUserNetApr(address,int256,address[],int256[])": "7d3cab4c", + "getAllRewardTokens()": "12edb24c", + "getMarketRewardsInfo(address[])": "7e70aa49", + "getPoolMarketRewardsInfo(address)": "d1040bae", + "getUserNetApr(address,int256)": "0d9d7fdc" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/IonicLiquidator_Implementation.json b/packages/sdk/deployments/mode/IonicLiquidator_Implementation.json new file mode 100644 index 0000000000..37d4081038 --- /dev/null +++ b/packages/sdk/deployments/mode/IonicLiquidator_Implementation.json @@ -0,0 +1,1401 @@ +{ + "address": "0x48bf6bd4B3d8b4E75863B5340b977E888BacE19a", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "UNISWAP_V2_ROUTER_02", + "outputs": [ + { + "internalType": "contract IUniswapV2Router02", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "W_NATIVE_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "_becomeImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "whitelisted", + "type": "bool[]" + } + ], + "name": "_whitelistRedemptionStrategies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "name": "_whitelistRedemptionStrategy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "contract IFundsConversionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ], + "name": "convertCustomFunds", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "flashSwapFee", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wtoken", + "type": "address" + }, + { + "internalType": "address", + "name": "_uniswapV2router", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_flashSwapFee", + "type": "uint8" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "moraswapCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "pancakeCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "underlyingCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "underlyingCollateralSeized", + "type": "uint256" + }, + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ], + "name": "redeemCustomCollateral", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "redemptionStrategiesWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minOutputAmount", + "type": "uint256" + } + ], + "name": "safeLiquidate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "contract IUniswapV2Pair", + "name": "flashSwapPair", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minProfitAmount", + "type": "uint256" + }, + { + "internalType": "contract IUniswapV2Router02", + "name": "uniswapV2RouterForBorrow", + "type": "address" + }, + { + "internalType": "contract IUniswapV2Router02", + "name": "uniswapV2RouterForCollateral", + "type": "address" + }, + { + "internalType": "contract IRedemptionStrategy[]", + "name": "redemptionStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategyData", + "type": "bytes[]" + }, + { + "internalType": "contract IFundsConversionStrategy[]", + "name": "debtFundingStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "debtFundingStrategiesData", + "type": "bytes[]" + } + ], + "internalType": "struct IonicLiquidator.LiquidateToTokensWithFlashSwapVars", + "name": "vars", + "type": "tuple" + } + ], + "name": "safeLiquidateToTokensWithFlashLoan", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV2Call", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x9f0db95fe9cceaf79265a599cae195a4378461569a599daea00bb88e235867ea", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x48bf6bd4B3d8b4E75863B5340b977E888BacE19a", + "transactionIndex": 1, + "gasUsed": "3019820", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x733c59c6a92624da242f02e19df6a2ce33fac8375b2b5d51a29106bd6e96b944", + "transactionHash": "0x9f0db95fe9cceaf79265a599cae195a4378461569a599daea00bb88e235867ea", + "logs": [], + "blockNumber": 2097512, + "cumulativeGasUsed": "3066733", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "UNISWAP_V2_ROUTER_02", + "outputs": [ + { + "internalType": "contract IUniswapV2Router02", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "W_NATIVE_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "whitelisted", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_whitelistRedemptionStrategies" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_whitelistRedemptionStrategy" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "contract IFundsConversionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "convertCustomFunds", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "flashSwapFee", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wtoken", + "type": "address" + }, + { + "internalType": "address", + "name": "_uniswapV2router", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_flashSwapFee", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "moraswapCall" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "pancakeCall" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "underlyingCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "underlyingCollateralSeized", + "type": "uint256" + }, + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemCustomCollateral", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minOutputAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "safeLiquidate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "struct IonicLiquidator.LiquidateToTokensWithFlashSwapVars", + "name": "vars", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "contract IUniswapV2Pair", + "name": "flashSwapPair", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minProfitAmount", + "type": "uint256" + }, + { + "internalType": "contract IUniswapV2Router02", + "name": "uniswapV2RouterForBorrow", + "type": "address" + }, + { + "internalType": "contract IUniswapV2Router02", + "name": "uniswapV2RouterForCollateral", + "type": "address" + }, + { + "internalType": "contract IRedemptionStrategy[]", + "name": "redemptionStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategyData", + "type": "bytes[]" + }, + { + "internalType": "contract IFundsConversionStrategy[]", + "name": "debtFundingStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "debtFundingStrategiesData", + "type": "bytes[]" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "safeLiquidateToTokensWithFlashLoan", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "uniswapV2Call" + }, + { + "inputs": [], + "stateMutability": "payable", + "type": "receive" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_whitelistRedemptionStrategies(address[],bool[])": { + "details": "for security reasons only whitelisted redemption strategies may be used. Each whitelisted redemption strategy has to be checked to not be able to call `selfdestruct` with the `delegatecall` call in `redeemCustomCollateral`" + }, + "_whitelistRedemptionStrategy(address,bool)": { + "details": "for security reasons only whitelisted redemption strategies may be used. Each whitelisted redemption strategy has to be checked to not be able to call `selfdestruct` with the `delegatecall` call in `redeemCustomCollateral`" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pancakeCall(address,uint256,uint256,bytes)": { + "details": "Callback function for PCS flashloans." + }, + "redeemCustomCollateral(address,uint256,address,bytes)": { + "details": "Redeem \"special\" collateral tokens (before swapping the output for borrowed tokens to be repaid via Uniswap). Public visibility because we have to call this function externally if called from a payable IonicLiquidator function (for some reason delegatecall fails when called with msg.value > 0)." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeLiquidate(address,uint256,address,address,uint256)": { + "params": { + "borrower": "The borrower's Ethereum address.", + "cErc20": "The borrowed cErc20 to repay.", + "cTokenCollateral": "The cToken collateral to be liquidated.", + "minOutputAmount": "The minimum amount of collateral to seize (or the minimum exchange output if applicable) required for execution. Reverts if this condition is not met.", + "repayAmount": "The amount to repay to liquidate the unhealthy loan." + } + }, + "safeLiquidateToTokensWithFlashLoan((address,uint256,address,address,address,uint256,address,address,address[],bytes[],address[],bytes[]))": { + "params": { + "vars": "@see LiquidateToTokensWithFlashSwapVars." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "uniswapV2Call(address,uint256,uint256,bytes)": { + "details": "Callback function for Uniswap flashloans." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "safeLiquidate(address,uint256,address,address,uint256)": { + "notice": "Safely liquidate an unhealthy loan (using capital from the sender), confirming that at least `minOutputAmount` in collateral is seized (or outputted by exchange if applicable)." + }, + "safeLiquidateToTokensWithFlashLoan((address,uint256,address,address,address,uint256,address,address,address[],bytes[],address[],bytes[]))": { + "notice": "Safely liquidate an unhealthy loan, confirming that at least `minProfitAmount` in NATIVE profit is seized." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/IonicLiquidator.sol": "IonicLiquidator" + }, + "libraries": {} + }, + "sources": { + "contracts/IonicLiquidator.sol": { + "keccak256": "0xd6a4e5ebbfc032cfa74f0ce9e355ccb1e08eb10c88421434b5ef008d40d53ab8", + "urls": [ + "bzz-raw://321c13cf52d23e34d17d6946418e68bd31901178ba1aa3fd039c85aa9ffaa5fc", + "dweb:/ipfs/QmWFzMJm2FP8aZvx2jZ9DXKA7WPHufr2TY6toUtTHYCKfw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV2Callee.sol": { + "keccak256": "0xf03775d505749a6d8ffd4b50e19478cacfe83c8e6fb0881e1b442505f958029a", + "urls": [ + "bzz-raw://393b00a803316b9996e37c42e8fc28c7ffb76d6961fd7641296bfc592ee35600", + "dweb:/ipfs/QmcqHhWAErL9ruH28Usc4irth4g47SrdkSLXHK8nqdCG97" + ], + "license": "GPL-3.0-only" + }, + "contracts/external/uniswap/IUniswapV2Factory.sol": { + "keccak256": "0xcad1373d47c15a77f0fe29698181bb643d4eb4cc870fdeb40b7e081ebffb598a", + "urls": [ + "bzz-raw://c39232c5450f14959202eac7637cc815c3b5ebebd0553c3d21ad39f8c741a717", + "dweb:/ipfs/QmcFLvPQhEC9kCKMusdkqDGAtdaUcBxwvovPVQrECNQ4pJ" + ], + "license": "GPL-3.0-only" + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/external/uniswap/IUniswapV2Router01.sol": { + "keccak256": "0x62d8aba76a668ee9cc44e89f8b5bca363bd9682e725bf0c8780b0473daec590b", + "urls": [ + "bzz-raw://c48032443311b9cf049c5b6e54d165dceacc1f3cb40a00661ce8c0eea3985e0e", + "dweb:/ipfs/QmSSSQDcn1omKxTHCxQZoPYbryiY8NVipucYZ45GbR7gtA" + ], + "license": "GPL-3.0-only" + }, + "contracts/external/uniswap/IUniswapV2Router02.sol": { + "keccak256": "0xb43a52d7a8eb3895ddfdfbf97490d1c3e8d3630b69be8ab4dc4591e0b1de546d", + "urls": [ + "bzz-raw://bc2b8d3d5018400d77135bb639c93f13e29b5a77e94e62401a9224db29eefe6d", + "dweb:/ipfs/QmRpkNaw5FheDPp15iQw4coVZfUZa7f6KLxhn2YxKLgHVM" + ], + "license": "GPL-3.0-only" + }, + "contracts/external/uniswap/UniswapV2Library.sol": { + "keccak256": "0x7581213474c355aca228660a5b111454cbd367bbffb46ef2c47438eedfc7a5fc", + "urls": [ + "bzz-raw://5954579a42b8af71384bd955ed65f6cc7a4d9beec871dcd8bf9bd9a95c7fd766", + "dweb:/ipfs/QmYs9qpbo74ThiDiq3JP6adkqar3hi2ANEgH8w7aqs9xfG" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/utils/IW_NATIVE.sol": { + "keccak256": "0x653aeec5b76d23dad1efd9cddc6f675fa45b11666a6d2a613eb7ef4ff404c9f5", + "urls": [ + "bzz-raw://ed23c59326df16af20b6a6848584a0bfe48486b70d72a692d6d5c419cb1727eb", + "dweb:/ipfs/QmY7neYqzw9yBk1EsEtRiL4SYK2i6ePg8FqXQFSQh3xMUz" + ], + "license": "agpl-3.0" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506135aa806100206000396000f3fe60806040526004361061010d5760003560e01c806387c8f348116100955780638ee8ca7d116100645780638ee8ca7d14610329578063b596625814610368578063ba8bca5a14610388578063c2ebfdc1146103a8578063f2fde38b146103db57600080fd5b806387c8f348146102ab57806389232a00146102cb5780638a0b9090146102eb5780638da5cb5b1461030b57600080fd5b80635b672371116100dc5780635b672371146101fe578063715018a61461023e57806373ed86531461025357806381738f1314610273578063848008121461025357600080fd5b806310d1e85c1461016c57806320b723251461018c57806356e67728146101bf5780635a431365146101de57600080fd5b3661016757333b6101655760405162461bcd60e51b815260206004820152601960248201527f53656e646572206973206e6f74206120636f6e74726163742e0000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561017857600080fd5b50610165610187366004612949565b6103fb565b34801561019857600080fd5b506101ac6101a73660046129b2565b61044a565b6040519081526020015b60405180910390f35b3480156101cb57600080fd5b506101656101da366004612a0d565b5050565b3480156101ea57600080fd5b506101656101f9366004612a5c565b61061c565b34801561020a57600080fd5b5061022e610219366004612a95565b60686020526000908152604090205460ff1681565b60405190151581526020016101b6565b34801561024a57600080fd5b5061016561064f565b34801561025f57600080fd5b5061016561026e366004612949565b610663565b34801561027f57600080fd5b50606554610293906001600160a01b031681565b6040516001600160a01b0390911681526020016101b6565b3480156102b757600080fd5b506101ac6102c6366004612ab2565b610677565b3480156102d757600080fd5b506101656102e6366004612aed565b610acc565b3480156102f757600080fd5b50610165610306366004612b82565b610c80565b34801561031757600080fd5b506033546001600160a01b0316610293565b34801561033557600080fd5b50610349610344366004612ccb565b610d9f565b604080516001600160a01b0390931683526020830191909152016101b6565b34801561037457600080fd5b50610349610383366004612ccb565b610e57565b34801561039457600080fd5b50606654610293906001600160a01b031681565b3480156103b457600080fd5b50606a546103c990600160a01b900460ff1681565b60405160ff90911681526020016101b6565b3480156103e757600080fd5b506101656103f6366004612a95565b610eb4565b600061040a8260048186612d36565b8101906104179190612eda565b905061042281610f2d565b606780546001600160a01b0319166001600160a01b0392909216919091179055505050505050565b60008085116104c15760405162461bcd60e51b815260206004820152603860248201527f526570617920616d6f756e7420287472616e73616374696f6e2076616c75652960448201527f206d7573742062652067726561746572207468616e20302e0000000000000000606482015260840161015c565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190613037565b905061053c6001600160a01b0382163330896113db565b610547818688611446565b604051637af1e23160e11b81526001600160a01b03888116600483015260248201889052858116604483015286169063f5e3c462906064016020604051808303816000875af115801561059e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c29190613054565b156106055760405162461bcd60e51b81526020600482015260136024820152722634b8bab4b230ba34b7b7103330b4b632b21760691b604482015260640161015c565b61060f84846114b9565b9150505b95945050505050565b6106246115a6565b6001600160a01b03919091166000908152606860205260409020805460ff1916911515919091179055565b6106576115a6565b6106616000611600565b565b61067085858585856103fb565b5050505050565b6000808260200135116106d85760405162461bcd60e51b8152602060048201526024808201527f526570617920616d6f756e74206d7573742062652067726561746572207468616044820152633710181760e11b606482015260840161015c565b60208201356000806106ee61014086018661306d565b905011156109055761070461016085018561306d565b905061071461014086018661306d565b9050146107be5760405162461bcd60e51b815260206004820152606660248201527f46756e64696e67204946756e6473436f6e76657273696f6e537472617465677960448201527f20636f6e747261637420617272617920616e642073747261746567792064617460648201527f61206279746573206172726179206d757374206265207468652073616d65206c60848201526532b733ba341760d11b60a482015260c40161015c565b60005b6107cf61014086018661306d565b90508110156108ff5760006107e861016087018761306d565b838181106107f8576107f86130b6565b905060200281019061080a91906130cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093945061084f9250505061014088018861306d565b8481811061085f5761085f6130b6565b90506020020160208101906108749190612a95565b60405163180994cb60e11b81529091506001600160a01b038216906330132996906108a5908890869060040161316a565b6040805180830381865afa1580156108c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e59190613183565b955093508291506108f79050816131c7565b9150506107c1565b50610979565b6109156060850160408601612a95565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109769190613037565b90505b6069829055606a80546001600160a01b0319166001600160a01b0383169081179091556000906109af60a0870160808801612a95565b6001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a109190613037565b6001600160a01b0316149050610a2c60a0860160808701612a95565b6001600160a01b031663022c0d9f82610a46576000610a48565b845b8315610a55576000610a57565b855b306000366040518663ffffffff1660e01b8152600401610a7b9594939291906131e2565b600060405180830381600087803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b506106139250610ac29150506080870160608801612a95565b8660a001356114b9565b600054610100900460ff1615808015610aec5750600054600160ff909116105b80610b065750303b158015610b06575060005460ff166001145b610b695760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161015c565b6000805460ff191660011790558015610b8c576000805461ff0019166101001790555b610b94611652565b6001600160a01b038316610bea5760405162461bcd60e51b815260206004820152601d60248201527f556e69737761705632466163746f7279206e6f7420646566696e65642e000000604482015260640161015c565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055606a805460ff8416600160a01b0260ff60a01b199091161790558015610c7a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610c886115a6565b8215801590610c9657508281145b610d085760405162461bcd60e51b815260206004820152603f60248201527f6c697374206f66207374726174656769657320656d707479206f72207768697460448201527f656c69737420646f6573206e6f74206d6174636820697473206c656e67746800606482015260840161015c565b60005b8381101561067057828282818110610d2557610d256130b6565b9050602002016020810190610d3a9190613231565b60686000878785818110610d5057610d506130b6565b9050602002016020810190610d659190612a95565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d97816131c7565b915050610d0b565b6001600160a01b038216600090815260686020526040812054819060ff16610dd95760405162461bcd60e51b815260040161015c9061324e565b6000610e33856389eabf0260e01b898988604051602401610dfc939291906132a0565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611681565b905080806020019051810190610e499190613183565b925092505094509492505050565b6001600160a01b038216600090815260686020526040812054819060ff16610e915760405162461bcd60e51b815260040161015c9061324e565b6000610e33856310badf4e60e01b898988604051602401610dfc939291906132a0565b610ebc6115a6565b6001600160a01b038116610f215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161015c565b610f2a81611600565b50565b606a54606954610140830151516000926001600160a01b0316919015610fd457610140840151515b8015610fd257610fbb8383876101400151600185610f7391906132c7565b81518110610f8357610f836130b6565b6020026020010151886101600151600186610f9e91906132c7565b81518110610fae57610fae6130b6565b6020026020010151610d9f565b909350915080610fca816132de565b915050610f55565b505b600084604001516001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103c9190613037565b9050806001600160a01b0316836001600160a01b0316146110d75760405162461bcd60e51b815260206004820152604960248201527f74686520646562742072657061796d656e742066756e64732073686f756c642060448201527f626520636f6e76657274656420746f2074686520756e6465726c79696e67206460648201526832b13a103a37b5b2b760b91b608482015260a40161015c565b846020015182101561112b5760405162461bcd60e51b815260206004820181905260248201527f646562742072657061796d656e7420616d6f756e74206e6f7420656e6f756768604482015260640161015c565b61113e8186604001518760200151611446565b6040858101518651602088015160608901519351637af1e23160e11b81526001600160a01b03928316600482015260248101919091529281166044840152169063f5e3c462906064016020604051808303816000875af11580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ca9190613054565b1561120d5760405162461bcd60e51b81526020600482015260136024820152722634b8bab4b230ba34b7b7103330b4b632b21760691b604482015260640161015c565b60608501516040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127c9190613054565b9050600081116112c35760405162461bcd60e51b815260206004820152601260248201527127379031aa37b5b2b7399039b2b4bd32b21760711b604482015260640161015c565b606086015160405163db006a7560e01b8152600481018390526000916001600160a01b03169063db006a75906024016020604051808303816000875af1158015611311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113359190613054565b905080156113ad576040805162461bcd60e51b81526020600482015260248101919091527f4572726f722063616c6c696e672072656465656d696e67207365697a6564206360448201527f546f6b656e3a206572726f7220636f6465206e6f7420657175616c20746f2030606482015260840161015c565b5050506113d384606001518560c001518660e0015187610100015188610120015161176c565b949350505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610c7a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261205e565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b3906044016020604051808303816000875af1158015611495573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a91906132f5565b6040516370a0823160e01b8152306004820152600090839082906001600160a01b038316906370a0823190602401602060405180830381865afa158015611504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115289190613054565b90508381101561158c5760405162461bcd60e51b815260206004820152602960248201527f4d696e696d756d20746f6b656e206f757470757420616d6f756e74206e6f742060448201526839b0ba34b334b2b21760b91b606482015260840161015c565b80156113d3576113d36001600160a01b0383163383612135565b6033546001600160a01b031633146106615760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161015c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166116795760405162461bcd60e51b815260040161015c90613312565b610661612165565b60606001600160a01b0383163b6116e95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161015c565b600080846001600160a01b031684604051611704919061335d565b600060405180830381855af49150503d806000811461173f576040519150601f19603f3d011682016040523d82523d6000602084013e611744565b606091505b5091509150610613828260405180606001604052806027815260200161357760279139612195565b606a54600090819061178a90600160a01b900460ff16612710613379565b61ffff1660695461271061179e919061339c565b6117a891906133d1565b606a549091506000906117c790600160a01b900460ff16612710613379565b61ffff166069546127106117db919061339c565b6117e591906133e5565b11156117f957806117f5816131c7565b9150505b6000876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190613037565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb9190613054565b8651909150156119d55784518651146119725760405162461bcd60e51b815260206004820152605b60248201527f49526564656d7074696f6e537472617465677920636f6e74726163742061727260448201527f617920616e64207374726174656779206461746120627974657320617272617960648201527f206d6e75737420746865207468652073616d65206c656e6774682e0000000000608482015260a40161015c565b60005b86518110156119d3576119bc8383898481518110611995576119956130b6565b60200260200101518985815181106119af576119af6130b6565b6020026020010151610e57565b9093509150806119cb816131c7565b915050611975565b505b6000339050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3c9190613037565b6001600160a01b0316836001600160a01b03161480611acd5750806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab89190613037565b6001600160a01b0316836001600160a01b0316145b15611cf857606a546000906001600160a01b0385811691161415611af2575083611ba0565b611b838a6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b579190613037565b606954606a54611b719088906001600160a01b03166121d5565b606a54600160a01b900460ff16612262565b600081518110611b9557611b956130b6565b602002602001015190505b82811115611c165760405162461bcd60e51b815260206004820152603d60248201527f546f6b656e20666c6173686c6f616e2072657475726e20616d6f756e7420677260448201527f6561746572207468616e207365697a656420636f6c6c61746572616c2e000000606482015260840161015c565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0385169063a9059cbb906044016020604051808303816000875af1158015611c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8791906132f5565b611ceb5760405162461bcd60e51b815260206004820152602f60248201527f4661696c656420746f20726570617920746f6b656e20666c6173686c6f616e2060448201526e37b7103137b93937bb9039b4b2329760891b606482015260840161015c565b8395505050505050610613565b606554606a546000916001600160a01b0391821691161415611d1b575083611dbb565b611d9e8a6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d809190613037565b606554606a548891611b71916001600160a01b0391821691166121d5565b600081518110611db057611db06130b6565b602002602001015190505b6065546001600160a01b03858116911614611e6b57611ddb848a85611446565b6065546001600160a01b03808b1691638803dbee9184918791611e00918a91166121d5565b30426040518663ffffffff1660e01b8152600401611e229594939291906133f9565b6000604051808303816000875af1158015611e41573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e69919081019061346a565b505b6065546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed79190613054565b811115611f5d5760405162461bcd60e51b815260206004820152604860248201527f4e6f7420656e6f75676820575f4e41544956452065786368616e67656420667260448201527f6f6d207365697a656420636f6c6c61746572616c20746f20726570617920666c60648201526730b9b43637b0b71760c11b608482015260a40161015c565b60655460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd291906132f5565b611ceb5760405162461bcd60e51b815260206004820152605160248201527f4661696c656420746f20726570617920556e697377617020666c6173686c6f6160448201527f6e207769746820575f4e41544956452065786368616e6765642066726f6d207360648201527032b4bd32b21031b7b63630ba32b930b61760791b608482015260a40161015c565b60006120b3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123f99092919063ffffffff16565b80519091501561213057808060200190518101906120d191906132f5565b6121305760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161015c565b505050565b6040516001600160a01b03831660248201526044810182905261213090849063a9059cbb60e01b9060640161140f565b600054610100900460ff1661218c5760405162461bcd60e51b815260040161015c90613312565b61066133611600565b606083156121a45750816121ce565b8251156121b45782518084602001fd5b8160405162461bcd60e51b815260040161015c91906134ef565b9392505050565b60408051600280825260608083018452926000929190602083019080368337019050509050838160008151811061220e5761220e6130b6565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612242576122426130b6565b6001600160a01b0390921660209283029190910190910152905092915050565b60606002835110156122b65760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015260640161015c565b82516001600160401b038111156122cf576122cf612bed565b6040519080825280602002602001820160405280156122f8578160200160208202803683370190505b50905083816001835161230b91906132c7565b8151811061231b5761231b6130b6565b60200260200101818152505060006001845161233791906132c7565b90505b80156123f05760008061238a88876123536001876132c7565b81518110612363576123636130b6565b602002602001015188868151811061237d5761237d6130b6565b6020026020010151612408565b915091506123b38484815181106123a3576123a36130b6565b60200260200101518383886124d2565b846123bf6001866132c7565b815181106123cf576123cf6130b6565b602002602001018181525050505080806123e8906132de565b91505061233a565b50949350505050565b60606113d3848460008561260a565b600080600061241785856126da565b5090506000806124288888886127d2565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124899190613519565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146124c05780826124c3565b81815b90999098509650505050505050565b60008085116125385760405162461bcd60e51b815260206004820152602c60248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4f60448201526b155514155517d05353d5539560a21b606482015260840161015c565b6000841180156125485750600083115b6125a55760405162461bcd60e51b815260206004820152602860248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604482015267495155494449545960c01b606482015260840161015c565b60006125b1868661339c565b6125bd9061271061339c565b905060006125d060ff8516612710613379565b61ffff166125de88876132c7565b6125e8919061339c565b90506125f481836133d1565b6125ff90600161355e565b979650505050505050565b60608247101561266b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161015c565b600080866001600160a01b03168587604051612687919061335d565b60006040518083038185875af1925050503d80600081146126c4576040519150601f19603f3d011682016040523d82523d6000602084013e6126c9565b606091505b50915091506125ff87838387612848565b600080826001600160a01b0316846001600160a01b0316141561274d5760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b606482015260840161015c565b826001600160a01b0316846001600160a01b03161061276d578284612770565b83835b90925090506001600160a01b0382166127cb5760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015260640161015c565b9250929050565b60405163e6a4390560e01b81526001600160a01b03838116600483015282811660248301526000919085169063e6a4390590604401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d39190613037565b606083156128b45782516128ad576001600160a01b0385163b6128ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015c565b50816113d3565b6113d383838151156128c95781518083602001fd5b8060405162461bcd60e51b815260040161015c91906134ef565b6001600160a01b0381168114610f2a57600080fd5b8035612903816128e3565b919050565b60008083601f84011261291a57600080fd5b5081356001600160401b0381111561293157600080fd5b6020830191508360208285010111156127cb57600080fd5b60008060008060006080868803121561296157600080fd5b853561296c816128e3565b9450602086013593506040860135925060608601356001600160401b0381111561299557600080fd5b6129a188828901612908565b969995985093965092949392505050565b600080600080600060a086880312156129ca57600080fd5b85356129d5816128e3565b94506020860135935060408601356129ec816128e3565b925060608601356129fc816128e3565b949793965091946080013592915050565b60008060208385031215612a2057600080fd5b82356001600160401b03811115612a3657600080fd5b612a4285828601612908565b90969095509350505050565b8015158114610f2a57600080fd5b60008060408385031215612a6f57600080fd5b8235612a7a816128e3565b91506020830135612a8a81612a4e565b809150509250929050565b600060208284031215612aa757600080fd5b81356121ce816128e3565b600060208284031215612ac457600080fd5b81356001600160401b03811115612ada57600080fd5b820161018081850312156121ce57600080fd5b600080600060608486031215612b0257600080fd5b8335612b0d816128e3565b92506020840135612b1d816128e3565b9150604084013560ff81168114612b3357600080fd5b809150509250925092565b60008083601f840112612b5057600080fd5b5081356001600160401b03811115612b6757600080fd5b6020830191508360208260051b85010111156127cb57600080fd5b60008060008060408587031215612b9857600080fd5b84356001600160401b0380821115612baf57600080fd5b612bbb88838901612b3e565b90965094506020870135915080821115612bd457600080fd5b50612be187828801612b3e565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715612c2657612c26612bed565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c5457612c54612bed565b604052919050565b600082601f830112612c6d57600080fd5b81356001600160401b03811115612c8657612c86612bed565b612c99601f8201601f1916602001612c2c565b818152846020838601011115612cae57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215612ce157600080fd5b8435612cec816128e3565b9350602085013592506040850135612d03816128e3565b915060608501356001600160401b03811115612d1e57600080fd5b612d2a87828801612c5c565b91505092959194509250565b60008085851115612d4657600080fd5b83861115612d5357600080fd5b5050820193919092039150565b60006001600160401b03821115612d7957612d79612bed565b5060051b60200190565b600082601f830112612d9457600080fd5b81356020612da9612da483612d60565b612c2c565b82815260059290921b84018101918181019086841115612dc857600080fd5b8286015b84811015612dec578035612ddf816128e3565b8352918301918301612dcc565b509695505050505050565b600082601f830112612e0857600080fd5b81356020612e18612da483612d60565b82815260059290921b84018101918181019086841115612e3757600080fd5b8286015b84811015612dec5780356001600160401b03811115612e5a5760008081fd5b612e688986838b0101612c5c565b845250918301918301612e3b565b600082601f830112612e8757600080fd5b81356020612e97612da483612d60565b82815260059290921b84018101918181019086841115612eb657600080fd5b8286015b84811015612dec578035612ecd816128e3565b8352918301918301612eba565b600060208284031215612eec57600080fd5b81356001600160401b0380821115612f0357600080fd5b908301906101808286031215612f1857600080fd5b612f20612c03565b612f29836128f8565b815260208301356020820152612f41604084016128f8565b6040820152612f52606084016128f8565b6060820152612f63608084016128f8565b608082015260a083013560a0820152612f7e60c084016128f8565b60c0820152612f8f60e084016128f8565b60e08201526101008084013583811115612fa857600080fd5b612fb488828701612d83565b8284015250506101208084013583811115612fce57600080fd5b612fda88828701612df7565b8284015250506101408084013583811115612ff457600080fd5b61300088828701612e76565b828401525050610160808401358381111561301a57600080fd5b61302688828701612df7565b918301919091525095945050505050565b60006020828403121561304957600080fd5b81516121ce816128e3565b60006020828403121561306657600080fd5b5051919050565b6000808335601e1984360301811261308457600080fd5b8301803591506001600160401b0382111561309e57600080fd5b6020019150600581901b36038213156127cb57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126130e357600080fd5b8301803591506001600160401b038211156130fd57600080fd5b6020019150368190038213156127cb57600080fd5b60005b8381101561312d578181015183820152602001613115565b83811115610c7a5750506000910152565b60008151808452613156816020860160208601613112565b601f01601f19169290920160200192915050565b8281526040602082015260006113d3604083018461313e565b6000806040838503121561319657600080fd5b82516131a1816128e3565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156131db576131db6131b1565b5060010190565b858152602081018590526001600160a01b03841660408201526080606082018190528101829052818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60006020828403121561324357600080fd5b81356121ce81612a4e565b60208082526032908201527f6f6e6c792077686974656c697374656420726564656d7074696f6e20737472616040820152711d1959da595cc818d85b881899481d5cd95960721b606082015260800190565b60018060a01b0384168152826020820152606060408201526000610613606083018461313e565b6000828210156132d9576132d96131b1565b500390565b6000816132ed576132ed6131b1565b506000190190565b60006020828403121561330757600080fd5b81516121ce81612a4e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000825161336f818460208701613112565b9190910192915050565b600061ffff83811690831681811015613394576133946131b1565b039392505050565b60008160001904831182151516156133b6576133b66131b1565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826133e0576133e06133bb565b500490565b6000826133f4576133f46133bb565b500690565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134495784516001600160a01b031683529383019391830191600101613424565b50506001600160a01b03969096166060850152505050608001529392505050565b6000602080838503121561347d57600080fd5b82516001600160401b0381111561349357600080fd5b8301601f810185136134a457600080fd5b80516134b2612da482612d60565b81815260059190911b820183019083810190878311156134d157600080fd5b928401925b828410156125ff578351825292840192908401906134d6565b6020815260006121ce602083018461313e565b80516001600160701b038116811461290357600080fd5b60008060006060848603121561352e57600080fd5b61353784613502565b925061354560208501613502565b9150604084015163ffffffff81168114612b3357600080fd5b60008219821115613571576135716131b1565b50019056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000a", + "sourceMap": "1277:20639:1:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361061010d5760003560e01c806387c8f348116100955780638ee8ca7d116100645780638ee8ca7d14610329578063b596625814610368578063ba8bca5a14610388578063c2ebfdc1146103a8578063f2fde38b146103db57600080fd5b806387c8f348146102ab57806389232a00146102cb5780638a0b9090146102eb5780638da5cb5b1461030b57600080fd5b80635b672371116100dc5780635b672371146101fe578063715018a61461023e57806373ed86531461025357806381738f1314610273578063848008121461025357600080fd5b806310d1e85c1461016c57806320b723251461018c57806356e67728146101bf5780635a431365146101de57600080fd5b3661016757333b6101655760405162461bcd60e51b815260206004820152601960248201527f53656e646572206973206e6f74206120636f6e74726163742e0000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561017857600080fd5b50610165610187366004612949565b6103fb565b34801561019857600080fd5b506101ac6101a73660046129b2565b61044a565b6040519081526020015b60405180910390f35b3480156101cb57600080fd5b506101656101da366004612a0d565b5050565b3480156101ea57600080fd5b506101656101f9366004612a5c565b61061c565b34801561020a57600080fd5b5061022e610219366004612a95565b60686020526000908152604090205460ff1681565b60405190151581526020016101b6565b34801561024a57600080fd5b5061016561064f565b34801561025f57600080fd5b5061016561026e366004612949565b610663565b34801561027f57600080fd5b50606554610293906001600160a01b031681565b6040516001600160a01b0390911681526020016101b6565b3480156102b757600080fd5b506101ac6102c6366004612ab2565b610677565b3480156102d757600080fd5b506101656102e6366004612aed565b610acc565b3480156102f757600080fd5b50610165610306366004612b82565b610c80565b34801561031757600080fd5b506033546001600160a01b0316610293565b34801561033557600080fd5b50610349610344366004612ccb565b610d9f565b604080516001600160a01b0390931683526020830191909152016101b6565b34801561037457600080fd5b50610349610383366004612ccb565b610e57565b34801561039457600080fd5b50606654610293906001600160a01b031681565b3480156103b457600080fd5b50606a546103c990600160a01b900460ff1681565b60405160ff90911681526020016101b6565b3480156103e757600080fd5b506101656103f6366004612a95565b610eb4565b600061040a8260048186612d36565b8101906104179190612eda565b905061042281610f2d565b606780546001600160a01b0319166001600160a01b0392909216919091179055505050505050565b60008085116104c15760405162461bcd60e51b815260206004820152603860248201527f526570617920616d6f756e7420287472616e73616374696f6e2076616c75652960448201527f206d7573742062652067726561746572207468616e20302e0000000000000000606482015260840161015c565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190613037565b905061053c6001600160a01b0382163330896113db565b610547818688611446565b604051637af1e23160e11b81526001600160a01b03888116600483015260248201889052858116604483015286169063f5e3c462906064016020604051808303816000875af115801561059e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c29190613054565b156106055760405162461bcd60e51b81526020600482015260136024820152722634b8bab4b230ba34b7b7103330b4b632b21760691b604482015260640161015c565b61060f84846114b9565b9150505b95945050505050565b6106246115a6565b6001600160a01b03919091166000908152606860205260409020805460ff1916911515919091179055565b6106576115a6565b6106616000611600565b565b61067085858585856103fb565b5050505050565b6000808260200135116106d85760405162461bcd60e51b8152602060048201526024808201527f526570617920616d6f756e74206d7573742062652067726561746572207468616044820152633710181760e11b606482015260840161015c565b60208201356000806106ee61014086018661306d565b905011156109055761070461016085018561306d565b905061071461014086018661306d565b9050146107be5760405162461bcd60e51b815260206004820152606660248201527f46756e64696e67204946756e6473436f6e76657273696f6e537472617465677960448201527f20636f6e747261637420617272617920616e642073747261746567792064617460648201527f61206279746573206172726179206d757374206265207468652073616d65206c60848201526532b733ba341760d11b60a482015260c40161015c565b60005b6107cf61014086018661306d565b90508110156108ff5760006107e861016087018761306d565b838181106107f8576107f86130b6565b905060200281019061080a91906130cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093945061084f9250505061014088018861306d565b8481811061085f5761085f6130b6565b90506020020160208101906108749190612a95565b60405163180994cb60e11b81529091506001600160a01b038216906330132996906108a5908890869060040161316a565b6040805180830381865afa1580156108c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e59190613183565b955093508291506108f79050816131c7565b9150506107c1565b50610979565b6109156060850160408601612a95565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109769190613037565b90505b6069829055606a80546001600160a01b0319166001600160a01b0383169081179091556000906109af60a0870160808801612a95565b6001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a109190613037565b6001600160a01b0316149050610a2c60a0860160808701612a95565b6001600160a01b031663022c0d9f82610a46576000610a48565b845b8315610a55576000610a57565b855b306000366040518663ffffffff1660e01b8152600401610a7b9594939291906131e2565b600060405180830381600087803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b506106139250610ac29150506080870160608801612a95565b8660a001356114b9565b600054610100900460ff1615808015610aec5750600054600160ff909116105b80610b065750303b158015610b06575060005460ff166001145b610b695760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161015c565b6000805460ff191660011790558015610b8c576000805461ff0019166101001790555b610b94611652565b6001600160a01b038316610bea5760405162461bcd60e51b815260206004820152601d60248201527f556e69737761705632466163746f7279206e6f7420646566696e65642e000000604482015260640161015c565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055606a805460ff8416600160a01b0260ff60a01b199091161790558015610c7a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610c886115a6565b8215801590610c9657508281145b610d085760405162461bcd60e51b815260206004820152603f60248201527f6c697374206f66207374726174656769657320656d707479206f72207768697460448201527f656c69737420646f6573206e6f74206d6174636820697473206c656e67746800606482015260840161015c565b60005b8381101561067057828282818110610d2557610d256130b6565b9050602002016020810190610d3a9190613231565b60686000878785818110610d5057610d506130b6565b9050602002016020810190610d659190612a95565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d97816131c7565b915050610d0b565b6001600160a01b038216600090815260686020526040812054819060ff16610dd95760405162461bcd60e51b815260040161015c9061324e565b6000610e33856389eabf0260e01b898988604051602401610dfc939291906132a0565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611681565b905080806020019051810190610e499190613183565b925092505094509492505050565b6001600160a01b038216600090815260686020526040812054819060ff16610e915760405162461bcd60e51b815260040161015c9061324e565b6000610e33856310badf4e60e01b898988604051602401610dfc939291906132a0565b610ebc6115a6565b6001600160a01b038116610f215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161015c565b610f2a81611600565b50565b606a54606954610140830151516000926001600160a01b0316919015610fd457610140840151515b8015610fd257610fbb8383876101400151600185610f7391906132c7565b81518110610f8357610f836130b6565b6020026020010151886101600151600186610f9e91906132c7565b81518110610fae57610fae6130b6565b6020026020010151610d9f565b909350915080610fca816132de565b915050610f55565b505b600084604001516001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103c9190613037565b9050806001600160a01b0316836001600160a01b0316146110d75760405162461bcd60e51b815260206004820152604960248201527f74686520646562742072657061796d656e742066756e64732073686f756c642060448201527f626520636f6e76657274656420746f2074686520756e6465726c79696e67206460648201526832b13a103a37b5b2b760b91b608482015260a40161015c565b846020015182101561112b5760405162461bcd60e51b815260206004820181905260248201527f646562742072657061796d656e7420616d6f756e74206e6f7420656e6f756768604482015260640161015c565b61113e8186604001518760200151611446565b6040858101518651602088015160608901519351637af1e23160e11b81526001600160a01b03928316600482015260248101919091529281166044840152169063f5e3c462906064016020604051808303816000875af11580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ca9190613054565b1561120d5760405162461bcd60e51b81526020600482015260136024820152722634b8bab4b230ba34b7b7103330b4b632b21760691b604482015260640161015c565b60608501516040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127c9190613054565b9050600081116112c35760405162461bcd60e51b815260206004820152601260248201527127379031aa37b5b2b7399039b2b4bd32b21760711b604482015260640161015c565b606086015160405163db006a7560e01b8152600481018390526000916001600160a01b03169063db006a75906024016020604051808303816000875af1158015611311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113359190613054565b905080156113ad576040805162461bcd60e51b81526020600482015260248101919091527f4572726f722063616c6c696e672072656465656d696e67207365697a6564206360448201527f546f6b656e3a206572726f7220636f6465206e6f7420657175616c20746f2030606482015260840161015c565b5050506113d384606001518560c001518660e0015187610100015188610120015161176c565b949350505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610c7a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261205e565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b3906044016020604051808303816000875af1158015611495573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a91906132f5565b6040516370a0823160e01b8152306004820152600090839082906001600160a01b038316906370a0823190602401602060405180830381865afa158015611504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115289190613054565b90508381101561158c5760405162461bcd60e51b815260206004820152602960248201527f4d696e696d756d20746f6b656e206f757470757420616d6f756e74206e6f742060448201526839b0ba34b334b2b21760b91b606482015260840161015c565b80156113d3576113d36001600160a01b0383163383612135565b6033546001600160a01b031633146106615760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161015c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166116795760405162461bcd60e51b815260040161015c90613312565b610661612165565b60606001600160a01b0383163b6116e95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161015c565b600080846001600160a01b031684604051611704919061335d565b600060405180830381855af49150503d806000811461173f576040519150601f19603f3d011682016040523d82523d6000602084013e611744565b606091505b5091509150610613828260405180606001604052806027815260200161357760279139612195565b606a54600090819061178a90600160a01b900460ff16612710613379565b61ffff1660695461271061179e919061339c565b6117a891906133d1565b606a549091506000906117c790600160a01b900460ff16612710613379565b61ffff166069546127106117db919061339c565b6117e591906133e5565b11156117f957806117f5816131c7565b9150505b6000876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185d9190613037565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb9190613054565b8651909150156119d55784518651146119725760405162461bcd60e51b815260206004820152605b60248201527f49526564656d7074696f6e537472617465677920636f6e74726163742061727260448201527f617920616e64207374726174656779206461746120627974657320617272617960648201527f206d6e75737420746865207468652073616d65206c656e6774682e0000000000608482015260a40161015c565b60005b86518110156119d3576119bc8383898481518110611995576119956130b6565b60200260200101518985815181106119af576119af6130b6565b6020026020010151610e57565b9093509150806119cb816131c7565b915050611975565b505b6000339050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3c9190613037565b6001600160a01b0316836001600160a01b03161480611acd5750806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab89190613037565b6001600160a01b0316836001600160a01b0316145b15611cf857606a546000906001600160a01b0385811691161415611af2575083611ba0565b611b838a6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b579190613037565b606954606a54611b719088906001600160a01b03166121d5565b606a54600160a01b900460ff16612262565b600081518110611b9557611b956130b6565b602002602001015190505b82811115611c165760405162461bcd60e51b815260206004820152603d60248201527f546f6b656e20666c6173686c6f616e2072657475726e20616d6f756e7420677260448201527f6561746572207468616e207365697a656420636f6c6c61746572616c2e000000606482015260840161015c565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0385169063a9059cbb906044016020604051808303816000875af1158015611c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8791906132f5565b611ceb5760405162461bcd60e51b815260206004820152602f60248201527f4661696c656420746f20726570617920746f6b656e20666c6173686c6f616e2060448201526e37b7103137b93937bb9039b4b2329760891b606482015260840161015c565b8395505050505050610613565b606554606a546000916001600160a01b0391821691161415611d1b575083611dbb565b611d9e8a6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d809190613037565b606554606a548891611b71916001600160a01b0391821691166121d5565b600081518110611db057611db06130b6565b602002602001015190505b6065546001600160a01b03858116911614611e6b57611ddb848a85611446565b6065546001600160a01b03808b1691638803dbee9184918791611e00918a91166121d5565b30426040518663ffffffff1660e01b8152600401611e229594939291906133f9565b6000604051808303816000875af1158015611e41573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e69919081019061346a565b505b6065546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed79190613054565b811115611f5d5760405162461bcd60e51b815260206004820152604860248201527f4e6f7420656e6f75676820575f4e41544956452065786368616e67656420667260448201527f6f6d207365697a656420636f6c6c61746572616c20746f20726570617920666c60648201526730b9b43637b0b71760c11b608482015260a40161015c565b60655460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd291906132f5565b611ceb5760405162461bcd60e51b815260206004820152605160248201527f4661696c656420746f20726570617920556e697377617020666c6173686c6f6160448201527f6e207769746820575f4e41544956452065786368616e6765642066726f6d207360648201527032b4bd32b21031b7b63630ba32b930b61760791b608482015260a40161015c565b60006120b3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123f99092919063ffffffff16565b80519091501561213057808060200190518101906120d191906132f5565b6121305760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161015c565b505050565b6040516001600160a01b03831660248201526044810182905261213090849063a9059cbb60e01b9060640161140f565b600054610100900460ff1661218c5760405162461bcd60e51b815260040161015c90613312565b61066133611600565b606083156121a45750816121ce565b8251156121b45782518084602001fd5b8160405162461bcd60e51b815260040161015c91906134ef565b9392505050565b60408051600280825260608083018452926000929190602083019080368337019050509050838160008151811061220e5761220e6130b6565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612242576122426130b6565b6001600160a01b0390921660209283029190910190910152905092915050565b60606002835110156122b65760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015260640161015c565b82516001600160401b038111156122cf576122cf612bed565b6040519080825280602002602001820160405280156122f8578160200160208202803683370190505b50905083816001835161230b91906132c7565b8151811061231b5761231b6130b6565b60200260200101818152505060006001845161233791906132c7565b90505b80156123f05760008061238a88876123536001876132c7565b81518110612363576123636130b6565b602002602001015188868151811061237d5761237d6130b6565b6020026020010151612408565b915091506123b38484815181106123a3576123a36130b6565b60200260200101518383886124d2565b846123bf6001866132c7565b815181106123cf576123cf6130b6565b602002602001018181525050505080806123e8906132de565b91505061233a565b50949350505050565b60606113d3848460008561260a565b600080600061241785856126da565b5090506000806124288888886127d2565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124899190613519565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146124c05780826124c3565b81815b90999098509650505050505050565b60008085116125385760405162461bcd60e51b815260206004820152602c60248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4f60448201526b155514155517d05353d5539560a21b606482015260840161015c565b6000841180156125485750600083115b6125a55760405162461bcd60e51b815260206004820152602860248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604482015267495155494449545960c01b606482015260840161015c565b60006125b1868661339c565b6125bd9061271061339c565b905060006125d060ff8516612710613379565b61ffff166125de88876132c7565b6125e8919061339c565b90506125f481836133d1565b6125ff90600161355e565b979650505050505050565b60608247101561266b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161015c565b600080866001600160a01b03168587604051612687919061335d565b60006040518083038185875af1925050503d80600081146126c4576040519150601f19603f3d011682016040523d82523d6000602084013e6126c9565b606091505b50915091506125ff87838387612848565b600080826001600160a01b0316846001600160a01b0316141561274d5760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b606482015260840161015c565b826001600160a01b0316846001600160a01b03161061276d578284612770565b83835b90925090506001600160a01b0382166127cb5760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015260640161015c565b9250929050565b60405163e6a4390560e01b81526001600160a01b03838116600483015282811660248301526000919085169063e6a4390590604401602060405180830381865afa158015612824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d39190613037565b606083156128b45782516128ad576001600160a01b0385163b6128ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015c565b50816113d3565b6113d383838151156128c95781518083602001fd5b8060405162461bcd60e51b815260040161015c91906134ef565b6001600160a01b0381168114610f2a57600080fd5b8035612903816128e3565b919050565b60008083601f84011261291a57600080fd5b5081356001600160401b0381111561293157600080fd5b6020830191508360208285010111156127cb57600080fd5b60008060008060006080868803121561296157600080fd5b853561296c816128e3565b9450602086013593506040860135925060608601356001600160401b0381111561299557600080fd5b6129a188828901612908565b969995985093965092949392505050565b600080600080600060a086880312156129ca57600080fd5b85356129d5816128e3565b94506020860135935060408601356129ec816128e3565b925060608601356129fc816128e3565b949793965091946080013592915050565b60008060208385031215612a2057600080fd5b82356001600160401b03811115612a3657600080fd5b612a4285828601612908565b90969095509350505050565b8015158114610f2a57600080fd5b60008060408385031215612a6f57600080fd5b8235612a7a816128e3565b91506020830135612a8a81612a4e565b809150509250929050565b600060208284031215612aa757600080fd5b81356121ce816128e3565b600060208284031215612ac457600080fd5b81356001600160401b03811115612ada57600080fd5b820161018081850312156121ce57600080fd5b600080600060608486031215612b0257600080fd5b8335612b0d816128e3565b92506020840135612b1d816128e3565b9150604084013560ff81168114612b3357600080fd5b809150509250925092565b60008083601f840112612b5057600080fd5b5081356001600160401b03811115612b6757600080fd5b6020830191508360208260051b85010111156127cb57600080fd5b60008060008060408587031215612b9857600080fd5b84356001600160401b0380821115612baf57600080fd5b612bbb88838901612b3e565b90965094506020870135915080821115612bd457600080fd5b50612be187828801612b3e565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b0381118282101715612c2657612c26612bed565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c5457612c54612bed565b604052919050565b600082601f830112612c6d57600080fd5b81356001600160401b03811115612c8657612c86612bed565b612c99601f8201601f1916602001612c2c565b818152846020838601011115612cae57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215612ce157600080fd5b8435612cec816128e3565b9350602085013592506040850135612d03816128e3565b915060608501356001600160401b03811115612d1e57600080fd5b612d2a87828801612c5c565b91505092959194509250565b60008085851115612d4657600080fd5b83861115612d5357600080fd5b5050820193919092039150565b60006001600160401b03821115612d7957612d79612bed565b5060051b60200190565b600082601f830112612d9457600080fd5b81356020612da9612da483612d60565b612c2c565b82815260059290921b84018101918181019086841115612dc857600080fd5b8286015b84811015612dec578035612ddf816128e3565b8352918301918301612dcc565b509695505050505050565b600082601f830112612e0857600080fd5b81356020612e18612da483612d60565b82815260059290921b84018101918181019086841115612e3757600080fd5b8286015b84811015612dec5780356001600160401b03811115612e5a5760008081fd5b612e688986838b0101612c5c565b845250918301918301612e3b565b600082601f830112612e8757600080fd5b81356020612e97612da483612d60565b82815260059290921b84018101918181019086841115612eb657600080fd5b8286015b84811015612dec578035612ecd816128e3565b8352918301918301612eba565b600060208284031215612eec57600080fd5b81356001600160401b0380821115612f0357600080fd5b908301906101808286031215612f1857600080fd5b612f20612c03565b612f29836128f8565b815260208301356020820152612f41604084016128f8565b6040820152612f52606084016128f8565b6060820152612f63608084016128f8565b608082015260a083013560a0820152612f7e60c084016128f8565b60c0820152612f8f60e084016128f8565b60e08201526101008084013583811115612fa857600080fd5b612fb488828701612d83565b8284015250506101208084013583811115612fce57600080fd5b612fda88828701612df7565b8284015250506101408084013583811115612ff457600080fd5b61300088828701612e76565b828401525050610160808401358381111561301a57600080fd5b61302688828701612df7565b918301919091525095945050505050565b60006020828403121561304957600080fd5b81516121ce816128e3565b60006020828403121561306657600080fd5b5051919050565b6000808335601e1984360301811261308457600080fd5b8301803591506001600160401b0382111561309e57600080fd5b6020019150600581901b36038213156127cb57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126130e357600080fd5b8301803591506001600160401b038211156130fd57600080fd5b6020019150368190038213156127cb57600080fd5b60005b8381101561312d578181015183820152602001613115565b83811115610c7a5750506000910152565b60008151808452613156816020860160208601613112565b601f01601f19169290920160200192915050565b8281526040602082015260006113d3604083018461313e565b6000806040838503121561319657600080fd5b82516131a1816128e3565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156131db576131db6131b1565b5060010190565b858152602081018590526001600160a01b03841660408201526080606082018190528101829052818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60006020828403121561324357600080fd5b81356121ce81612a4e565b60208082526032908201527f6f6e6c792077686974656c697374656420726564656d7074696f6e20737472616040820152711d1959da595cc818d85b881899481d5cd95960721b606082015260800190565b60018060a01b0384168152826020820152606060408201526000610613606083018461313e565b6000828210156132d9576132d96131b1565b500390565b6000816132ed576132ed6131b1565b506000190190565b60006020828403121561330757600080fd5b81516121ce81612a4e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000825161336f818460208701613112565b9190910192915050565b600061ffff83811690831681811015613394576133946131b1565b039392505050565b60008160001904831182151516156133b6576133b66131b1565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826133e0576133e06133bb565b500490565b6000826133f4576133f46133bb565b500690565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134495784516001600160a01b031683529383019391830191600101613424565b50506001600160a01b03969096166060850152505050608001529392505050565b6000602080838503121561347d57600080fd5b82516001600160401b0381111561349357600080fd5b8301601f810185136134a457600080fd5b80516134b2612da482612d60565b81815260059190911b820183019083810190878311156134d157600080fd5b928401925b828410156125ff578351825292840192908401906134d6565b6020815260006121ce602083018461313e565b80516001600160701b038116811461290357600080fd5b60008060006060848603121561352e57600080fd5b61353784613502565b925061354560208501613502565b9150604084015163ffffffff81168114612b3357600080fd5b60008219821115613571576135716131b1565b50019056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000a", + "sourceMap": "1277:20639:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8950:10;1476:19:448;8934:70:1;;;;-1:-1:-1;;;8934:70:1;;216:2:486;8934:70:1;;;198:21:486;255:2;235:18;;;228:30;294:27;274:18;;;267:55;339:18;;8934:70:1;;;;;;;;;1277:20639;;;;;9077:557;;;;;;;;;;-1:-1:-1;9077:557:1;;;;;:::i;:::-;;:::i;4136:780::-;;;;;;;;;;-1:-1:-1;4136:780:1;;;;;:::i;:::-;;:::i;:::-;;;2533:25:486;;;2521:2;2506:18;4136:780:1;;;;;;;;2845:63;;;;;;;;;;-1:-1:-1;2845:63:1;;;;;:::i;:::-;;;;16839:178;;;;;;;;;;-1:-1:-1;16839:178:1;;;;;:::i;:::-;;:::i;1949:61::-;;;;;;;;;;-1:-1:-1;1949:61:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3939:14:486;;3932:22;3914:41;;3902:2;3887:18;1949:61:1;3774:187:486;2071:101:436;;;;;;;;;;;;;:::i;9879:178:1:-;;;;;;;;;;-1:-1:-1;9879:178:1;;;;;:::i;:::-;;:::i;1496:31::-;;;;;;;;;;-1:-1:-1;1496:31:1;;;;-1:-1:-1;;;;;1496:31:1;;;;;;-1:-1:-1;;;;;4130:32:486;;;4112:51;;4100:2;4085:18;1496:31:1;3966:203:486;6895:1830:1;;;;;;;;;;-1:-1:-1;6895:1830:1;;;;;:::i;:::-;;:::i;2484:357::-;;;;;;;;;;-1:-1:-1;2484:357:1;;;;;:::i;:::-;;:::i;17276:449::-;;;;;;;;;;-1:-1:-1;17276:449:1;;;;;:::i;:::-;;:::i;1441:85:436:-;;;;;;;;;;-1:-1:-1;1513:6:436;;-1:-1:-1;;;;;1513:6:436;1441:85;;18677:573:1;;;;;;;;;;-1:-1:-1;18677:573:1;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;8549:32:486;;;8531:51;;8613:2;8598:18;;8591:34;;;;8504:18;18677:573:1;8329:302:486;18052:621:1;;;;;;;;;;-1:-1:-1;18052:621:1;;;;;:::i;:::-;;:::i;1630:46::-;;;;;;;;;;-1:-1:-1;1630:46:1;;;;-1:-1:-1;;;;;1630:46:1;;;2454:25;;;;;;;;;;-1:-1:-1;2454:25:1;;;;-1:-1:-1;;;2454:25:1;;;;;;;;;9771:4:486;9759:17;;;9741:36;;9729:2;9714:18;2454:25:1;9599:184:486;2321:198:436;;;;;;;;;;-1:-1:-1;2321:198:436;;;;;:::i;:::-;;:::i;9077:557:1:-;9320:46;9380:8;:4;9385:1;9380:4;;:8;:::i;:::-;9369:58;;;;;;;:::i;:::-;9320:107;;9604:25;9624:4;9604:19;:25::i;:::-;9570:31;:59;;-1:-1:-1;;;;;;9570:59:1;-1:-1:-1;;;;;9570:59:1;;;;;;;;;;-1:-1:-1;;;;;;9077:557:1:o;4136:780::-;4307:7;4411:1;4397:11;:15;4389:84;;;;-1:-1:-1;;;4389:84:1;;14865:2:486;4389:84:1;;;14847:21:486;14904:2;14884:18;;;14877:30;14943:34;14923:18;;;14916:62;15014:26;14994:18;;;14987:54;15058:19;;4389:84:1;14663:420:486;4389:84:1;4479:28;4528:6;-1:-1:-1;;;;;4528:17:1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4479:69;-1:-1:-1;4554:67:1;-1:-1:-1;;;;;4554:27:1;;4582:10;4602:4;4609:11;4554:27;:67::i;:::-;4627:53;4639:10;4659:6;4668:11;4627;:53::i;:::-;4694:72;;-1:-1:-1;;;4694:72:1;;-1:-1:-1;;;;;15602:15:486;;;4694:72:1;;;15584:34:486;15634:18;;;15627:34;;;15697:15;;;15677:18;;;15670:43;4694:22:1;;;;;15519:18:486;;4694:72:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;4686:109;;;;-1:-1:-1;;;4686:109:1;;16115:2:486;4686:109:1;;;16097:21:486;16154:2;16134:18;;;16127:30;-1:-1:-1;;;16173:18:486;;;16166:49;16232:18;;4686:109:1;15913:343:486;4686:109:1;4848:63;4876:16;4895:15;4848:19;:63::i;:::-;4841:70;;;4136:780;;;;;;;;:::o;16839:178::-;1334:13:436;:11;:13::i;:::-;-1:-1:-1;;;;;16950:48:1;;;::::1;;::::0;;;:29:::1;:48;::::0;;;;:62;;-1:-1:-1;;16950:62:1::1;::::0;::::1;;::::0;;;::::1;::::0;;16839:178::o;2071:101:436:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;9879:178:1:-;10007:45;10021:6;10029:7;10038;10047:4;;10007:13;:45::i;:::-;9879:178;;;;;:::o;6895:1830::-;7015:7;7083:1;7064:4;:16;;;:20;7056:69;;;;-1:-1:-1;;;7056:69:1;;16463:2:486;7056:69:1;;;16445:21:486;16502:2;16482:18;;;16475:30;16541:34;16521:18;;;16514:62;-1:-1:-1;;;16592:18:486;;;16585:34;16636:19;;7056:69:1;16261:400:486;7056:69:1;7348:16;;;;7324:21;;7410:26;;;;7348:4;7410:26;:::i;:::-;:33;;:37;7406:779;;;7511:30;;;;:4;:30;:::i;:::-;:37;-1:-1:-1;7474:26:1;;;;:4;:26;:::i;:::-;:33;;:74;7457:213;;;;-1:-1:-1;;;7457:213:1;;18013:2:486;7457:213:1;;;17995:21:486;18052:3;18032:18;;;18025:31;18092:34;18072:18;;;18065:62;18163:34;18143:18;;;18136:62;18235:34;18214:19;;;18207:63;-1:-1:-1;;;18286:19:486;;;18279:37;18333:19;;7457:213:1;17811:547:486;7457:213:1;7779:9;7774:308;7798:26;;;;:4;:26;:::i;:::-;:33;;7794:1;:37;7774:308;;;7848:25;7876:30;;;;:4;:30;:::i;:::-;7907:1;7876:33;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7848:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7848:61:1;;-1:-1:-1;7950:26:1;;-1:-1:-1;;;7950:26:1;;;;;:::i;:::-;7977:1;7950:29;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8021:52;;-1:-1:-1;;;8021:52:1;;7919:60;;-1:-1:-1;;;;;;8021:23:1;;;;;:52;;8045:13;;8060:12;;8021:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7989:84;-1:-1:-1;7989:84:1;-1:-1:-1;7833:3:1;;-1:-1:-1;7833:3:1;;-1:-1:-1;7833:3:1;;:::i;:::-;;;;7774:308;;;;7406:779;;;8151:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8135:40:1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8102:76;;7406:779;8273:16;:32;;;8311:15;:39;;-1:-1:-1;;;;;;8311:39:1;-1:-1:-1;;;;;8311:39:1;;;;;;;;-1:-1:-1;;8394:18:1;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8394:25:1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8394:52:1;;;-1:-1:-1;8452:18:1;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8452:23:1;;8483:29;:49;;8531:1;8483:49;;;8515:13;8483:49;8541:29;8540:30;:50;;8589:1;8540:50;;;8573:13;8540:50;8606:4;8619:8;;8452:181;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8647:73:1;;-1:-1:-1;8675:21:1;;-1:-1:-1;;8675:21:1;;;;;;;:::i;:::-;8699:4;:20;;;8647:19;:73::i;2484:357::-;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;22126:2:486;3314:201:439;;;22108:21:486;22165:2;22145:18;;;22138:30;22204:34;22184:18;;;22177:62;-1:-1:-1;;;22255:18:486;;;22248:44;22309:19;;3314:201:439;21924:410:486;3314:201:439;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;2611:16:1::1;:14;:16::i;:::-;-1:-1:-1::0;;;;;2641:30:1;::::1;2633:72;;;::::0;-1:-1:-1;;;2633:72:1;;22541:2:486;2633:72:1::1;::::0;::::1;22523:21:486::0;22580:2;22560:18;;;22553:30;22619:31;22599:18;;;22592:59;22668:18;;2633:72:1::1;22339:353:486::0;2633:72:1::1;2711:16;:26:::0;;-1:-1:-1;;;;;2711:26:1;;::::1;-1:-1:-1::0;;;;;;2711:26:1;;::::1;;::::0;;;2743:20:::1;:59:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;2808:12:::1;:28:::0;;::::1;::::0;::::1;-1:-1:-1::0;;;2808:28:1::1;-1:-1:-1::0;;;;2808:28:1;;::::1;;::::0;;3636:99:439;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;9741:36:486;;3710:14:439;;9729:2:486;9714:18;3710:14:439;;;;;;;3636:99;3258:483;2484:357:1;;;:::o;17276:449::-;1334:13:436;:11;:13::i;:::-;17438:21:1;;;;;:64:::1;;-1:-1:-1::0;17463:39:1;;::::1;17438:64;17423:158;;;::::0;-1:-1:-1;;;17423:158:1;;23098:2:486;17423:158:1::1;::::0;::::1;23080:21:486::0;23137:2;23117:18;;;23110:30;23176:34;23156:18;;;23149:62;23247:33;23227:18;;;23220:61;23298:19;;17423:158:1::1;22896:427:486::0;17423:158:1::1;17593:9;17588:133;17608:21:::0;;::::1;17588:133;;;17700:11;;17712:1;17700:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17644:29;:53;17682:10;;17693:1;17682:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17644:53:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17644:53:1;:70;;-1:-1:-1;;17644:70:1::1;::::0;::::1;;::::0;;;::::1;::::0;;17631:3;::::1;::::0;::::1;:::i;:::-;;;;17588:133;;18677:573:::0;-1:-1:-1;;;;;18896:48:1;;18854:17;18896:48;;;:29;:48;;;;;;18854:17;;18896:48;;18888:111;;;;-1:-1:-1;;;18888:111:1;;;;;;;:::i;:::-;19006:23;19032:148;19069:8;19109:25;;;19136:10;19148:11;19161:12;19086:88;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;19086:88:1;;;;;;;;;;;;;;-1:-1:-1;;;;;19086:88:1;-1:-1:-1;;;;;;19086:88:1;;;;;;;;;;19032:21;:148::i;:::-;19006:174;;19204:10;19193:52;;;;;;;;;;;;:::i;:::-;19186:59;;;;;18677:573;;;;;;;:::o;18052:621::-;-1:-1:-1;;;;;18295:48:1;;18253:17;18295:48;;;:29;:48;;;;;;18253:17;;18295:48;;18287:111;;;;-1:-1:-1;;;18287:111:1;;;;;;;:::i;:::-;18405:23;18431:172;18468:8;18508:24;;;18534:20;18556:26;18584:12;18485:112;;;;;;;;;;:::i;2321:198:436:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:436;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:436;;24894:2:486;2401:73:436::1;::::0;::::1;24876:21:486::0;24933:2;24913:18;;;24906:30;24972:34;24952:18;;;24945:62;-1:-1:-1;;;25023:18:486;;;25016:36;25069:19;;2401:73:436::1;24692:402:486::0;2401:73:436::1;2484:28;2503:8;2484:18;:28::i;:::-;2321:198:::0;:::o;10192:2091:1:-;10358:15;;10410:16;;10437:26;;;;:33;10286:7;;-1:-1:-1;;;;;10358:15:1;;10410:16;10437:37;10433:484;;10618:26;;;;:33;10601:310;10653:5;;10601:310;;10719:183;10749:18;10779:19;10810:4;:26;;;10841:1;10837;:5;;;;:::i;:::-;10810:33;;;;;;;;:::i;:::-;;;;;;;10855:4;:30;;;10890:1;10886;:5;;;;:::i;:::-;10855:37;;;;;;;;:::i;:::-;;;;;;;10719:18;:183::i;:::-;10675:227;;-1:-1:-1;10675:227:1;-1:-1:-1;10660:3:1;;;;:::i;:::-;;;;10601:310;;;;10433:484;11018:24;11045:4;:11;;;-1:-1:-1;;;;;11045:22:1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11018:51;;11125:16;-1:-1:-1;;;;;11094:47:1;11102:18;-1:-1:-1;;;;;11094:47:1;;11077:157;;;;-1:-1:-1;;;11077:157:1;;25572:2:486;11077:157:1;;;25554:21:486;25611:2;25591:18;;;25584:30;25650:34;25630:18;;;25623:62;25721:34;25701:18;;;25694:62;-1:-1:-1;;;25772:19:486;;;25765:40;25822:19;;11077:157:1;25370:477:486;11077:157:1;11273:4;:16;;;11250:19;:39;;11242:84;;;;-1:-1:-1;;;11242:84:1;;26054:2:486;11242:84:1;;;26036:21:486;;;26073:18;;;26066:30;26132:34;26112:18;;;26105:62;26184:18;;11242:84:1;25852:356:486;11242:84:1;11373:88;11403:16;11430:4;:11;;;11444:4;:16;;;11373:11;:88::i;:::-;11513:11;;;;;11541:13;;11556:16;;;;11582:21;;;;11513:92;;-1:-1:-1;;;11513:92:1;;-1:-1:-1;;;;;15602:15:486;;;11513:92:1;;;15584:34:486;15634:18;;;15627:34;;;;15697:15;;;15677:18;;;15670:43;11513:27:1;;;;15519:18:486;;11513:92:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:97;11496:153;;;;-1:-1:-1;;;11496:153:1;;16115:2:486;11496:153:1;;;16097:21:486;16154:2;16134:18;;;16127:30;-1:-1:-1;;;16173:18:486;;;16166:49;16232:18;;11496:153:1;15913:343:486;11496:153:1;11739:21;;;;:46;;-1:-1:-1;;;11739:46:1;;11779:4;11739:46;;;4112:51:486;11710:26:1;;-1:-1:-1;;;;;11739:31:1;;;;4085:18:486;;11739:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11710:75;;11822:1;11801:18;:22;11793:53;;;;-1:-1:-1;;;11793:53:1;;26415:2:486;11793:53:1;;;26397:21:486;26454:2;26434:18;;;26427:30;-1:-1:-1;;;26473:18:486;;;26466:48;26531:18;;11793:53:1;26213:342:486;11793:53:1;11877:21;;;;:48;;-1:-1:-1;;;11877:48:1;;;;;2533:25:486;;;11854:20:1;;-1:-1:-1;;;;;11877:28:1;;;;2506:18:486;;11877:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11854:71;-1:-1:-1;11941:17:1;;11933:94;;;;;-1:-1:-1;;;11933:94:1;;26762:2:486;11933:94:1;;;26744:21:486;26781:18;;;26774:30;;;;26840:34;26820:18;;;26813:62;26911:34;26891:18;;;26884:62;26963:19;;11933:94:1;26560:428:486;11933:94:1;11010:1024;;;12076:202;12105:4;:21;;;12136:4;:29;;;12175:4;:33;;;12218:4;:25;;;12253:4;:17;;;12076:19;:202::i;:::-;12063:215;10192:2091;-1:-1:-1;;;;10192:2091:1:o;1040:252:447:-;1216:68;;-1:-1:-1;;;;;27251:15:486;;;1216:68:447;;;27233:34:486;27303:15;;27283:18;;;27276:43;27335:18;;;27328:34;;;1189:96:447;;1209:5;;-1:-1:-1;;;1239:27:447;27168:18:486;;1216:68:447;;;;-1:-1:-1;;1216:68:447;;;;;;;;;;;;;;-1:-1:-1;;;;;1216:68:447;-1:-1:-1;;;;;;1216:68:447;;;;;;;;;;1189:19;:96::i;3368:134:1:-;3472:25;;-1:-1:-1;;;3472:25:1;;-1:-1:-1;;;;;8549:32:486;;;3472:25:1;;;8531:51:486;8598:18;;;8591:34;;;3472:13:1;;;;;8504:18:486;;3472:25:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5104:451::-;5307:30;;-1:-1:-1;;;5307:30:1;;5331:4;5307:30;;;4112:51:486;5199:7:1;;5258:13;;5199:7;;-1:-1:-1;;;;;5307:15:1;;;;;4085:18:486;;5307:30:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5278:59;;5373:15;5351:18;:37;;5343:91;;;;-1:-1:-1;;;5343:91:1;;28104:2:486;5343:91:1;;;28086:21:486;28143:2;28123:18;;;28116:30;28182:34;28162:18;;;28155:62;-1:-1:-1;;;28233:18:486;;;28226:39;28282:19;;5343:91:1;27902:405:486;5343:91:1;5444:22;;5440:78;;5468:50;-1:-1:-1;;;;;5468:18:1;;5487:10;5499:18;5468;:50::i;1599:130:436:-;1513:6;;-1:-1:-1;;;;;1513:6:436;929:10:449;1662:23:436;1654:68;;;;-1:-1:-1;;;1654:68:436;;28514:2:486;1654:68:436;;;28496:21:486;;;28533:18;;;28526:30;28592:34;28572:18;;;28565:62;28644:18;;1654:68:436;28312:356:486;2673:187:436;2765:6;;;-1:-1:-1;;;;;2781:17:436;;;-1:-1:-1;;;;;;2781:17:436;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1065:26:436::1;:24;:26::i;19568:419:1:-:0;19651:12;-1:-1:-1;;;;;1476:19:448;;;19671:88:1;;;;-1:-1:-1;;;19671:88:1;;29287:2:486;19671:88:1;;;29269:21:486;29326:2;29306:18;;;29299:30;29365:34;29345:18;;;29338:62;-1:-1:-1;;;29416:18:486;;;29409:36;29462:19;;19671:88:1;29085:402:486;19671:88:1;19822:12;19836:23;19863:6;-1:-1:-1;;;;;19863:19:1;19883:4;19863:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19821:67;;;;19901:81;19919:7;19928:10;19901:81;;;;;;;;;;;;;;;;;:17;:81::i;12334:4246::-;12730:12;;12604:7;;;;12722:20;;-1:-1:-1;;;12730:12:1;;;;12722:5;:20;:::i;:::-;12692:51;;12693:16;;12712:5;12693:24;;;;:::i;:::-;12692:51;;;;:::i;:::-;12791:12;;12660:83;;-1:-1:-1;12807:1:1;;12783:20;;-1:-1:-1;;;12791:12:1;;;;12783:5;:20;:::i;:::-;12753:51;;12754:16;;12773:5;12754:24;;;;:::i;:::-;12753:51;;;;:::i;:::-;:55;12749:84;;;12810:23;;;;:::i;:::-;;;;12749:84;12982:38;13057:16;-1:-1:-1;;;;;13041:45:1;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13132:45;;-1:-1:-1;;;13132:45:1;;13171:4;13132:45;;;4112:51:486;12982:107:1;;-1:-1:-1;13095:34:1;;-1:-1:-1;;;;;13132:30:1;;;;;4085:18:486;;13132:45:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13251:27;;13095:82;;-1:-1:-1;13251:31:1;13247:521;;13340:12;:19;13309:20;:27;:50;13292:178;;;;-1:-1:-1;;;13292:178:1;;30742:2:486;13292:178:1;;;30724:21:486;30781:2;30761:18;;;30754:30;30820:34;30800:18;;;30793:62;30891:34;30871:18;;;30864:62;30963:29;30942:19;;;30935:58;31010:19;;13292:178:1;30540:495:486;13292:178:1;13483:9;13478:283;13502:20;:27;13498:1;:31;13478:283;;;13597:164;13631:20;13663:26;13701:20;13722:1;13701:23;;;;;;;;:::i;:::-;;;;;;;13736:12;13749:1;13736:15;;;;;;;;:::i;:::-;;;;;;;13597:22;:164::i;:::-;13544:217;;-1:-1:-1;13544:217:1;-1:-1:-1;13531:3:1;;;;:::i;:::-;;;;13478:283;;;;13247:521;13774:19;13811:10;13774:48;;13937:4;-1:-1:-1;;;;;13937:11:1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13904:46:1;13912:20;-1:-1:-1;;;;;13904:46:1;;:96;;;;13987:4;-1:-1:-1;;;;;13987:11:1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13954:46:1;13962:20;-1:-1:-1;;;;;13954:46:1;;13904:96;13900:2676;;;14131:15;;14060:26;;-1:-1:-1;;;;;14098:48:1;;;14131:15;;14098:48;14094:483;;;-1:-1:-1;14223:21:1;14094:483;;;14338:227;14379:24;-1:-1:-1;;;;;14379:32:1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14425:16;;14515:15;;14478:53;;14492:20;;-1:-1:-1;;;;;14515:15:1;14478:5;:53::i;:::-;14543:12;;-1:-1:-1;;;14543:12:1;;;;14338:29;:227::i;:::-;14566:1;14338:230;;;;;;;;:::i;:::-;;;;;;;14317:251;;14094:483;14649:26;14627:18;:48;;14610:146;;;;-1:-1:-1;;;14610:146:1;;31242:2:486;14610:146:1;;;31224:21:486;31281:2;31261:18;;;31254:30;31320:34;31300:18;;;31293:62;31391:31;31371:18;;;31364:59;31440:19;;14610:146:1;31040:425:486;14610:146:1;14781:61;;-1:-1:-1;;;14781:61:1;;14811:10;14781:61;;;8531:51:486;8598:18;;;8591:34;;;-1:-1:-1;;;;;14781:29:1;;;;;8504:18:486;;14781:61:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14764:145;;;;-1:-1:-1;;;14764:145:1;;31672:2:486;14764:145:1;;;31654:21:486;31711:2;31691:18;;;31684:30;31750:34;31730:18;;;31723:62;-1:-1:-1;;;31801:18:486;;;31794:45;31856:19;;14764:145:1;31470:411:486;14764:145:1;14933:20;14918:36;;;;;;;;;13900:2676;15096:16;;15077:15;;15045:20;;-1:-1:-1;;;;;15077:15:1;;;15096:16;;15077:35;15073:385;;;-1:-1:-1;15139:21:1;15073:385;;;15252:194;15293:24;-1:-1:-1;;;;;15293:32:1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15378:16;;15396:15;;15339:21;;15372:40;;-1:-1:-1;;;;;15378:16:1;;;;15396:15;15372:5;:40::i;15252:194::-;15447:1;15252:197;;;;;;;;:::i;:::-;;;;;;;15237:212;;15073:385;15503:16;;-1:-1:-1;;;;;15470:49:1;;;15503:16;;15470:49;15466:544;;15568:100;15580:20;15610:28;15641:26;15568:11;:100::i;:::-;15922:16;;-1:-1:-1;;;;;15758:53:1;;;;;;15823:12;;15847:26;;15885:54;;15899:20;;15922:16;15885:5;:54::i;:::-;15959:4;15976:15;15758:243;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15758:243:1;;;;;;;;;;;;:::i;:::-;;15466:544;16094:16;;16076:60;;-1:-1:-1;;;16076:60:1;;16130:4;16076:60;;;4112:51:486;-1:-1:-1;;;;;16094:16:1;;;;16076:45;;4085:18:486;;16076:60:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16060:12;:76;;16043:185;;;;-1:-1:-1;;;16043:185:1;;33972:2:486;16043:185:1;;;33954:21:486;34011:2;33991:18;;;33984:30;34050:34;34030:18;;;34023:62;34121:34;34101:18;;;34094:62;-1:-1:-1;;;34172:19:486;;;34165:39;34221:19;;16043:185:1;33770:476:486;16043:185:1;16263:16;;16253:62;;-1:-1:-1;;;16253:62:1;;16290:10;16253:62;;;8531:51:486;8598:18;;;8591:34;;;-1:-1:-1;;;;;16263:16:1;;;;16253:36;;8504:18:486;;16253:62:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16236:180;;;;-1:-1:-1;;;16236:180:1;;34453:2:486;16236:180:1;;;34435:21:486;34492:2;34472:18;;;34465:30;34531:34;34511:18;;;34504:62;34602:34;34582:18;;;34575:62;-1:-1:-1;;;34653:19:486;;;34646:48;34711:19;;16236:180:1;34251:485:486;3868:717:447;4298:23;4324:69;4352:4;4324:69;;;;;;;;;;;;;;;;;4332:5;-1:-1:-1;;;;;4324:27:447;;;:69;;;;;:::i;:::-;4407:17;;4298:95;;-1:-1:-1;4407:21:447;4403:176;;4502:10;4491:30;;;;;;;;;;;;:::i;:::-;4483:85;;;;-1:-1:-1;;;4483:85:447;;34943:2:486;4483:85:447;;;34925:21:486;34982:2;34962:18;;;34955:30;35021:34;35001:18;;;34994:62;-1:-1:-1;;;35072:18:486;;;35065:40;35122:19;;4483:85:447;34741:406:486;4483:85:447;3949:636;3868:717;;:::o;818:216::-;968:58;;-1:-1:-1;;;;;8549:32:486;;968:58:447;;;8531:51:486;8598:18;;;8591:34;;;941:86:447;;961:5;;-1:-1:-1;;;991:23:447;8504:18:486;;968:58:447;8329:302:486;1104:111:436;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1176:32:436::1;929:10:449::0;1176:18:436::1;:32::i;20271:638:1:-:0;20403:12;20427:7;20423:482;;;-1:-1:-1;20451:10:1;20444:17;;20423:482;20546:17;;:21;20542:357;;20770:10;20764:17;20820:15;20807:10;20803:2;20799:19;20792:44;20542:357;20877:12;20870:20;;-1:-1:-1;;;20870:20:1;;;;;;;;:::i;20542:357::-;20271:638;;;;;:::o;21442:175::-;21548:16;;;21562:1;21548:16;;;21501;21548;;;;;21501;21525:20;;21548:16;21562:1;21548:16;;;;;;;;;;-1:-1:-1;21548:16:1;21525:39;;21579:1;21570:3;21574:1;21570:6;;;;;;;;:::i;:::-;;;;;;:10;-1:-1:-1;;;;;21570:10:1;;;-1:-1:-1;;;;;21570:10:1;;;;;21595:1;21586:3;21590:1;21586:6;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21586:10:1;;;:6;;;;;;;;;;;:10;21609:3;-1:-1:-1;21442:175:1;;;;:::o;3651:562:124:-;3795:24;3850:1;3835:4;:11;:16;;3827:59;;;;-1:-1:-1;;;3827:59:124;;35578:2:486;3827:59:124;;;35560:21:486;35617:2;35597:18;;;35590:30;35656:32;35636:18;;;35629:60;35706:18;;3827:59:124;35376:354:486;3827:59:124;3916:4;:11;-1:-1:-1;;;;;3902:26:124;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3902:26:124;;3892:36;;3964:9;3934:7;3959:1;3942:7;:14;:18;;;;:::i;:::-;3934:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;3984:9;4010:1;3996:4;:11;:15;;;;:::i;:::-;3984:27;;3979:230;4013:5;;3979:230;;4034:17;;4075:42;4087:7;4096:4;4101:5;4105:1;4101;:5;:::i;:::-;4096:11;;;;;;;;:::i;:::-;;;;;;;4109:4;4114:1;4109:7;;;;;;;;:::i;:::-;;;;;;;4075:11;:42::i;:::-;4033:84;;;;4142:60;4154:7;4162:1;4154:10;;;;;;;;:::i;:::-;;;;;;;4166:9;4177:10;4189:12;4142:11;:60::i;:::-;4125:7;4133:5;4137:1;4133;:5;:::i;:::-;4125:14;;;;;;;;:::i;:::-;;;;;;:77;;;;;4025:184;;4020:3;;;;;:::i;:::-;;;;3979:230;;;;3651:562;;;;;;:::o;3883:223:448:-;4016:12;4047:52;4069:6;4077:4;4083:1;4086:12;4047:21;:52::i;833:403:124:-;942:16;960;985:14;1005:26;1016:6;1024;1005:10;:26::i;:::-;984:47;;;1038:16;1056;1093:32;1101:7;1110:6;1118;1093:7;:32::i;:::-;-1:-1:-1;;;;;1078:60:124;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1037:103;-1:-1:-1;;;;;1037:103:124;;;-1:-1:-1;;;;;1037:103:124;;;1179:6;-1:-1:-1;;;;;1169:16:124;:6;-1:-1:-1;;;;;1169:16:124;;:62;;1212:8;1222;1169:62;;;1189:8;1199;1169:62;1146:85;;;;-1:-1:-1;833:403:124;-1:-1:-1;;;;;;;833:403:124:o;2454:507::-;2596:16;2640:1;2628:9;:13;2620:70;;;;-1:-1:-1;;;2620:70:124;;36585:2:486;2620:70:124;;;36567:21:486;36624:2;36604:18;;;36597:30;36663:34;36643:18;;;36636:62;-1:-1:-1;;;36714:18:486;;;36707:42;36766:19;;2620:70:124;36383:408:486;2620:70:124;2716:1;2704:9;:13;:31;;;;;2734:1;2721:10;:14;2704:31;2696:84;;;;-1:-1:-1;;;2696:84:124;;36998:2:486;2696:84:124;;;36980:21:486;37037:2;37017:18;;;37010:30;37076:34;37056:18;;;37049:62;-1:-1:-1;;;37127:18:486;;;37120:38;37175:19;;2696:84:124;36796:404:486;2696:84:124;2786:17;2806:21;2818:9;2806;:21;:::i;:::-;:29;;2830:5;2806:29;:::i;:::-;2786:49;-1:-1:-1;2841:19:124;2891:20;;;;:5;:20;:::i;:::-;2863:49;;2864:22;2877:9;2864:10;:22;:::i;:::-;2863:49;;;;:::i;:::-;2841:71;-1:-1:-1;2929:23:124;2841:71;2929:9;:23;:::i;:::-;:27;;2955:1;2929:27;:::i;:::-;2918:38;2454:507;-1:-1:-1;;;;;;;2454:507:124:o;4970:446:448:-;5135:12;5192:5;5167:21;:30;;5159:81;;;;-1:-1:-1;;;5159:81:448;;37540:2:486;5159:81:448;;;37522:21:486;37579:2;37559:18;;;37552:30;37618:34;37598:18;;;37591:62;-1:-1:-1;;;37669:18:486;;;37662:36;37715:19;;5159:81:448;37338:402:486;5159:81:448;5251:12;5265:23;5292:6;-1:-1:-1;;;;;5292:11:448;5311:5;5318:4;5292:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5250:73;;;;5340:69;5367:6;5375:7;5384:10;5396:12;5340:26;:69::i;260:331:124:-;335:14;351;391:6;-1:-1:-1;;;;;381:16:124;:6;-1:-1:-1;;;;;381:16:124;;;373:66;;;;-1:-1:-1;;;373:66:124;;37947:2:486;373:66:124;;;37929:21:486;37986:2;37966:18;;;37959:30;38025:34;38005:18;;;37998:62;-1:-1:-1;;;38076:18:486;;;38069:35;38121:19;;373:66:124;37745:401:486;373:66:124;473:6;-1:-1:-1;;;;;464:15:124;:6;-1:-1:-1;;;;;464:15:124;;:53;;502:6;510;464:53;;;483:6;491;464:53;445:72;;-1:-1:-1;445:72:124;-1:-1:-1;;;;;;531:20:124;;523:63;;;;-1:-1:-1;;;523:63:124;;38353:2:486;523:63:124;;;38335:21:486;38392:2;38372:18;;;38365:30;38431:32;38411:18;;;38404:60;38481:18;;523:63:124;38151:354:486;523:63:124;260:331;;;;;:::o;595:187::-;727:50;;-1:-1:-1;;;727:50:124;;-1:-1:-1;;;;;38740:15:486;;;727:50:124;;;38722:34:486;38792:15;;;38772:18;;;38765:43;700:12:124;;727:34;;;;;;38657:18:486;;727:50:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6588:628:448:-;6768:12;6796:7;6792:418;;;6823:17;;6819:286;;-1:-1:-1;;;;;1476:19:448;;;7030:60;;;;-1:-1:-1;;;7030:60:448;;39021:2:486;7030:60:448;;;39003:21:486;39060:2;39040:18;;;39033:30;39099:31;39079:18;;;39072:59;39148:18;;7030:60:448;38819:353:486;7030:60:448;-1:-1:-1;7125:10:448;7118:17;;6792:418;7166:33;7174:10;7186:12;7897:17;;:21;7893:379;;8125:10;8119:17;8181:15;8168:10;8164:2;8160:19;8153:44;7893:379;8248:12;8241:20;;-1:-1:-1;;;8241:20:448;;;;;;;;:::i;368:131:486:-;-1:-1:-1;;;;;443:31:486;;433:42;;423:70;;489:1;486;479:12;504:134;572:20;;601:31;572:20;601:31;:::i;:::-;504:134;;;:::o;643:347::-;694:8;704:6;758:3;751:4;743:6;739:17;735:27;725:55;;776:1;773;766:12;725:55;-1:-1:-1;799:20:486;;-1:-1:-1;;;;;831:30:486;;828:50;;;874:1;871;864:12;828:50;911:4;903:6;899:17;887:29;;963:3;956:4;947:6;939;935:19;931:30;928:39;925:59;;;980:1;977;970:12;995:681;1092:6;1100;1108;1116;1124;1177:3;1165:9;1156:7;1152:23;1148:33;1145:53;;;1194:1;1191;1184:12;1145:53;1233:9;1220:23;1252:31;1277:5;1252:31;:::i;:::-;1302:5;-1:-1:-1;1354:2:486;1339:18;;1326:32;;-1:-1:-1;1405:2:486;1390:18;;1377:32;;-1:-1:-1;1460:2:486;1445:18;;1432:32;-1:-1:-1;;;;;1476:30:486;;1473:50;;;1519:1;1516;1509:12;1473:50;1558:58;1608:7;1599:6;1588:9;1584:22;1558:58;:::i;:::-;995:681;;;;-1:-1:-1;995:681:486;;-1:-1:-1;1635:8:486;;1532:84;995:681;-1:-1:-1;;;995:681:486:o;1681:701::-;1810:6;1818;1826;1834;1842;1895:3;1883:9;1874:7;1870:23;1866:33;1863:53;;;1912:1;1909;1902:12;1863:53;1951:9;1938:23;1970:31;1995:5;1970:31;:::i;:::-;2020:5;-1:-1:-1;2072:2:486;2057:18;;2044:32;;-1:-1:-1;2128:2:486;2113:18;;2100:32;2141:33;2100:32;2141:33;:::i;:::-;2193:7;-1:-1:-1;2252:2:486;2237:18;;2224:32;2265:33;2224:32;2265:33;:::i;:::-;1681:701;;;;-1:-1:-1;1681:701:486;;2371:3;2356:19;2343:33;;1681:701;-1:-1:-1;;1681:701:486:o;2569:409::-;2639:6;2647;2700:2;2688:9;2679:7;2675:23;2671:32;2668:52;;;2716:1;2713;2706:12;2668:52;2756:9;2743:23;-1:-1:-1;;;;;2781:6:486;2778:30;2775:50;;;2821:1;2818;2811:12;2775:50;2860:58;2910:7;2901:6;2890:9;2886:22;2860:58;:::i;:::-;2937:8;;2834:84;;-1:-1:-1;2569:409:486;-1:-1:-1;;;;2569:409:486:o;2983:118::-;3069:5;3062:13;3055:21;3048:5;3045:32;3035:60;;3091:1;3088;3081:12;3106:411;3200:6;3208;3261:2;3249:9;3240:7;3236:23;3232:32;3229:52;;;3277:1;3274;3267:12;3229:52;3316:9;3303:23;3335:31;3360:5;3335:31;:::i;:::-;3385:5;-1:-1:-1;3442:2:486;3427:18;;3414:32;3455:30;3414:32;3455:30;:::i;:::-;3504:7;3494:17;;;3106:411;;;;;:::o;3522:247::-;3581:6;3634:2;3622:9;3613:7;3609:23;3605:32;3602:52;;;3650:1;3647;3640:12;3602:52;3689:9;3676:23;3708:31;3733:5;3708:31;:::i;4174:414::-;4287:6;4340:2;4328:9;4319:7;4315:23;4311:32;4308:52;;;4356:1;4353;4346:12;4308:52;4396:9;4383:23;-1:-1:-1;;;;;4421:6:486;4418:30;4415:50;;;4461:1;4458;4451:12;4415:50;4484:22;;4540:3;4522:16;;;4518:26;4515:46;;;4557:1;4554;4547:12;4593:553;4668:6;4676;4684;4737:2;4725:9;4716:7;4712:23;4708:32;4705:52;;;4753:1;4750;4743:12;4705:52;4792:9;4779:23;4811:31;4836:5;4811:31;:::i;:::-;4861:5;-1:-1:-1;4918:2:486;4903:18;;4890:32;4931:33;4890:32;4931:33;:::i;:::-;4983:7;-1:-1:-1;5042:2:486;5027:18;;5014:32;5090:4;5077:18;;5065:31;;5055:59;;5110:1;5107;5100:12;5055:59;5133:7;5123:17;;;4593:553;;;;;:::o;5151:388::-;5235:8;5245:6;5299:3;5292:4;5284:6;5280:17;5276:27;5266:55;;5317:1;5314;5307:12;5266:55;-1:-1:-1;5340:20:486;;-1:-1:-1;;;;;5372:30:486;;5369:50;;;5415:1;5412;5405:12;5369:50;5452:4;5444:6;5440:17;5428:29;;5512:3;5505:4;5495:6;5492:1;5488:14;5480:6;5476:27;5472:38;5469:47;5466:67;;;5529:1;5526;5519:12;5544:841;5692:6;5700;5708;5716;5769:2;5757:9;5748:7;5744:23;5740:32;5737:52;;;5785:1;5782;5775:12;5737:52;5825:9;5812:23;-1:-1:-1;;;;;5895:2:486;5887:6;5884:14;5881:34;;;5911:1;5908;5901:12;5881:34;5950:91;6033:7;6024:6;6013:9;6009:22;5950:91;:::i;:::-;6060:8;;-1:-1:-1;5924:117:486;-1:-1:-1;6148:2:486;6133:18;;6120:32;;-1:-1:-1;6164:16:486;;;6161:36;;;6193:1;6190;6183:12;6161:36;;6232:93;6317:7;6306:8;6295:9;6291:24;6232:93;:::i;:::-;5544:841;;;;-1:-1:-1;6344:8:486;-1:-1:-1;;;;5544:841:486:o;6390:127::-;6451:10;6446:3;6442:20;6439:1;6432:31;6482:4;6479:1;6472:15;6506:4;6503:1;6496:15;6522:255;6594:2;6588:9;6636:6;6624:19;;-1:-1:-1;;;;;6658:34:486;;6694:22;;;6655:62;6652:88;;;6720:18;;:::i;:::-;6756:2;6749:22;6522:255;:::o;6782:275::-;6853:2;6847:9;6918:2;6899:13;;-1:-1:-1;;6895:27:486;6883:40;;-1:-1:-1;;;;;6938:34:486;;6974:22;;;6935:62;6932:88;;;7000:18;;:::i;:::-;7036:2;7029:22;6782:275;;-1:-1:-1;6782:275:486:o;7062:530::-;7104:5;7157:3;7150:4;7142:6;7138:17;7134:27;7124:55;;7175:1;7172;7165:12;7124:55;7211:6;7198:20;-1:-1:-1;;;;;7233:2:486;7230:26;7227:52;;;7259:18;;:::i;:::-;7303:55;7346:2;7327:13;;-1:-1:-1;;7323:27:486;7352:4;7319:38;7303:55;:::i;:::-;7383:2;7374:7;7367:19;7429:3;7422:4;7417:2;7409:6;7405:15;7401:26;7398:35;7395:55;;;7446:1;7443;7436:12;7395:55;7511:2;7504:4;7496:6;7492:17;7485:4;7476:7;7472:18;7459:55;7559:1;7534:16;;;7552:4;7530:27;7523:38;;;;7538:7;7062:530;-1:-1:-1;;;7062:530:486:o;7597:727::-;7754:6;7762;7770;7778;7831:3;7819:9;7810:7;7806:23;7802:33;7799:53;;;7848:1;7845;7838:12;7799:53;7887:9;7874:23;7906:31;7931:5;7906:31;:::i;:::-;7956:5;-1:-1:-1;8008:2:486;7993:18;;7980:32;;-1:-1:-1;8064:2:486;8049:18;;8036:32;8077:33;8036:32;8077:33;:::i;:::-;8129:7;-1:-1:-1;8187:2:486;8172:18;;8159:32;-1:-1:-1;;;;;8203:30:486;;8200:50;;;8246:1;8243;8236:12;8200:50;8269:49;8310:7;8301:6;8290:9;8286:22;8269:49;:::i;:::-;8259:59;;;7597:727;;;;;;;:::o;9788:331::-;9893:9;9904;9946:8;9934:10;9931:24;9928:44;;;9968:1;9965;9958:12;9928:44;9997:6;9987:8;9984:20;9981:40;;;10017:1;10014;10007:12;9981:40;-1:-1:-1;;10043:23:486;;;10088:25;;;;;-1:-1:-1;9788:331:486:o;10124:204::-;10205:4;-1:-1:-1;;;;;10230:6:486;10227:30;10224:56;;;10260:18;;:::i;:::-;-1:-1:-1;10305:1:486;10301:14;10317:4;10297:25;;10124:204::o;10333:779::-;10408:5;10461:3;10454:4;10446:6;10442:17;10438:27;10428:55;;10479:1;10476;10469:12;10428:55;10515:6;10502:20;10541:4;10565:81;10581:64;10642:2;10581:64;:::i;:::-;10565:81;:::i;:::-;10680:15;;;10766:1;10762:10;;;;10750:23;;10746:32;;;10711:12;;;;10790:15;;;10787:35;;;10818:1;10815;10808:12;10787:35;10854:2;10846:6;10842:15;10866:217;10882:6;10877:3;10874:15;10866:217;;;10962:3;10949:17;10979:31;11004:5;10979:31;:::i;:::-;11023:18;;11061:12;;;;10899;;10866:217;;;-1:-1:-1;11101:5:486;10333:779;-1:-1:-1;;;;;;10333:779:486:o;11117:907::-;11169:5;11222:3;11215:4;11207:6;11203:17;11199:27;11189:55;;11240:1;11237;11230:12;11189:55;11276:6;11263:20;11302:4;11326:81;11342:64;11403:2;11342:64;:::i;11326:81::-;11441:15;;;11527:1;11523:10;;;;11511:23;;11507:32;;;11472:12;;;;11551:15;;;11548:35;;;11579:1;11576;11569:12;11548:35;11615:2;11607:6;11603:15;11627:368;11643:6;11638:3;11635:15;11627:368;;;11729:3;11716:17;-1:-1:-1;;;;;11752:11:486;11749:35;11746:125;;;11825:1;11854:2;11850;11843:14;11746:125;11896:56;11948:3;11943:2;11929:11;11921:6;11917:24;11913:33;11896:56;:::i;:::-;11884:69;;-1:-1:-1;11973:12:486;;;;11660;;11627:368;;12029:784;12109:5;12162:3;12155:4;12147:6;12143:17;12139:27;12129:55;;12180:1;12177;12170:12;12129:55;12216:6;12203:20;12242:4;12266:81;12282:64;12343:2;12282:64;:::i;12266:81::-;12381:15;;;12467:1;12463:10;;;;12451:23;;12447:32;;;12412:12;;;;12491:15;;;12488:35;;;12519:1;12516;12509:12;12488:35;12555:2;12547:6;12543:15;12567:217;12583:6;12578:3;12575:15;12567:217;;;12663:3;12650:17;12680:31;12705:5;12680:31;:::i;:::-;12724:18;;12762:12;;;;12600;;12567:217;;12818:1840;12929:6;12982:2;12970:9;12961:7;12957:23;12953:32;12950:52;;;12998:1;12995;12988:12;12950:52;13038:9;13025:23;-1:-1:-1;;;;;13108:2:486;13100:6;13097:14;13094:34;;;13124:1;13121;13114:12;13094:34;13147:22;;;;13203:6;13185:16;;;13181:29;13178:49;;;13223:1;13220;13213:12;13178:49;13249:22;;:::i;:::-;13294;13313:2;13294:22;:::i;:::-;13287:5;13280:37;13370:2;13366;13362:11;13349:25;13344:2;13337:5;13333:14;13326:49;13407:31;13434:2;13430;13426:11;13407:31;:::i;:::-;13402:2;13395:5;13391:14;13384:55;13471:31;13498:2;13494;13490:11;13471:31;:::i;:::-;13466:2;13459:5;13455:14;13448:55;13536:32;13563:3;13559:2;13555:12;13536:32;:::i;:::-;13530:3;13523:5;13519:15;13512:57;13623:3;13619:2;13615:12;13602:26;13596:3;13589:5;13585:15;13578:51;13662:32;13689:3;13685:2;13681:12;13662:32;:::i;:::-;13656:3;13649:5;13645:15;13638:57;13728:32;13755:3;13751:2;13747:12;13728:32;:::i;:::-;13722:3;13715:5;13711:15;13704:57;13780:3;13829:2;13825;13821:11;13808:25;13858:2;13848:8;13845:16;13842:36;;;13874:1;13871;13864:12;13842:36;13910:77;13979:7;13968:8;13964:2;13960:17;13910:77;:::i;:::-;13905:2;13898:5;13894:14;13887:101;;;14007:3;14056:2;14052;14048:11;14035:25;14085:2;14075:8;14072:16;14069:36;;;14101:1;14098;14091:12;14069:36;14137:54;14183:7;14172:8;14168:2;14164:17;14137:54;:::i;:::-;14132:2;14125:5;14121:14;14114:78;;;14211:3;14260:2;14256;14252:11;14239:25;14289:2;14279:8;14276:16;14273:36;;;14305:1;14302;14295:12;14273:36;14341:82;14415:7;14404:8;14400:2;14396:17;14341:82;:::i;:::-;14336:2;14329:5;14325:14;14318:106;;;14443:3;14492:2;14488;14484:11;14471:25;14521:2;14511:8;14508:16;14505:36;;;14537:1;14534;14527:12;14505:36;14573:54;14619:7;14608:8;14604:2;14600:17;14573:54;:::i;:::-;14557:14;;;14550:78;;;;-1:-1:-1;14561:5:486;12818:1840;-1:-1:-1;;;;;12818:1840:486:o;15088:251::-;15158:6;15211:2;15199:9;15190:7;15186:23;15182:32;15179:52;;;15227:1;15224;15217:12;15179:52;15259:9;15253:16;15278:31;15303:5;15278:31;:::i;15724:184::-;15794:6;15847:2;15835:9;15826:7;15822:23;15818:32;15815:52;;;15863:1;15860;15853:12;15815:52;-1:-1:-1;15886:16:486;;15724:184;-1:-1:-1;15724:184:486:o;16666:579::-;16793:4;16799:6;16859:11;16846:25;16953:2;16949:7;16938:8;16922:14;16918:29;16914:43;16894:18;16890:68;16880:96;;16972:1;16969;16962:12;16880:96;16999:33;;17051:20;;;-1:-1:-1;;;;;;17083:30:486;;17080:50;;;17126:1;17123;17116:12;17080:50;17159:4;17147:17;;-1:-1:-1;17210:1:486;17206:14;;;17190;17186:35;17176:46;;17173:66;;;17235:1;17232;17225:12;18363:127;18424:10;18419:3;18415:20;18412:1;18405:31;18455:4;18452:1;18445:15;18479:4;18476:1;18469:15;18495:521;18572:4;18578:6;18638:11;18625:25;18732:2;18728:7;18717:8;18701:14;18697:29;18693:43;18673:18;18669:68;18659:96;;18751:1;18748;18741:12;18659:96;18778:33;;18830:20;;;-1:-1:-1;;;;;;18862:30:486;;18859:50;;;18905:1;18902;18895:12;18859:50;18938:4;18926:17;;-1:-1:-1;18969:14:486;18965:27;;;18955:38;;18952:58;;;19006:1;19003;18996:12;19307:258;19379:1;19389:113;19403:6;19400:1;19397:13;19389:113;;;19479:11;;;19473:18;19460:11;;;19453:39;19425:2;19418:10;19389:113;;;19520:6;19517:1;19514:13;19511:48;;;-1:-1:-1;;19555:1:486;19537:16;;19530:27;19307:258::o;19570:257::-;19611:3;19649:5;19643:12;19676:6;19671:3;19664:19;19692:63;19748:6;19741:4;19736:3;19732:14;19725:4;19718:5;19714:16;19692:63;:::i;:::-;19809:2;19788:15;-1:-1:-1;;19784:29:486;19775:39;;;;19816:4;19771:50;;19570:257;-1:-1:-1;;19570:257:486:o;19832:288::-;20007:6;19996:9;19989:25;20050:2;20045;20034:9;20030:18;20023:30;19970:4;20070:44;20110:2;20099:9;20095:18;20087:6;20070:44;:::i;20125:340::-;20232:6;20240;20293:2;20281:9;20272:7;20268:23;20264:32;20261:52;;;20309:1;20306;20299:12;20261:52;20341:9;20335:16;20360:31;20385:5;20360:31;:::i;:::-;20455:2;20440:18;;;;20434:25;20410:5;;20434:25;;-1:-1:-1;;;20125:340:486:o;20470:127::-;20531:10;20526:3;20522:20;20519:1;20512:31;20562:4;20559:1;20552:15;20586:4;20583:1;20576:15;20602:135;20641:3;-1:-1:-1;;20662:17:486;;20659:43;;;20682:18;;:::i;:::-;-1:-1:-1;20729:1:486;20718:13;;20602:135::o;21287:632::-;21510:25;;;21566:2;21551:18;;21544:34;;;-1:-1:-1;;;;;21614:32:486;;21609:2;21594:18;;21587:60;21683:3;21678:2;21663:18;;21656:31;;;21703:19;;21696:35;;;21724:6;21774;21634:3;21753:19;;21740:49;21839:1;21809:22;;;21833:3;21805:32;;;21798:43;;;;21902:2;21881:15;;;-1:-1:-1;;21877:29:486;21862:45;21858:55;;21287:632;-1:-1:-1;;;;21287:632:486:o;23328:241::-;23384:6;23437:2;23425:9;23416:7;23412:23;23408:32;23405:52;;;23453:1;23450;23443:12;23405:52;23492:9;23479:23;23511:28;23533:5;23511:28;:::i;23855:414::-;24057:2;24039:21;;;24096:2;24076:18;;;24069:30;24135:34;24130:2;24115:18;;24108:62;-1:-1:-1;;;24201:2:486;24186:18;;24179:48;24259:3;24244:19;;23855:414::o;24274:413::-;24534:1;24530;24525:3;24521:11;24517:19;24509:6;24505:32;24494:9;24487:51;24574:6;24569:2;24558:9;24554:18;24547:34;24617:2;24612;24601:9;24597:18;24590:30;24468:4;24637:44;24677:2;24666:9;24662:18;24654:6;24637:44;:::i;25099:125::-;25139:4;25167:1;25164;25161:8;25158:34;;;25172:18;;:::i;:::-;-1:-1:-1;25209:9:486;;25099:125::o;25229:136::-;25268:3;25296:5;25286:39;;25305:18;;:::i;:::-;-1:-1:-1;;;25341:18:486;;25229:136::o;27652:245::-;27719:6;27772:2;27760:9;27751:7;27747:23;27743:32;27740:52;;;27788:1;27785;27778:12;27740:52;27820:9;27814:16;27839:28;27861:5;27839:28;:::i;28673:407::-;28875:2;28857:21;;;28914:2;28894:18;;;28887:30;28953:34;28948:2;28933:18;;28926:62;-1:-1:-1;;;29019:2:486;29004:18;;28997:41;29070:3;29055:19;;28673:407::o;29492:274::-;29621:3;29659:6;29653:13;29675:53;29721:6;29716:3;29709:4;29701:6;29697:17;29675:53;:::i;:::-;29744:16;;;;;29492:274;-1:-1:-1;;29492:274:486:o;29771:217::-;29810:4;29839:6;29895:10;;;;29865;;29917:12;;;29914:38;;;29932:18;;:::i;:::-;29969:13;;29771:217;-1:-1:-1;;;29771:217:486:o;29993:168::-;30033:7;30099:1;30095;30091:6;30087:14;30084:1;30081:21;30076:1;30069:9;30062:17;30058:45;30055:71;;;30106:18;;:::i;:::-;-1:-1:-1;30146:9:486;;29993:168::o;30166:127::-;30227:10;30222:3;30218:20;30215:1;30208:31;30258:4;30255:1;30248:15;30282:4;30279:1;30272:15;30298:120;30338:1;30364;30354:35;;30369:18;;:::i;:::-;-1:-1:-1;30403:9:486;;30298:120::o;30423:112::-;30455:1;30481;30471:35;;30486:18;;:::i;:::-;-1:-1:-1;30520:9:486;;30423:112::o;31886:972::-;32140:4;32188:3;32177:9;32173:19;32219:6;32208:9;32201:25;32245:2;32283:6;32278:2;32267:9;32263:18;32256:34;32326:3;32321:2;32310:9;32306:18;32299:31;32350:6;32385;32379:13;32416:6;32408;32401:22;32454:3;32443:9;32439:19;32432:26;;32493:2;32485:6;32481:15;32467:29;;32514:1;32524:195;32538:6;32535:1;32532:13;32524:195;;;32603:13;;-1:-1:-1;;;;;32599:39:486;32587:52;;32694:15;;;;32659:12;;;;32635:1;32553:9;32524:195;;;-1:-1:-1;;;;;;;32775:32:486;;;;32770:2;32755:18;;32748:60;-1:-1:-1;;;32839:3:486;32824:19;32817:35;32736:3;31886:972;-1:-1:-1;;;31886:972:486:o;32863:902::-;32958:6;32989:2;33032;33020:9;33011:7;33007:23;33003:32;33000:52;;;33048:1;33045;33038:12;33000:52;33081:9;33075:16;-1:-1:-1;;;;;33106:6:486;33103:30;33100:50;;;33146:1;33143;33136:12;33100:50;33169:22;;33222:4;33214:13;;33210:27;-1:-1:-1;33200:55:486;;33251:1;33248;33241:12;33200:55;33280:2;33274:9;33303:81;33319:64;33380:2;33319:64;:::i;33303:81::-;33418:15;;;33500:1;33496:10;;;;33488:19;;33484:28;;;33449:12;;;;33524:19;;;33521:39;;;33556:1;33553;33546:12;33521:39;33580:11;;;;33600:135;33616:6;33611:3;33608:15;33600:135;;;33682:10;;33670:23;;33633:12;;;;33713;;;;33600:135;;35152:219;35301:2;35290:9;35283:21;35264:4;35321:44;35361:2;35350:9;35346:18;35338:6;35321:44;:::i;35735:188::-;35814:13;;-1:-1:-1;;;;;35856:42:486;;35846:53;;35836:81;;35913:1;35910;35903:12;35928:450;36015:6;36023;36031;36084:2;36072:9;36063:7;36059:23;36055:32;36052:52;;;36100:1;36097;36090:12;36052:52;36123:40;36153:9;36123:40;:::i;:::-;36113:50;;36182:49;36227:2;36216:9;36212:18;36182:49;:::i;:::-;36172:59;;36274:2;36263:9;36259:18;36253:25;36318:10;36311:5;36307:22;36300:5;36297:33;36287:61;;36344:1;36341;36334:12;37205:128;37245:3;37276:1;37272:6;37269:1;37266:13;37263:39;;;37282:18;;:::i;:::-;-1:-1:-1;37318:9:486;;37205:128::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "UNISWAP_V2_ROUTER_02()": "ba8bca5a", + "W_NATIVE_ADDRESS()": "81738f13", + "_becomeImplementation(bytes)": "56e67728", + "_whitelistRedemptionStrategies(address[],bool[])": "8a0b9090", + "_whitelistRedemptionStrategy(address,bool)": "5a431365", + "convertCustomFunds(address,uint256,address,bytes)": "8ee8ca7d", + "flashSwapFee()": "c2ebfdc1", + "initialize(address,address,uint8)": "89232a00", + "moraswapCall(address,uint256,uint256,bytes)": "73ed8653", + "owner()": "8da5cb5b", + "pancakeCall(address,uint256,uint256,bytes)": "84800812", + "redeemCustomCollateral(address,uint256,address,bytes)": "b5966258", + "redemptionStrategiesWhitelist(address)": "5b672371", + "renounceOwnership()": "715018a6", + "safeLiquidate(address,uint256,address,address,uint256)": "20b72325", + "safeLiquidateToTokensWithFlashLoan((address,uint256,address,address,address,uint256,address,address,address[],bytes[],address[],bytes[]))": "87c8f348", + "transferOwnership(address)": "f2fde38b", + "uniswapV2Call(address,uint256,uint256,bytes)": "10d1e85c" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/IonicUniV3Liquidator.json b/packages/sdk/deployments/mode/IonicUniV3Liquidator.json new file mode 100644 index 0000000000..5b521d0081 --- /dev/null +++ b/packages/sdk/deployments/mode/IonicUniV3Liquidator.json @@ -0,0 +1,566 @@ +{ + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "W_NATIVE_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "whitelisted", + "type": "bool[]" + } + ], + "name": "_whitelistRedemptionStrategies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "name": "_whitelistRedemptionStrategy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wtoken", + "type": "address" + }, + { + "internalType": "address", + "name": "_quoter", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quoter", + "outputs": [ + { + "internalType": "contract IUniswapV3Quoter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "redemptionStrategiesWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minOutputAmount", + "type": "uint256" + } + ], + "name": "safeLiquidate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "flashSwapContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minProfitAmount", + "type": "uint256" + }, + { + "internalType": "contract IRedemptionStrategy[]", + "name": "redemptionStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategyData", + "type": "bytes[]" + }, + { + "internalType": "contract IFundsConversionStrategy[]", + "name": "debtFundingStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "debtFundingStrategiesData", + "type": "bytes[]" + } + ], + "internalType": "struct ILiquidator.LiquidateToTokensWithFlashSwapVars", + "name": "vars", + "type": "tuple" + } + ], + "name": "safeLiquidateToTokensWithFlashLoan", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fee0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3FlashCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "transactionIndex": 1, + "gasUsed": "815377", + "logsBloom": "0x10000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000080000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000000020001000000000000000040000004000000400000000000000000020000000000000000000000000000000000000000000000000040000008000000000", + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c", + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2625238, + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000b48221b8a1137895e384abcaff8120d053be43f5" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c" + }, + { + "transactionIndex": 1, + "blockNumber": 2625238, + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c" + }, + { + "transactionIndex": 1, + "blockNumber": 2625238, + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c" + }, + { + "transactionIndex": 1, + "blockNumber": 2625238, + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 3, + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c" + } + ], + "blockNumber": 2625238, + "cumulativeGasUsed": "862290", + "status": 1, + "byzantium": true + }, + "args": [ + "0xB48221b8a1137895e384aBcaFF8120d053Be43F5", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0x485cc95500000000000000000000000042000000000000000000000000000000000000060000000000000000000000007fd569b2021850fba53887dd07736010acbfc787" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x4200000000000000000000000000000000000006", + "0x7Fd569b2021850fbA53887dd07736010aCBFc787" + ] + }, + "implementation": "0xB48221b8a1137895e384aBcaFF8120d053Be43F5", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/IonicUniV3Liquidator_Implementation.json b/packages/sdk/deployments/mode/IonicUniV3Liquidator_Implementation.json new file mode 100644 index 0000000000..da3024c624 --- /dev/null +++ b/packages/sdk/deployments/mode/IonicUniV3Liquidator_Implementation.json @@ -0,0 +1,1008 @@ +{ + "address": "0xB48221b8a1137895e384aBcaFF8120d053Be43F5", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "W_NATIVE_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "whitelisted", + "type": "bool[]" + } + ], + "name": "_whitelistRedemptionStrategies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "name": "_whitelistRedemptionStrategy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wtoken", + "type": "address" + }, + { + "internalType": "address", + "name": "_quoter", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quoter", + "outputs": [ + { + "internalType": "contract IUniswapV3Quoter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "redemptionStrategiesWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minOutputAmount", + "type": "uint256" + } + ], + "name": "safeLiquidate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "flashSwapContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minProfitAmount", + "type": "uint256" + }, + { + "internalType": "contract IRedemptionStrategy[]", + "name": "redemptionStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategyData", + "type": "bytes[]" + }, + { + "internalType": "contract IFundsConversionStrategy[]", + "name": "debtFundingStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "debtFundingStrategiesData", + "type": "bytes[]" + } + ], + "internalType": "struct ILiquidator.LiquidateToTokensWithFlashSwapVars", + "name": "vars", + "type": "tuple" + } + ], + "name": "safeLiquidateToTokensWithFlashLoan", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fee0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3FlashCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x3b818db14daa883835030fd300b785428ae7c8c4e4523a919da84e20f0be4af9", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xB48221b8a1137895e384aBcaFF8120d053Be43F5", + "transactionIndex": 1, + "gasUsed": "2500883", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x9d12fe8982e4bdb88f156f1b9acc7c7636783cff3b298590dea31461eb8f1a82", + "transactionHash": "0x3b818db14daa883835030fd300b785428ae7c8c4e4523a919da84e20f0be4af9", + "logs": [], + "blockNumber": 2625234, + "cumulativeGasUsed": "2551384", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 2, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "W_NATIVE_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "whitelisted", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_whitelistRedemptionStrategies" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_whitelistRedemptionStrategy" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wtoken", + "type": "address" + }, + { + "internalType": "address", + "name": "_quoter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "quoter", + "outputs": [ + { + "internalType": "contract IUniswapV3Quoter", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minOutputAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "safeLiquidate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "struct ILiquidator.LiquidateToTokensWithFlashSwapVars", + "name": "vars", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "cErc20", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "flashSwapContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minProfitAmount", + "type": "uint256" + }, + { + "internalType": "contract IRedemptionStrategy[]", + "name": "redemptionStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategyData", + "type": "bytes[]" + }, + { + "internalType": "contract IFundsConversionStrategy[]", + "name": "debtFundingStrategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "debtFundingStrategiesData", + "type": "bytes[]" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "safeLiquidateToTokensWithFlashLoan", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fee0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "uniswapV3FlashCallback" + }, + { + "inputs": [], + "stateMutability": "payable", + "type": "receive" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_whitelistRedemptionStrategies(address[],bool[])": { + "details": "for security reasons only whitelisted redemption strategies may be used. Each whitelisted redemption strategy has to be checked to not be able to call `selfdestruct` with the `delegatecall` call in `redeemCustomCollateral`" + }, + "_whitelistRedemptionStrategy(address,bool)": { + "details": "for security reasons only whitelisted redemption strategies may be used. Each whitelisted redemption strategy has to be checked to not be able to call `selfdestruct` with the `delegatecall` call in `redeemCustomCollateral`" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeLiquidate(address,uint256,address,address,uint256)": { + "params": { + "borrower": "The borrower's Ethereum address.", + "cErc20": "The borrowed cErc20 to repay.", + "cTokenCollateral": "The cToken collateral to be liquidated.", + "minOutputAmount": "The minimum amount of collateral to seize (or the minimum exchange output if applicable) required for execution. Reverts if this condition is not met.", + "repayAmount": "The amount to repay to liquidate the unhealthy loan." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "uniswapV3FlashCallback(uint256,uint256,bytes)": { + "details": "Callback function for Uniswap flashloans." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "safeLiquidate(address,uint256,address,address,uint256)": { + "notice": "Safely liquidate an unhealthy loan (using capital from the sender), confirming that at least `minOutputAmount` in collateral is seized (or outputted by exchange if applicable)." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/IonicUniV3Liquidator.sol": "IonicUniV3Liquidator" + }, + "libraries": {} + }, + "sources": { + "contracts/ILiquidator.sol": { + "keccak256": "0x6cdcdfe316b1b4471bffd0af955707550e4cfcb87e191a704b0a82d27e0916ca", + "urls": [ + "bzz-raw://987dc2957a4207ef433d8ed85823a99179c8a3d0596c133d441e75f2b3c4c80f", + "dweb:/ipfs/QmNrCwfD3GfdmZRWUQDDUdiXYk1fDiK6TfkQXnK3dcSkso" + ], + "license": "UNLICENSED" + }, + "contracts/IonicUniV3Liquidator.sol": { + "keccak256": "0x5579a4a31d1358baa836d3ce937e1883a7b0ed1b52dd74d2e0f84bd7bbb49cde", + "urls": [ + "bzz-raw://2f2b8bcb72b5ad4da1c512cbbf28d7c987202405b84f2c1de94acc3f350e3724", + "dweb:/ipfs/QmRrGsdwBmoFbD5Lh14jwfbeXVe6pBGbdSx2grTFznaKoq" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV3FlashCallback.sol": { + "keccak256": "0xbc26730db16259a49c30bd7bd880bb7e48ad94853087a373ba787e406ca969f3", + "urls": [ + "bzz-raw://1aeb5932c5512c6b31253a40186fbb2323ec1a767b2d02e79b3978e77b8839a3", + "dweb:/ipfs/QmZ7pLgEgrMdA76LVNkjNZTxGAn58hajiW4btfyJi6VL8F" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/external/uniswap/IUniswapV3Pool.sol": { + "keccak256": "0x815e94e8e575e572117cf045489c699e2e0cb56b7d2dd1a9adb1b0b1f8ac25e1", + "urls": [ + "bzz-raw://534fe33dbc8e307f2147cc69d29a355286a771df150bed70c4c374ea7febb6c1", + "dweb:/ipfs/QmWohCBjoNJ4EvnagKDAXMdbWKQfkzy6b38nv4MiA954kP" + ], + "license": "GPL-3.0-only" + }, + "contracts/external/uniswap/IUniswapV3PoolActions.sol": { + "keccak256": "0x01e66a0dca41f6e36bc20da4f66ff0e47b6b09ee9dcf59ce272a6e15a6c91a19", + "urls": [ + "bzz-raw://95ee248454c4ebf271eccb55e75a7d8dda95fa5d5b7a79663fafda8aafc33f48", + "dweb:/ipfs/QmNRebYSFFqF5YDAwLRHWhkVKXXkG14WZG9DBFUz6JvYzv" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/external/uniswap/quoter/interfaces/IUniswapV3Quoter.sol": { + "keccak256": "0xfebe8703ca93969f7314c5eefcd48125059abaa94182dac93ae202e761055d88", + "urls": [ + "bzz-raw://0f4e9637fbbfb9827b7618a526e77aed7aaaeeac8171ffabf10c63750e47c110", + "dweb:/ipfs/QmQSka5JJRCETfpf2zxWbATGM9tMpcEVMNqYTwcPMwRYCw" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50612c46806100206000396000f3fe6080604052600436106100ab5760003560e01c806381738f131161006457806381738f13146101f25780638a0b90901461022a5780638da5cb5b1461024a578063c6bbd5a714610268578063e9cbafb014610288578063f2fde38b146102a857600080fd5b806320b723251461010a578063485cc9551461013d57806355e9e8fe1461015d5780635a4313651461017d5780635b6723711461019d578063715018a6146101dd57600080fd5b3661010557333b6101035760405162461bcd60e51b815260206004820152601960248201527f53656e646572206973206e6f74206120636f6e74726163742e0000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561011657600080fd5b5061012a6101253660046122ad565b6102c8565b6040519081526020015b60405180910390f35b34801561014957600080fd5b50610103610158366004612308565b610503565b34801561016957600080fd5b5061012a610178366004612341565b610646565b34801561018957600080fd5b5061010361019836600461238b565b610a9d565b3480156101a957600080fd5b506101cd6101b83660046123b9565b60696020526000908152604090205460ff1681565b6040519015158152602001610134565b3480156101e957600080fd5b50610103610ad0565b3480156101fe57600080fd5b50606854610212906001600160a01b031681565b6040516001600160a01b039091168152602001610134565b34801561023657600080fd5b50610103610245366004612422565b610ae4565b34801561025657600080fd5b506033546001600160a01b0316610212565b34801561027457600080fd5b50606a54610212906001600160a01b031681565b34801561029457600080fd5b506101036102a336600461248e565b610c0a565b3480156102b457600080fd5b506101036102c33660046123b9565b610c5a565b600080851161033f5760405162461bcd60e51b815260206004820152603860248201527f526570617920616d6f756e7420287472616e73616374696f6e2076616c75652960448201527f206d7573742062652067726561746572207468616e20302e000000000000000060648201526084016100fa565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561037f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a3919061250e565b90506103ba6001600160a01b038216333089610cd3565b60405163095ea7b360e01b81526001600160a01b0386811660048301526024820188905282169063095ea7b3906044016020604051808303816000875af1158015610409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042d919061252b565b50604051637af1e23160e11b81526001600160a01b03888116600483015260248201889052858116604483015286169063f5e3c462906064016020604051808303816000875af1158015610485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a99190612548565b156104ec5760405162461bcd60e51b81526020600482015260136024820152722634b8bab4b230ba34b7b7103330b4b632b21760691b60448201526064016100fa565b6104f68484610d44565b9150505b95945050505050565b600054610100900460ff16158080156105235750600054600160ff909116105b8061053d5750303b15801561053d575060005460ff166001145b6105a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016100fa565b6000805460ff1916600117905580156105c3576000805461ff0019166101001790555b6105cb610e39565b606880546001600160a01b038086166001600160a01b031992831617909255606a8054928516929091169190911790558015610641576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000808260200135116106a75760405162461bcd60e51b8152602060048201526024808201527f526570617920616d6f756e74206d7573742062652067726561746572207468616044820152633710181760e11b60648201526084016100fa565b60208201356000806106bd610100860186612561565b905011156108d4576106d3610120850185612561565b90506106e3610100860186612561565b90501461078d5760405162461bcd60e51b815260206004820152606660248201527f46756e64696e67204946756e6473436f6e76657273696f6e537472617465677960448201527f20636f6e747261637420617272617920616e642073747261746567792064617460648201527f61206279746573206172726179206d757374206265207468652073616d65206c60848201526532b733ba341760d11b60a482015260c4016100fa565b60005b61079e610100860186612561565b90508110156108ce5760006107b7610120870187612561565b838181106107c7576107c76125ab565b90506020028101906107d991906125c1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093945061081e92505050610100880188612561565b8481811061082e5761082e6125ab565b905060200201602081019061084391906123b9565b60405163180994cb60e11b81529091506001600160a01b038216906330132996906108749088908690600401612660565b6040805180830381865afa158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b49190612679565b955093508291506108c69050816126bd565b915050610790565b50610948565b6108e460608501604086016123b9565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610921573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610945919061250e565b90505b6066829055606780546001600160a01b0319166001600160a01b038316179055600061097a60a08601608087016123b9565b90506000826001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea919061250e565b6001600160a01b0316149050816001600160a01b031663490e6cbc3083610a12576000610a14565b865b8415610a21576000610a23565b875b6000366040518663ffffffff1660e01b8152600401610a469594939291906126d8565b600060405180830381600087803b158015610a6057600080fd5b505af1158015610a74573d6000803e3d6000fd5b5050606554610a9392506001600160a01b0316905060a0880135610d44565b9695505050505050565b610aa5610e68565b6001600160a01b03919091166000908152606960205260409020805460ff1916911515919091179055565b610ad8610e68565b610ae26000610ec2565b565b610aec610e68565b8215801590610afa57508281145b610b6c5760405162461bcd60e51b815260206004820152603f60248201527f6c697374206f66207374726174656769657320656d707479206f72207768697460448201527f656c69737420646f6573206e6f74206d6174636820697473206c656e6774680060648201526084016100fa565b60005b83811015610c0357828282818110610b8957610b896125ab565b9050602002016020810190610b9e9190612724565b60696000878785818110610bb457610bb46125ab565b9050602002016020810190610bc991906123b9565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610bfb816126bd565b915050610b6f565b5050505050565b6000610c198260048186612741565b810190610c269190612958565b9050610c33818686610f14565b606580546001600160a01b0319166001600160a01b03929092169190911790555050505050565b610c62610e68565b6001600160a01b038116610cc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100fa565b610cd081610ec2565b50565b6040516001600160a01b0380851660248301528316604482015260648101829052610d3e9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611428565b50505050565b6040516370a0823160e01b8152306004820152600090839082906001600160a01b038316906370a0823190602401602060405180830381865afa158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db39190612548565b905083811015610e175760405162461bcd60e51b815260206004820152602960248201527f4d696e696d756d20746f6b656e206f757470757420616d6f756e74206e6f742060448201526839b0ba34b334b2b21760b91b60648201526084016100fa565b8015610e3157610e316001600160a01b03831633836114fa565b949350505050565b600054610100900460ff16610e605760405162461bcd60e51b81526004016100fa90612a90565b610ae261152a565b6033546001600160a01b03163314610ae25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016100fa565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606754606654610100850151516000926001600160a01b0316919015610fbb57610100860151515b8015610fb957610fa28383896101000151600185610f5a9190612adb565b81518110610f6a57610f6a6125ab565b60200260200101518a6101200151600186610f859190612adb565b81518110610f9557610f956125ab565b602002602001015161155a565b909350915080610fb181612af2565b915050610f3c565b505b600086604001516001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611023919061250e565b9050806001600160a01b0316836001600160a01b0316146110be5760405162461bcd60e51b815260206004820152604960248201527f74686520646562742072657061796d656e742066756e64732073686f756c642060448201527f626520636f6e76657274656420746f2074686520756e6465726c79696e67206460648201526832b13a103a37b5b2b760b91b608482015260a4016100fa565b86602001518210156111125760405162461bcd60e51b815260206004820181905260248201527f646562742072657061796d656e7420616d6f756e74206e6f7420656e6f75676860448201526064016100fa565b6040808801516020890151915163095ea7b360e01b81526001600160a01b039182166004820152602481019290925282169063095ea7b3906044016020604051808303816000875af115801561116c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611190919061252b565b50604087810151885160208a015160608b01519351637af1e23160e11b81526001600160a01b03928316600482015260248101919091529281166044840152169063f5e3c462906064016020604051808303816000875af11580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190612548565b156112605760405162461bcd60e51b81526020600482015260136024820152722634b8bab4b230ba34b7b7103330b4b632b21760691b60448201526064016100fa565b60608701516040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf9190612548565b9050600081116113165760405162461bcd60e51b815260206004820152601260248201527127379031aa37b5b2b7399039b2b4bd32b21760711b60448201526064016100fa565b606088015160405163db006a7560e01b8152600481018390526000916001600160a01b03169063db006a75906024016020604051808303816000875af1158015611364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113889190612548565b90508015611400576040805162461bcd60e51b81526020600482015260248101919091527f4572726f722063616c6c696e672072656465656d696e67207365697a6564206360448201527f546f6b656e3a206572726f7220636f6465206e6f7420657175616c20746f203060648201526084016100fa565b50505061141c86606001518760c001518860e001518888611612565b925050505b9392505050565b600061147d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f829092919063ffffffff16565b805190915015610641578080602001905181019061149b919061252b565b6106415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016100fa565b6040516001600160a01b03831660248201526044810182905261064190849063a9059cbb60e01b90606401610d07565b600054610100900460ff166115515760405162461bcd60e51b81526004016100fa90612a90565b610ae233610ec2565b6001600160a01b038216600090815260696020526040812054819060ff166115945760405162461bcd60e51b81526004016100fa90612b09565b60006115ee856389eabf0260e01b8989886040516024016115b793929190612b5b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f91565b9050808060200190518101906116049190612679565b925092505094509492505050565b60665460675460408051630dfe168160e01b81529051600093339390926001600160a01b03909116918491630dfe16819160048083019260209291908290030181865afa158015611667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168b919061250e565b6001600160a01b031614156116ab576116a48582612b82565b905061177b565b6067546040805163d21220a760e01b815290516001600160a01b0390921691339163d21220a79160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a919061250e565b6001600160a01b03161415611733576116a48482612b82565b60405162461bcd60e51b815260206004820152601d60248201527f77726f6e6720706f6f6c206f72205f666c61736853776170546f6b656e00000060448201526064016100fa565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117df919061250e565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d9190612548565b8951909150156119575787518951146118f45760405162461bcd60e51b815260206004820152605b60248201527f49526564656d7074696f6e537472617465677920636f6e74726163742061727260448201527f617920616e64207374726174656779206461746120627974657320617272617960648201527f206d6e75737420746865207468652073616d65206c656e6774682e0000000000608482015260a4016100fa565b60005b89518110156119555761193e83838c8481518110611917576119176125ab565b60200260200101518c8581518110611931576119316125ab565b602002602001015161207c565b90935091508061194d816126bd565b9150506118f7565b505b836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b9919061250e565b6001600160a01b0316826001600160a01b03161480611a4a5750836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a35919061250e565b6001600160a01b0316826001600160a01b0316145b15611f05576067546000906001600160a01b0384811691161415611ae6575060675460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018690528592169063a9059cbb906044016020604051808303816000875af1158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae0919061252b565b50611ef8565b6000856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4a919061250e565b606a546001600160a01b03918216868316149250166330d07f2182611bd057876001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcb919061250e565b611c32565b876001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c32919061250e565b83611c9e57886001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c99919061250e565b611d00565b886001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d00919061250e565b896001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d629190612b9a565b6066546040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af1158015611dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dee9190612548565b915082821115611e665760405162461bcd60e51b815260206004820152603d60248201527f546f6b656e20666c6173686c6f616e2072657475726e20616d6f756e7420677260448201527f6561746572207468616e207365697a656420636f6c6c61746572616c2e00000060648201526084016100fa565b604051630251596160e31b81526001600160a01b0387166004820181905282151560248301526044820184905260006064830181905260a0608484015260a48301529063128acb089060c40160408051808303816000875af1158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef49190612bbf565b5050505b82955050505050506104fa565b60405162461bcd60e51b815260206004820152604660248201527f74686520726564656d7074696f6e7320737472617465677920646964206e6f7460448201527f207377617020746f2074686520666c617368207377617070656420706f6f6c2060648201526561737365747360d01b608482015260a4016100fa565b6060610e3184846000856120d9565b60606001600160a01b0383163b611ff95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016100fa565b600080846001600160a01b0316846040516120149190612be3565b600060405180830381855af49150503d806000811461204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b50915091506104fa8282604051806060016040528060278152602001612c13602791396121b4565b6001600160a01b038216600090815260696020526040812054819060ff166120b65760405162461bcd60e51b81526004016100fa90612b09565b60006115ee856310badf4e60e01b8989886040516024016115b793929190612b5b565b60608247101561213a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016100fa565b600080866001600160a01b031685876040516121569190612be3565b60006040518083038185875af1925050503d8060008114612193576040519150601f19603f3d011682016040523d82523d6000602084013e612198565b606091505b50915091506121a9878383876121ed565b979650505050505050565b606083156121c3575081611421565b8251156121d35782518084602001fd5b8160405162461bcd60e51b81526004016100fa9190612bff565b60608315612259578251612252576001600160a01b0385163b6122525760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016100fa565b5081610e31565b610e31838381511561226e5781518083602001fd5b8060405162461bcd60e51b81526004016100fa9190612bff565b6001600160a01b0381168114610cd057600080fd5b80356122a881612288565b919050565b600080600080600060a086880312156122c557600080fd5b85356122d081612288565b94506020860135935060408601356122e781612288565b925060608601356122f781612288565b949793965091946080013592915050565b6000806040838503121561231b57600080fd5b823561232681612288565b9150602083013561233681612288565b809150509250929050565b60006020828403121561235357600080fd5b813567ffffffffffffffff81111561236a57600080fd5b8201610140818503121561142157600080fd5b8015158114610cd057600080fd5b6000806040838503121561239e57600080fd5b82356123a981612288565b915060208301356123368161237d565b6000602082840312156123cb57600080fd5b813561142181612288565b60008083601f8401126123e857600080fd5b50813567ffffffffffffffff81111561240057600080fd5b6020830191508360208260051b850101111561241b57600080fd5b9250929050565b6000806000806040858703121561243857600080fd5b843567ffffffffffffffff8082111561245057600080fd5b61245c888389016123d6565b9096509450602087013591508082111561247557600080fd5b50612482878288016123d6565b95989497509550505050565b600080600080606085870312156124a457600080fd5b8435935060208501359250604085013567ffffffffffffffff808211156124ca57600080fd5b818701915087601f8301126124de57600080fd5b8135818111156124ed57600080fd5b8860208285010111156124ff57600080fd5b95989497505060200194505050565b60006020828403121561252057600080fd5b815161142181612288565b60006020828403121561253d57600080fd5b81516114218161237d565b60006020828403121561255a57600080fd5b5051919050565b6000808335601e1984360301811261257857600080fd5b83018035915067ffffffffffffffff82111561259357600080fd5b6020019150600581901b360382131561241b57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126125d857600080fd5b83018035915067ffffffffffffffff8211156125f357600080fd5b60200191503681900382131561241b57600080fd5b60005b8381101561262357818101518382015260200161260b565b83811115610d3e5750506000910152565b6000815180845261264c816020860160208601612608565b601f01601f19169290920160200192915050565b828152604060208201526000610e316040830184612634565b6000806040838503121561268c57600080fd5b825161269781612288565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156126d1576126d16126a7565b5060010190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60006020828403121561273657600080fd5b81356114218161237d565b6000808585111561275157600080fd5b8386111561275e57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff811182821017156127a5576127a561276b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156127d4576127d461276b565b604052919050565b600067ffffffffffffffff8211156127f6576127f661276b565b5060051b60200190565b600082601f83011261281157600080fd5b81356020612826612821836127dc565b6127ab565b82815260059290921b8401810191818101908684111561284557600080fd5b8286015b8481101561286957803561285c81612288565b8352918301918301612849565b509695505050505050565b6000601f838184011261288657600080fd5b82356020612896612821836127dc565b82815260059290921b850181019181810190878411156128b557600080fd5b8287015b8481101561294c57803567ffffffffffffffff808211156128da5760008081fd5b818a0191508a603f8301126128ef5760008081fd5b858201356040828211156129055761290561276b565b612916828b01601f191689016127ab565b92508183528c8183860101111561292d5760008081fd5b81818501898501375060009082018701528452509183019183016128b9565b50979650505050505050565b60006020828403121561296a57600080fd5b813567ffffffffffffffff8082111561298257600080fd5b90830190610140828603121561299757600080fd5b61299f612781565b6129a88361229d565b8152602083013560208201526129c06040840161229d565b60408201526129d16060840161229d565b60608201526129e26080840161229d565b608082015260a083013560a082015260c083013582811115612a0357600080fd5b612a0f87828601612800565b60c08301525060e083013582811115612a2757600080fd5b612a3387828601612874565b60e0830152506101008084013583811115612a4d57600080fd5b612a5988828701612800565b8284015250506101208084013583811115612a7357600080fd5b612a7f88828701612874565b918301919091525095945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082821015612aed57612aed6126a7565b500390565b600081612b0157612b016126a7565b506000190190565b60208082526032908201527f6f6e6c792077686974656c697374656420726564656d7074696f6e20737472616040820152711d1959da595cc818d85b881899481d5cd95960721b606082015260800190565b60018060a01b03841681528260208201526060604082015260006104fa6060830184612634565b60008219821115612b9557612b956126a7565b500190565b600060208284031215612bac57600080fd5b815162ffffff8116811461142157600080fd5b60008060408385031215612bd257600080fd5b505080516020909101519092909150565b60008251612bf5818460208701612608565b9190910192915050565b602081526000611421602083018461263456fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000a", + "sourceMap": "1011:15560:2:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052600436106100ab5760003560e01c806381738f131161006457806381738f13146101f25780638a0b90901461022a5780638da5cb5b1461024a578063c6bbd5a714610268578063e9cbafb014610288578063f2fde38b146102a857600080fd5b806320b723251461010a578063485cc9551461013d57806355e9e8fe1461015d5780635a4313651461017d5780635b6723711461019d578063715018a6146101dd57600080fd5b3661010557333b6101035760405162461bcd60e51b815260206004820152601960248201527f53656e646572206973206e6f74206120636f6e74726163742e0000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561011657600080fd5b5061012a6101253660046122ad565b6102c8565b6040519081526020015b60405180910390f35b34801561014957600080fd5b50610103610158366004612308565b610503565b34801561016957600080fd5b5061012a610178366004612341565b610646565b34801561018957600080fd5b5061010361019836600461238b565b610a9d565b3480156101a957600080fd5b506101cd6101b83660046123b9565b60696020526000908152604090205460ff1681565b6040519015158152602001610134565b3480156101e957600080fd5b50610103610ad0565b3480156101fe57600080fd5b50606854610212906001600160a01b031681565b6040516001600160a01b039091168152602001610134565b34801561023657600080fd5b50610103610245366004612422565b610ae4565b34801561025657600080fd5b506033546001600160a01b0316610212565b34801561027457600080fd5b50606a54610212906001600160a01b031681565b34801561029457600080fd5b506101036102a336600461248e565b610c0a565b3480156102b457600080fd5b506101036102c33660046123b9565b610c5a565b600080851161033f5760405162461bcd60e51b815260206004820152603860248201527f526570617920616d6f756e7420287472616e73616374696f6e2076616c75652960448201527f206d7573742062652067726561746572207468616e20302e000000000000000060648201526084016100fa565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561037f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a3919061250e565b90506103ba6001600160a01b038216333089610cd3565b60405163095ea7b360e01b81526001600160a01b0386811660048301526024820188905282169063095ea7b3906044016020604051808303816000875af1158015610409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042d919061252b565b50604051637af1e23160e11b81526001600160a01b03888116600483015260248201889052858116604483015286169063f5e3c462906064016020604051808303816000875af1158015610485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a99190612548565b156104ec5760405162461bcd60e51b81526020600482015260136024820152722634b8bab4b230ba34b7b7103330b4b632b21760691b60448201526064016100fa565b6104f68484610d44565b9150505b95945050505050565b600054610100900460ff16158080156105235750600054600160ff909116105b8061053d5750303b15801561053d575060005460ff166001145b6105a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016100fa565b6000805460ff1916600117905580156105c3576000805461ff0019166101001790555b6105cb610e39565b606880546001600160a01b038086166001600160a01b031992831617909255606a8054928516929091169190911790558015610641576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000808260200135116106a75760405162461bcd60e51b8152602060048201526024808201527f526570617920616d6f756e74206d7573742062652067726561746572207468616044820152633710181760e11b60648201526084016100fa565b60208201356000806106bd610100860186612561565b905011156108d4576106d3610120850185612561565b90506106e3610100860186612561565b90501461078d5760405162461bcd60e51b815260206004820152606660248201527f46756e64696e67204946756e6473436f6e76657273696f6e537472617465677960448201527f20636f6e747261637420617272617920616e642073747261746567792064617460648201527f61206279746573206172726179206d757374206265207468652073616d65206c60848201526532b733ba341760d11b60a482015260c4016100fa565b60005b61079e610100860186612561565b90508110156108ce5760006107b7610120870187612561565b838181106107c7576107c76125ab565b90506020028101906107d991906125c1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093945061081e92505050610100880188612561565b8481811061082e5761082e6125ab565b905060200201602081019061084391906123b9565b60405163180994cb60e11b81529091506001600160a01b038216906330132996906108749088908690600401612660565b6040805180830381865afa158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b49190612679565b955093508291506108c69050816126bd565b915050610790565b50610948565b6108e460608501604086016123b9565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610921573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610945919061250e565b90505b6066829055606780546001600160a01b0319166001600160a01b038316179055600061097a60a08601608087016123b9565b90506000826001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea919061250e565b6001600160a01b0316149050816001600160a01b031663490e6cbc3083610a12576000610a14565b865b8415610a21576000610a23565b875b6000366040518663ffffffff1660e01b8152600401610a469594939291906126d8565b600060405180830381600087803b158015610a6057600080fd5b505af1158015610a74573d6000803e3d6000fd5b5050606554610a9392506001600160a01b0316905060a0880135610d44565b9695505050505050565b610aa5610e68565b6001600160a01b03919091166000908152606960205260409020805460ff1916911515919091179055565b610ad8610e68565b610ae26000610ec2565b565b610aec610e68565b8215801590610afa57508281145b610b6c5760405162461bcd60e51b815260206004820152603f60248201527f6c697374206f66207374726174656769657320656d707479206f72207768697460448201527f656c69737420646f6573206e6f74206d6174636820697473206c656e6774680060648201526084016100fa565b60005b83811015610c0357828282818110610b8957610b896125ab565b9050602002016020810190610b9e9190612724565b60696000878785818110610bb457610bb46125ab565b9050602002016020810190610bc991906123b9565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610bfb816126bd565b915050610b6f565b5050505050565b6000610c198260048186612741565b810190610c269190612958565b9050610c33818686610f14565b606580546001600160a01b0319166001600160a01b03929092169190911790555050505050565b610c62610e68565b6001600160a01b038116610cc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100fa565b610cd081610ec2565b50565b6040516001600160a01b0380851660248301528316604482015260648101829052610d3e9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611428565b50505050565b6040516370a0823160e01b8152306004820152600090839082906001600160a01b038316906370a0823190602401602060405180830381865afa158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db39190612548565b905083811015610e175760405162461bcd60e51b815260206004820152602960248201527f4d696e696d756d20746f6b656e206f757470757420616d6f756e74206e6f742060448201526839b0ba34b334b2b21760b91b60648201526084016100fa565b8015610e3157610e316001600160a01b03831633836114fa565b949350505050565b600054610100900460ff16610e605760405162461bcd60e51b81526004016100fa90612a90565b610ae261152a565b6033546001600160a01b03163314610ae25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016100fa565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606754606654610100850151516000926001600160a01b0316919015610fbb57610100860151515b8015610fb957610fa28383896101000151600185610f5a9190612adb565b81518110610f6a57610f6a6125ab565b60200260200101518a6101200151600186610f859190612adb565b81518110610f9557610f956125ab565b602002602001015161155a565b909350915080610fb181612af2565b915050610f3c565b505b600086604001516001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611023919061250e565b9050806001600160a01b0316836001600160a01b0316146110be5760405162461bcd60e51b815260206004820152604960248201527f74686520646562742072657061796d656e742066756e64732073686f756c642060448201527f626520636f6e76657274656420746f2074686520756e6465726c79696e67206460648201526832b13a103a37b5b2b760b91b608482015260a4016100fa565b86602001518210156111125760405162461bcd60e51b815260206004820181905260248201527f646562742072657061796d656e7420616d6f756e74206e6f7420656e6f75676860448201526064016100fa565b6040808801516020890151915163095ea7b360e01b81526001600160a01b039182166004820152602481019290925282169063095ea7b3906044016020604051808303816000875af115801561116c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611190919061252b565b50604087810151885160208a015160608b01519351637af1e23160e11b81526001600160a01b03928316600482015260248101919091529281166044840152169063f5e3c462906064016020604051808303816000875af11580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121d9190612548565b156112605760405162461bcd60e51b81526020600482015260136024820152722634b8bab4b230ba34b7b7103330b4b632b21760691b60448201526064016100fa565b60608701516040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf9190612548565b9050600081116113165760405162461bcd60e51b815260206004820152601260248201527127379031aa37b5b2b7399039b2b4bd32b21760711b60448201526064016100fa565b606088015160405163db006a7560e01b8152600481018390526000916001600160a01b03169063db006a75906024016020604051808303816000875af1158015611364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113889190612548565b90508015611400576040805162461bcd60e51b81526020600482015260248101919091527f4572726f722063616c6c696e672072656465656d696e67207365697a6564206360448201527f546f6b656e3a206572726f7220636f6465206e6f7420657175616c20746f203060648201526084016100fa565b50505061141c86606001518760c001518860e001518888611612565b925050505b9392505050565b600061147d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f829092919063ffffffff16565b805190915015610641578080602001905181019061149b919061252b565b6106415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016100fa565b6040516001600160a01b03831660248201526044810182905261064190849063a9059cbb60e01b90606401610d07565b600054610100900460ff166115515760405162461bcd60e51b81526004016100fa90612a90565b610ae233610ec2565b6001600160a01b038216600090815260696020526040812054819060ff166115945760405162461bcd60e51b81526004016100fa90612b09565b60006115ee856389eabf0260e01b8989886040516024016115b793929190612b5b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f91565b9050808060200190518101906116049190612679565b925092505094509492505050565b60665460675460408051630dfe168160e01b81529051600093339390926001600160a01b03909116918491630dfe16819160048083019260209291908290030181865afa158015611667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168b919061250e565b6001600160a01b031614156116ab576116a48582612b82565b905061177b565b6067546040805163d21220a760e01b815290516001600160a01b0390921691339163d21220a79160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a919061250e565b6001600160a01b03161415611733576116a48482612b82565b60405162461bcd60e51b815260206004820152601d60248201527f77726f6e6720706f6f6c206f72205f666c61736853776170546f6b656e00000060448201526064016100fa565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117df919061250e565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d9190612548565b8951909150156119575787518951146118f45760405162461bcd60e51b815260206004820152605b60248201527f49526564656d7074696f6e537472617465677920636f6e74726163742061727260448201527f617920616e64207374726174656779206461746120627974657320617272617960648201527f206d6e75737420746865207468652073616d65206c656e6774682e0000000000608482015260a4016100fa565b60005b89518110156119555761193e83838c8481518110611917576119176125ab565b60200260200101518c8581518110611931576119316125ab565b602002602001015161207c565b90935091508061194d816126bd565b9150506118f7565b505b836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b9919061250e565b6001600160a01b0316826001600160a01b03161480611a4a5750836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a35919061250e565b6001600160a01b0316826001600160a01b0316145b15611f05576067546000906001600160a01b0384811691161415611ae6575060675460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018690528592169063a9059cbb906044016020604051808303816000875af1158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae0919061252b565b50611ef8565b6000856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4a919061250e565b606a546001600160a01b03918216868316149250166330d07f2182611bd057876001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcb919061250e565b611c32565b876001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c32919061250e565b83611c9e57886001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c99919061250e565b611d00565b886001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d00919061250e565b896001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d629190612b9a565b6066546040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015262ffffff16604483015260648201526000608482015260a4016020604051808303816000875af1158015611dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dee9190612548565b915082821115611e665760405162461bcd60e51b815260206004820152603d60248201527f546f6b656e20666c6173686c6f616e2072657475726e20616d6f756e7420677260448201527f6561746572207468616e207365697a656420636f6c6c61746572616c2e00000060648201526084016100fa565b604051630251596160e31b81526001600160a01b0387166004820181905282151560248301526044820184905260006064830181905260a0608484015260a48301529063128acb089060c40160408051808303816000875af1158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef49190612bbf565b5050505b82955050505050506104fa565b60405162461bcd60e51b815260206004820152604660248201527f74686520726564656d7074696f6e7320737472617465677920646964206e6f7460448201527f207377617020746f2074686520666c617368207377617070656420706f6f6c2060648201526561737365747360d01b608482015260a4016100fa565b6060610e3184846000856120d9565b60606001600160a01b0383163b611ff95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016100fa565b600080846001600160a01b0316846040516120149190612be3565b600060405180830381855af49150503d806000811461204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b50915091506104fa8282604051806060016040528060278152602001612c13602791396121b4565b6001600160a01b038216600090815260696020526040812054819060ff166120b65760405162461bcd60e51b81526004016100fa90612b09565b60006115ee856310badf4e60e01b8989886040516024016115b793929190612b5b565b60608247101561213a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016100fa565b600080866001600160a01b031685876040516121569190612be3565b60006040518083038185875af1925050503d8060008114612193576040519150601f19603f3d011682016040523d82523d6000602084013e612198565b606091505b50915091506121a9878383876121ed565b979650505050505050565b606083156121c3575081611421565b8251156121d35782518084602001fd5b8160405162461bcd60e51b81526004016100fa9190612bff565b60608315612259578251612252576001600160a01b0385163b6122525760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016100fa565b5081610e31565b610e31838381511561226e5781518083602001fd5b8060405162461bcd60e51b81526004016100fa9190612bff565b6001600160a01b0381168114610cd057600080fd5b80356122a881612288565b919050565b600080600080600060a086880312156122c557600080fd5b85356122d081612288565b94506020860135935060408601356122e781612288565b925060608601356122f781612288565b949793965091946080013592915050565b6000806040838503121561231b57600080fd5b823561232681612288565b9150602083013561233681612288565b809150509250929050565b60006020828403121561235357600080fd5b813567ffffffffffffffff81111561236a57600080fd5b8201610140818503121561142157600080fd5b8015158114610cd057600080fd5b6000806040838503121561239e57600080fd5b82356123a981612288565b915060208301356123368161237d565b6000602082840312156123cb57600080fd5b813561142181612288565b60008083601f8401126123e857600080fd5b50813567ffffffffffffffff81111561240057600080fd5b6020830191508360208260051b850101111561241b57600080fd5b9250929050565b6000806000806040858703121561243857600080fd5b843567ffffffffffffffff8082111561245057600080fd5b61245c888389016123d6565b9096509450602087013591508082111561247557600080fd5b50612482878288016123d6565b95989497509550505050565b600080600080606085870312156124a457600080fd5b8435935060208501359250604085013567ffffffffffffffff808211156124ca57600080fd5b818701915087601f8301126124de57600080fd5b8135818111156124ed57600080fd5b8860208285010111156124ff57600080fd5b95989497505060200194505050565b60006020828403121561252057600080fd5b815161142181612288565b60006020828403121561253d57600080fd5b81516114218161237d565b60006020828403121561255a57600080fd5b5051919050565b6000808335601e1984360301811261257857600080fd5b83018035915067ffffffffffffffff82111561259357600080fd5b6020019150600581901b360382131561241b57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126125d857600080fd5b83018035915067ffffffffffffffff8211156125f357600080fd5b60200191503681900382131561241b57600080fd5b60005b8381101561262357818101518382015260200161260b565b83811115610d3e5750506000910152565b6000815180845261264c816020860160208601612608565b601f01601f19169290920160200192915050565b828152604060208201526000610e316040830184612634565b6000806040838503121561268c57600080fd5b825161269781612288565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156126d1576126d16126a7565b5060010190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60006020828403121561273657600080fd5b81356114218161237d565b6000808585111561275157600080fd5b8386111561275e57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff811182821017156127a5576127a561276b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156127d4576127d461276b565b604052919050565b600067ffffffffffffffff8211156127f6576127f661276b565b5060051b60200190565b600082601f83011261281157600080fd5b81356020612826612821836127dc565b6127ab565b82815260059290921b8401810191818101908684111561284557600080fd5b8286015b8481101561286957803561285c81612288565b8352918301918301612849565b509695505050505050565b6000601f838184011261288657600080fd5b82356020612896612821836127dc565b82815260059290921b850181019181810190878411156128b557600080fd5b8287015b8481101561294c57803567ffffffffffffffff808211156128da5760008081fd5b818a0191508a603f8301126128ef5760008081fd5b858201356040828211156129055761290561276b565b612916828b01601f191689016127ab565b92508183528c8183860101111561292d5760008081fd5b81818501898501375060009082018701528452509183019183016128b9565b50979650505050505050565b60006020828403121561296a57600080fd5b813567ffffffffffffffff8082111561298257600080fd5b90830190610140828603121561299757600080fd5b61299f612781565b6129a88361229d565b8152602083013560208201526129c06040840161229d565b60408201526129d16060840161229d565b60608201526129e26080840161229d565b608082015260a083013560a082015260c083013582811115612a0357600080fd5b612a0f87828601612800565b60c08301525060e083013582811115612a2757600080fd5b612a3387828601612874565b60e0830152506101008084013583811115612a4d57600080fd5b612a5988828701612800565b8284015250506101208084013583811115612a7357600080fd5b612a7f88828701612874565b918301919091525095945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082821015612aed57612aed6126a7565b500390565b600081612b0157612b016126a7565b506000190190565b60208082526032908201527f6f6e6c792077686974656c697374656420726564656d7074696f6e20737472616040820152711d1959da595cc818d85b881899481d5cd95960721b606082015260800190565b60018060a01b03841681528260208201526060604082015260006104fa6060830184612634565b60008219821115612b9557612b956126a7565b500190565b600060208284031215612bac57600080fd5b815162ffffff8116811461142157600080fd5b60008060408385031215612bd257600080fd5b505080516020909101519092909150565b60008251612bf5818460208701612608565b9190910192915050565b602081526000611421602083018461263456fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000a", + "sourceMap": "1011:15560:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6327:10;1476:19:104;6311:70:2;;;;-1:-1:-1;;;6311:70:2;;216:2:127;6311:70:2;;;198:21:127;255:2;235:18;;;228:30;294:27;274:18;;;267:55;339:18;;6311:70:2;;;;;;;;;1011:15560;;;;;2787:775;;;;;;;;;;-1:-1:-1;2787:775:2;;;;;:::i;:::-;;:::i;:::-;;;1493:25:127;;;1481:2;1466:18;2787:775:2;;;;;;;;1967:186;;;;;;;;;;-1:-1:-1;1967:186:2;;;;;:::i;:::-;;:::i;4205:1897::-;;;;;;;;;;-1:-1:-1;4205:1897:2;;;;;:::i;:::-;;:::i;12497:178::-;;;;;;;;;;-1:-1:-1;12497:178:2;;;;;:::i;:::-;;:::i;1867:61::-;;;;;;;;;;-1:-1:-1;1867:61:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3297:14:127;;3290:22;3272:41;;3260:2;3245:18;1867:61:2;3132:187:127;2071:101:97;;;;;;;;;;;;;:::i;1832:31:2:-;;;;;;;;;;-1:-1:-1;1832:31:2;;;;-1:-1:-1;;;;;1832:31:2;;;;;;-1:-1:-1;;;;;3488:32:127;;;3470:51;;3458:2;3443:18;1832:31:2;3324:203:127;12934:449:2;;;;;;;;;;-1:-1:-1;12934:449:2;;;;;:::i;:::-;;:::i;1441:85:97:-;;;;;;;;;;-1:-1:-1;1513:6:97;;-1:-1:-1;;;;;1513:6:97;1441:85;;1932:30:2;;;;;;;;;;-1:-1:-1;1932:30:2;;;;-1:-1:-1;;;;;1932:30:2;;;6455:568;;;;;;;;;;-1:-1:-1;6455:568:2;;;;;:::i;:::-;;:::i;2321:198:97:-;;;;;;;;;;-1:-1:-1;2321:198:97;;;;;:::i;:::-;;:::i;2787:775:2:-;2958:7;3062:1;3048:11;:15;3040:84;;;;-1:-1:-1;;;3040:84:2;;5939:2:127;3040:84:2;;;5921:21:127;5978:2;5958:18;;;5951:30;6017:34;5997:18;;;5990:62;6088:26;6068:18;;;6061:54;6132:19;;3040:84:2;5737:420:127;3040:84:2;3130:28;3179:6;-1:-1:-1;;;;;3179:17:2;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3130:69;-1:-1:-1;3205:67:2;-1:-1:-1;;;;;3205:27:2;;3233:10;3253:4;3260:11;3205:27;:67::i;:::-;3278:48;;-1:-1:-1;;;3278:48:2;;-1:-1:-1;;;;;6610:32:127;;;3278:48:2;;;6592:51:127;6659:18;;;6652:34;;;3278:18:2;;;;;6565::127;;3278:48:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3340:72:2;;-1:-1:-1;;;3340:72:2;;-1:-1:-1;;;;;7205:15:127;;;3340:72:2;;;7187:34:127;7237:18;;;7230:34;;;7300:15;;;7280:18;;;7273:43;3340:22:2;;;;;7122:18:127;;3340:72:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;3332:109;;;;-1:-1:-1;;;3332:109:2;;7718:2:127;3332:109:2;;;7700:21:127;7757:2;7737:18;;;7730:30;-1:-1:-1;;;7776:18:127;;;7769:49;7835:18;;3332:109:2;7516:343:127;3332:109:2;3494:63;3522:16;3541:15;3494:19;:63::i;:::-;3487:70;;;2787:775;;;;;;;;:::o;1967:186::-;3268:19:98;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:98;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:98;1476:19:104;:23;;;3376:66:98;;-1:-1:-1;3425:12:98;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:98;;8066:2:127;3314:201:98;;;8048:21:127;8105:2;8085:18;;;8078:30;8144:34;8124:18;;;8117:62;-1:-1:-1;;;8195:18:127;;;8188:44;8249:19;;3314:201:98;7864:410:127;3314:201:98;3525:12;:16;;-1:-1:-1;;3525:16:98;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:98;;;;;3551:65;2060:16:2::1;:14;:16::i;:::-;2082;:26:::0;;-1:-1:-1;;;;;2082:26:2;;::::1;-1:-1:-1::0;;;;;;2082:26:2;;::::1;;::::0;;;2114:6:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3636:99:98;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:98;;;3710:14;;-1:-1:-1;8431:36:127;;3710:14:98;;8419:2:127;8404:18;3710:14:98;;;;;;;3636:99;3258:483;1967:186:2;;:::o;4205:1897::-;4325:7;4393:1;4374:4;:16;;;:20;4366:69;;;;-1:-1:-1;;;4366:69:2;;8680:2:127;4366:69:2;;;8662:21:127;8719:2;8699:18;;;8692:30;8758:34;8738:18;;;8731:62;-1:-1:-1;;;8809:18:127;;;8802:34;8853:19;;4366:69:2;8478:400:127;4366:69:2;4658:16;;;;4634:21;;4720:26;;;;4658:4;4720:26;:::i;:::-;:33;;:37;4716:779;;;4821:30;;;;:4;:30;:::i;:::-;:37;-1:-1:-1;4784:26:2;;;;:4;:26;:::i;:::-;:33;;:74;4767:213;;;;-1:-1:-1;;;4767:213:2;;10230:2:127;4767:213:2;;;10212:21:127;10269:3;10249:18;;;10242:31;10309:34;10289:18;;;10282:62;10380:34;10360:18;;;10353:62;10452:34;10431:19;;;10424:63;-1:-1:-1;;;10503:19:127;;;10496:37;10550:19;;4767:213:2;10028:547:127;4767:213:2;5089:9;5084:308;5108:26;;;;:4;:26;:::i;:::-;:33;;5104:1;:37;5084:308;;;5158:25;5186:30;;;;:4;:30;:::i;:::-;5217:1;5186:33;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5158:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5158:61:2;;-1:-1:-1;5260:26:2;;-1:-1:-1;;;5260:26:2;;;;;:::i;:::-;5287:1;5260:29;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5331:52;;-1:-1:-1;;;5331:52:2;;5229:60;;-1:-1:-1;;;;;;5331:23:2;;;;;:52;;5355:13;;5370:12;;5331:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5299:84;-1:-1:-1;5299:84:2;-1:-1:-1;5143:3:2;;-1:-1:-1;5143:3:2;;-1:-1:-1;5143:3:2;;:::i;:::-;;;;5084:308;;;;4716:779;;;5461:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5445:40:2;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5412:76;;4716:779;5583:16;:32;;;5621:15;:39;;-1:-1:-1;;;;;;5621:39:2;-1:-1:-1;;;;;5621:39:2;;;;;-1:-1:-1;5713:22:2;;;;;;;;:::i;:::-;5667:69;;5742:34;5813:12;-1:-1:-1;;;;;5779:47:2;:13;-1:-1:-1;;;;;5779:20:2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5779:47:2;;5742:84;;5832:13;-1:-1:-1;;;;;5832:19:2;;5867:4;5880:29;:49;;5928:1;5880:49;;;5912:13;5880:49;5938:29;5937:30;:50;;5986:1;5937:50;;;5970:13;5937:50;5995:8;;5832:177;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6043:31:2;;6023:74;;-1:-1:-1;;;;;;6043:31:2;;-1:-1:-1;6076:20:2;;;;6023:19;:74::i;:::-;6016:81;4205:1897;-1:-1:-1;;;;;;4205:1897:2:o;12497:178::-;1334:13:97;:11;:13::i;:::-;-1:-1:-1;;;;;12608:48:2;;;::::1;;::::0;;;:29:::1;:48;::::0;;;;:62;;-1:-1:-1;;12608:62:2::1;::::0;::::1;;::::0;;;::::1;::::0;;12497:178::o;2071:101:97:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;12934:449:2:-;1334:13:97;:11;:13::i;:::-;13096:21:2;;;;;:64:::1;;-1:-1:-1::0;13121:39:2;;::::1;13096:64;13081:158;;;::::0;-1:-1:-1;;;13081:158:2;;14065:2:127;13081:158:2::1;::::0;::::1;14047:21:127::0;14104:2;14084:18;;;14077:30;14143:34;14123:18;;;14116:62;14214:33;14194:18;;;14187:61;14265:19;;13081:158:2::1;13863:427:127::0;13081:158:2::1;13251:9;13246:133;13266:21:::0;;::::1;13246:133;;;13358:11;;13370:1;13358:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;13302:29;:53;13340:10;;13351:1;13340:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13302:53:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13302:53:2;:70;;-1:-1:-1;;13302:70:2::1;::::0;::::1;;::::0;;;::::1;::::0;;13289:3;::::1;::::0;::::1;:::i;:::-;;;;13246:133;;;;12934:449:::0;;;;:::o;6455:568::-;6697:46;6757:8;:4;6762:1;6757:4;;:8;:::i;:::-;6746:58;;;;;;;:::i;:::-;6697:107;;6981:37;7001:4;7007;7013;6981:19;:37::i;:::-;6947:31;:71;;-1:-1:-1;;;;;;6947:71:2;-1:-1:-1;;;;;6947:71:2;;;;;;;;;;-1:-1:-1;;;;;6455:568:2:o;2321:198:97:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:97;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:97;;20258:2:127;2401:73:97::1;::::0;::::1;20240:21:127::0;20297:2;20277:18;;;20270:30;20336:34;20316:18;;;20309:62;-1:-1:-1;;;20387:18:127;;;20380:36;20433:19;;2401:73:97::1;20056:402:127::0;2401:73:97::1;2484:28;2503:8;2484:18;:28::i;:::-;2321:198:::0;:::o;1040:252:103:-;1216:68;;-1:-1:-1;;;;;20721:15:127;;;1216:68:103;;;20703:34:127;20773:15;;20753:18;;;20746:43;20805:18;;;20798:34;;;1189:96:103;;1209:5;;-1:-1:-1;;;1239:27:103;20638:18:127;;1216:68:103;;;;-1:-1:-1;;1216:68:103;;;;;;;;;;;;;;-1:-1:-1;;;;;1216:68:103;-1:-1:-1;;;;;;1216:68:103;;;;;;;;;;1189:19;:96::i;:::-;1040:252;;;;:::o;3750:451:2:-;3953:30;;-1:-1:-1;;;3953:30:2;;3977:4;3953:30;;;3470:51:127;3845:7:2;;3904:13;;3845:7;;-1:-1:-1;;;;;3953:15:2;;;;;3443:18:127;;3953:30:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3924:59;;4019:15;3997:18;:37;;3989:91;;;;-1:-1:-1;;;3989:91:2;;21045:2:127;3989:91:2;;;21027:21:127;21084:2;21064:18;;;21057:30;21123:34;21103:18;;;21096:62;-1:-1:-1;;;21174:18:127;;;21167:39;21223:19;;3989:91:2;20843:405:127;3989:91:2;4090:22;;4086:78;;4114:50;-1:-1:-1;;;;;4114:18:2;;4133:10;4145:18;4114;:50::i;:::-;4178:18;3750:451;-1:-1:-1;;;;3750:451:2:o;1003:95:97:-;5363:13:98;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:98;;;;;;;:::i;:::-;1065:26:97::1;:24;:26::i;1599:130::-:0;1513:6;;-1:-1:-1;;;;;1513:6:97;929:10:105;1662:23:97;1654:68;;;;-1:-1:-1;;;1654:68:97;;21867:2:127;1654:68:97;;;21849:21:127;;;21886:18;;;21879:30;21945:34;21925:18;;;21918:62;21997:18;;1654:68:97;21665:356:127;2673:187:97;2765:6;;;-1:-1:-1;;;;;2781:17:97;;;-1:-1:-1;;;;;;2781:17:97;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;7158:2022:2:-;7368:15;;7420:16;;7368:15;7447:26;;;:33;7296:7;;-1:-1:-1;;;;;7368:15:2;;7420:16;7447:37;7443:484;;7628:26;;;;:33;7611:310;7663:5;;7611:310;;7729:183;7759:18;7789:19;7820:4;:26;;;7851:1;7847;:5;;;;:::i;:::-;7820:33;;;;;;;;:::i;:::-;;;;;;;7865:4;:30;;;7900:1;7896;:5;;;;:::i;:::-;7865:37;;;;;;;;:::i;:::-;;;;;;;7729:18;:183::i;:::-;7685:227;;-1:-1:-1;7685:227:2;-1:-1:-1;7670:3:2;;;;:::i;:::-;;;;7611:310;;;;7443:484;8028:24;8055:4;:11;;;-1:-1:-1;;;;;8055:22:2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8028:51;;8135:16;-1:-1:-1;;;;;8104:47:2;8112:18;-1:-1:-1;;;;;8104:47:2;;8087:157;;;;-1:-1:-1;;;8087:157:2;;22499:2:127;8087:157:2;;;22481:21:127;22538:2;22518:18;;;22511:30;22577:34;22557:18;;;22550:62;22648:34;22628:18;;;22621:62;-1:-1:-1;;;22699:19:127;;;22692:40;22749:19;;8087:157:2;22297:477:127;8087:157:2;8283:4;:16;;;8260:19;:39;;8252:84;;;;-1:-1:-1;;;8252:84:2;;22981:2:127;8252:84:2;;;22963:21:127;;;23000:18;;;22993:30;23059:34;23039:18;;;23032:62;23111:18;;8252:84:2;22779:356:127;8252:84:2;8435:11;;;;;8449:16;;;;8383:83;;-1:-1:-1;;;8383:83:2;;-1:-1:-1;;;;;6610:32:127;;;8383:83:2;;;6592:51:127;6659:18;;;6652:34;;;;8383:43:2;;;;;6565:18:127;;8383:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8518:11:2;;;;;8546:13;;8561:16;;;;8587:21;;;;8518:92;;-1:-1:-1;;;8518:92:2;;-1:-1:-1;;;;;7205:15:127;;;8518:92:2;;;7187:34:127;7237:18;;;7230:34;;;;7300:15;;;7280:18;;;7273:43;8518:27:2;;;;7122:18:127;;8518:92:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:97;8501:153;;;;-1:-1:-1;;;8501:153:2;;7718:2:127;8501:153:2;;;7700:21:127;7757:2;7737:18;;;7730:30;-1:-1:-1;;;7776:18:127;;;7769:49;7835:18;;8501:153:2;7516:343:127;8501:153:2;8744:21;;;;:46;;-1:-1:-1;;;8744:46:2;;8784:4;8744:46;;;3470:51:127;8715:26:2;;-1:-1:-1;;;;;8744:31:2;;;;3443:18:127;;8744:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8715:75;;8827:1;8806:18;:22;8798:53;;;;-1:-1:-1;;;8798:53:2;;23342:2:127;8798:53:2;;;23324:21:127;23381:2;23361:18;;;23354:30;-1:-1:-1;;;23400:18:127;;;23393:48;23458:18;;8798:53:2;23140:342:127;8798:53:2;8882:21;;;;:48;;-1:-1:-1;;;8882:48:2;;;;;1493:25:127;;;8859:20:2;;-1:-1:-1;;;;;8882:28:2;;;;1466:18:127;;8882:48:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8859:71;-1:-1:-1;8946:17:2;;8938:94;;;;;-1:-1:-1;;;8938:94:2;;23689:2:127;8938:94:2;;;23671:21:127;23708:18;;;23701:30;;;;23767:34;23747:18;;;23740:62;23838:34;23818:18;;;23811:62;23890:19;;8938:94:2;23487:428:127;8938:94:2;8020:1019;;;9075:100;9095:4;:21;;;9118:4;:25;;;9145:4;:17;;;9164:4;9170;9075:19;:100::i;:::-;9068:107;;;;7158:2022;;;;;;:::o;3868:717:103:-;4298:23;4324:69;4352:4;4324:69;;;;;;;;;;;;;;;;;4332:5;-1:-1:-1;;;;;4324:27:103;;;:69;;;;;:::i;:::-;4407:17;;4298:95;;-1:-1:-1;4407:21:103;4403:176;;4502:10;4491:30;;;;;;;;;;;;:::i;:::-;4483:85;;;;-1:-1:-1;;;4483:85:103;;24122:2:127;4483:85:103;;;24104:21:127;24161:2;24141:18;;;24134:30;24200:34;24180:18;;;24173:62;-1:-1:-1;;;24251:18:127;;;24244:40;24301:19;;4483:85:103;23920:406:127;818:216:103;968:58;;-1:-1:-1;;;;;6610:32:127;;968:58:103;;;6592:51:127;6659:18;;;6652:34;;;941:86:103;;961:5;;-1:-1:-1;;;991:23:103;6565:18:127;;968:58:103;6418:274:127;1104:111:97;5363:13:98;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:98;;;;;;;:::i;:::-;1176:32:97::1;929:10:105::0;1176:18:97::1;:32::i;14336:574:2:-:0;-1:-1:-1;;;;;14556:48:2;;14514:17;14556:48;;;:29;:48;;;;;;14514:17;;14556:48;;14548:111;;;;-1:-1:-1;;;14548:111:2;;;;;;;:::i;:::-;14666:23;14692:148;14729:8;14769:25;;;14796:10;14808:11;14821:12;14746:88;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;14746:88:2;;;;;;;;;;;;;;-1:-1:-1;;;;;14746:88:2;-1:-1:-1;;;;;;14746:88:2;;;;;;;;;;14692:21;:148::i;:::-;14666:174;;14864:10;14853:52;;;;;;;;;;;;:::i;:::-;14846:59;;;;;14336:574;;;;;;;:::o;9231:3007::-;9536:16;;9601:15;;9562:35;;;-1:-1:-1;;;9562:35:2;;;;9435:7;;9487:10;;9536:16;;-1:-1:-1;;;;;9601:15:2;;;;9487:10;;9562:33;;:35;;;;;;;;;;;;;;9487:10;9562:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9562:54:2;;9558:274;;;9626:29;9651:4;9626:29;;:::i;:::-;;;9558:274;;;9711:15;;9672:35;;;-1:-1:-1;;;9672:35:2;;;;-1:-1:-1;;;;;9711:15:2;;;;9687:10;;9672:33;;:35;;;;;;;;;;;;;;9687:10;9672:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9672:54:2;;9668:164;;;9736:29;9761:4;9736:29;;:::i;9668:164::-;9786:39;;-1:-1:-1;;;9786:39:2;;25502:2:127;9786:39:2;;;25484:21:127;25541:2;25521:18;;;25514:30;25580:31;25560:18;;;25553:59;25629:18;;9786:39:2;25300:353:127;9668:164:2;9932:38;10007:16;-1:-1:-1;;;;;9991:45:2;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10082:45;;-1:-1:-1;;;10082:45:2;;10121:4;10082:45;;;3470:51:127;9932:107:2;;-1:-1:-1;10045:34:2;;-1:-1:-1;;;;;10082:30:2;;;;;3443:18:127;;10082:45:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10201:27;;10045:82;;-1:-1:-1;10201:31:2;10197:521;;10290:12;:19;10259:20;:27;:50;10242:178;;;;-1:-1:-1;;;10242:178:2;;25860:2:127;10242:178:2;;;25842:21:127;25899:2;25879:18;;;25872:30;25938:34;25918:18;;;25911:62;26009:34;25989:18;;;25982:62;26081:29;26060:19;;;26053:58;26128:19;;10242:178:2;25658:495:127;10242:178:2;10433:9;10428:283;10452:20;:27;10448:1;:31;10428:283;;;10547:164;10581:20;10613:26;10651:20;10672:1;10651:23;;;;;;;;:::i;:::-;;;;;;;10686:12;10699:1;10686:15;;;;;;;;:::i;:::-;;;;;;;10547:22;:164::i;:::-;10494:217;;-1:-1:-1;10494:217:2;-1:-1:-1;10481:3:2;;;;:::i;:::-;;;;10428:283;;;;10197:521;10832:4;-1:-1:-1;;;;;10832:11:2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10799:46:2;10807:20;-1:-1:-1;;;;;10799:46:2;;:96;;;;10882:4;-1:-1:-1;;;;;10882:11:2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10849:46:2;10857:20;-1:-1:-1;;;;;10849:46:2;;10799:96;10795:1439;;;11026:15;;10955:26;;-1:-1:-1;;;;;10993:48:2;;;11026:15;;10993:48;10989:1093;;;-1:-1:-1;11196:15:2;;11178:81;;-1:-1:-1;;;11178:81:2;;-1:-1:-1;;;;;6610:32:127;;;11178:81:2;;;6592:51:127;6659:18;;;6652:34;;;11119:21:2;;11196:15;;11178:43;;6565:18:127;;11178:81:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10989:1093;;;11360:15;11411:4;-1:-1:-1;;;;;11411:11:2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11468:6;;-1:-1:-1;;;;;11378:46:2;;;;;;;;-1:-1:-1;11468:6:2;:29;11378:46;11511:42;;11540:4;-1:-1:-1;;;;;11540:11:2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11511:42;;;11524:4;-1:-1:-1;;;;;11524:11:2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11567:10;:42;;11596:4;-1:-1:-1;;;;;11596:11:2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11567:42;;;11580:4;-1:-1:-1;;;;;11580:11:2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11623:4;-1:-1:-1;;;;;11623:8:2;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11647:16;;11468:243;;-1:-1:-1;;;;;;11468:243:2;;;;;;;-1:-1:-1;;;;;26762:15:127;;;11468:243:2;;;26744:34:127;26814:15;;;;26794:18;;;26787:43;26878:8;26866:21;26846:18;;;26839:49;26904:18;;;26897:34;11677:1:2;26947:19:127;;;26940:44;26678:19;;11468:243:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11447:264;;11772:26;11750:18;:48;;11731:152;;;;-1:-1:-1;;;11731:152:2;;27197:2:127;11731:152:2;;;27179:21:127;27236:2;27216:18;;;27209:30;27275:34;27255:18;;;27248:62;27346:31;27326:18;;;27319:59;27395:19;;11731:152:2;26995:425:127;11731:152:2;11921;;-1:-1:-1;;;11921:152:2;;-1:-1:-1;;;;;11921:9:2;;:152;;;27758:34:127;;;27835:14;;27828:22;27808:18;;;27801:50;27867:18;;;27860:34;;;12027:1:2;27910:18:127;;;27903:43;;;27738:3;27962:19;;;27955:32;28003:19;;;27996:30;11921:9:2;;;28043:19:127;;11921:152:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11274:808;10989:1093;12105:20;12090:36;;;;;;;;;10795:1439;12147:80;;-1:-1:-1;;;12147:80:2;;28523:2:127;12147:80:2;;;28505:21:127;28562:2;28542:18;;;28535:30;28601:34;28581:18;;;28574:62;28672:34;28652:18;;;28645:62;-1:-1:-1;;;28723:19:127;;;28716:37;28770:19;;12147:80:2;28321:474:127;3883:223:104;4016:12;4047:52;4069:6;4077:4;4083:1;4086:12;4047:21;:52::i;15228:419:2:-;15311:12;-1:-1:-1;;;;;1476:19:104;;;15331:88:2;;;;-1:-1:-1;;;15331:88:2;;29002:2:127;15331:88:2;;;28984:21:127;29041:2;29021:18;;;29014:30;29080:34;29060:18;;;29053:62;-1:-1:-1;;;29131:18:127;;;29124:36;29177:19;;15331:88:2;28800:402:127;15331:88:2;15482:12;15496:23;15523:6;-1:-1:-1;;;;;15523:19:2;15543:4;15523:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15481:67;;;;15561:81;15579:7;15588:10;15561:81;;;;;;;;;;;;;;;;;:17;:81::i;13710:622::-;-1:-1:-1;;;;;13954:48:2;;13912:17;13954:48;;;:29;:48;;;;;;13912:17;;13954:48;;13946:111;;;;-1:-1:-1;;;13946:111:2;;;;;;;:::i;:::-;14064:23;14090:172;14127:8;14167:24;;;14193:20;14215:26;14243:12;14144:112;;;;;;;;;;:::i;4970:446:104:-;5135:12;5192:5;5167:21;:30;;5159:81;;;;-1:-1:-1;;;5159:81:104;;29688:2:127;5159:81:104;;;29670:21:127;29727:2;29707:18;;;29700:30;29766:34;29746:18;;;29739:62;-1:-1:-1;;;29817:18:127;;;29810:36;29863:19;;5159:81:104;29486:402:127;5159:81:104;5251:12;5265:23;5292:6;-1:-1:-1;;;;;5292:11:104;5311:5;5318:4;5292:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5250:73;;;;5340:69;5367:6;5375:7;5384:10;5396:12;5340:26;:69::i;:::-;5333:76;4970:446;-1:-1:-1;;;;;;;4970:446:104:o;15931:638:2:-;16063:12;16087:7;16083:482;;;-1:-1:-1;16111:10:2;16104:17;;16083:482;16206:17;;:21;16202:357;;16430:10;16424:17;16480:15;16467:10;16463:2;16459:19;16452:44;16202:357;16537:12;16530:20;;-1:-1:-1;;;16530:20:2;;;;;;;;:::i;6588:628:104:-;6768:12;6796:7;6792:418;;;6823:17;;6819:286;;-1:-1:-1;;;;;1476:19:104;;;7030:60;;;;-1:-1:-1;;;7030:60:104;;30319:2:127;7030:60:104;;;30301:21:127;30358:2;30338:18;;;30331:30;30397:31;30377:18;;;30370:59;30446:18;;7030:60:104;30117:353:127;7030:60:104;-1:-1:-1;7125:10:104;7118:17;;6792:418;7166:33;7174:10;7186:12;7897:17;;:21;7893:379;;8125:10;8119:17;8181:15;8168:10;8164:2;8160:19;8153:44;7893:379;8248:12;8241:20;;-1:-1:-1;;;8241:20:104;;;;;;;;:::i;368:131:127:-;-1:-1:-1;;;;;443:31:127;;433:42;;423:70;;489:1;486;479:12;504:134;572:20;;601:31;572:20;601:31;:::i;:::-;504:134;;;:::o;643:699::-;770:6;778;786;794;802;855:3;843:9;834:7;830:23;826:33;823:53;;;872:1;869;862:12;823:53;911:9;898:23;930:31;955:5;930:31;:::i;:::-;980:5;-1:-1:-1;1032:2:127;1017:18;;1004:32;;-1:-1:-1;1088:2:127;1073:18;;1060:32;1101:33;1060:32;1101:33;:::i;:::-;1153:7;-1:-1:-1;1212:2:127;1197:18;;1184:32;1225:33;1184:32;1225:33;:::i;:::-;643:699;;;;-1:-1:-1;643:699:127;;1331:3;1316:19;1303:33;;643:699;-1:-1:-1;;643:699:127:o;1529:388::-;1597:6;1605;1658:2;1646:9;1637:7;1633:23;1629:32;1626:52;;;1674:1;1671;1664:12;1626:52;1713:9;1700:23;1732:31;1757:5;1732:31;:::i;:::-;1782:5;-1:-1:-1;1839:2:127;1824:18;;1811:32;1852:33;1811:32;1852:33;:::i;:::-;1904:7;1894:17;;;1529:388;;;;;:::o;1922:414::-;2035:6;2088:2;2076:9;2067:7;2063:23;2059:32;2056:52;;;2104:1;2101;2094:12;2056:52;2144:9;2131:23;2177:18;2169:6;2166:30;2163:50;;;2209:1;2206;2199:12;2163:50;2232:22;;2288:3;2270:16;;;2266:26;2263:46;;;2305:1;2302;2295:12;2341:118;2427:5;2420:13;2413:21;2406:5;2403:32;2393:60;;2449:1;2446;2439:12;2464:411;2558:6;2566;2619:2;2607:9;2598:7;2594:23;2590:32;2587:52;;;2635:1;2632;2625:12;2587:52;2674:9;2661:23;2693:31;2718:5;2693:31;:::i;:::-;2743:5;-1:-1:-1;2800:2:127;2785:18;;2772:32;2813:30;2772:32;2813:30;:::i;2880:247::-;2939:6;2992:2;2980:9;2971:7;2967:23;2963:32;2960:52;;;3008:1;3005;2998:12;2960:52;3047:9;3034:23;3066:31;3091:5;3066:31;:::i;3532:388::-;3616:8;3626:6;3680:3;3673:4;3665:6;3661:17;3657:27;3647:55;;3698:1;3695;3688:12;3647:55;-1:-1:-1;3721:20:127;;3764:18;3753:30;;3750:50;;;3796:1;3793;3786:12;3750:50;3833:4;3825:6;3821:17;3809:29;;3893:3;3886:4;3876:6;3873:1;3869:14;3861:6;3857:27;3853:38;3850:47;3847:67;;;3910:1;3907;3900:12;3847:67;3532:388;;;;;:::o;3925:841::-;4073:6;4081;4089;4097;4150:2;4138:9;4129:7;4125:23;4121:32;4118:52;;;4166:1;4163;4156:12;4118:52;4206:9;4193:23;4235:18;4276:2;4268:6;4265:14;4262:34;;;4292:1;4289;4282:12;4262:34;4331:91;4414:7;4405:6;4394:9;4390:22;4331:91;:::i;:::-;4441:8;;-1:-1:-1;4305:117:127;-1:-1:-1;4529:2:127;4514:18;;4501:32;;-1:-1:-1;4545:16:127;;;4542:36;;;4574:1;4571;4564:12;4542:36;;4613:93;4698:7;4687:8;4676:9;4672:24;4613:93;:::i;:::-;3925:841;;;;-1:-1:-1;4725:8:127;-1:-1:-1;;;;3925:841:127:o;5005:727::-;5093:6;5101;5109;5117;5170:2;5158:9;5149:7;5145:23;5141:32;5138:52;;;5186:1;5183;5176:12;5138:52;5222:9;5209:23;5199:33;;5279:2;5268:9;5264:18;5251:32;5241:42;;5334:2;5323:9;5319:18;5306:32;5357:18;5398:2;5390:6;5387:14;5384:34;;;5414:1;5411;5404:12;5384:34;5452:6;5441:9;5437:22;5427:32;;5497:7;5490:4;5486:2;5482:13;5478:27;5468:55;;5519:1;5516;5509:12;5468:55;5559:2;5546:16;5585:2;5577:6;5574:14;5571:34;;;5601:1;5598;5591:12;5571:34;5646:7;5641:2;5632:6;5628:2;5624:15;5620:24;5617:37;5614:57;;;5667:1;5664;5657:12;5614:57;5005:727;;;;-1:-1:-1;;5698:2:127;5690:11;;-1:-1:-1;;;5005:727:127:o;6162:251::-;6232:6;6285:2;6273:9;6264:7;6260:23;6256:32;6253:52;;;6301:1;6298;6291:12;6253:52;6333:9;6327:16;6352:31;6377:5;6352:31;:::i;6697:245::-;6764:6;6817:2;6805:9;6796:7;6792:23;6788:32;6785:52;;;6833:1;6830;6823:12;6785:52;6865:9;6859:16;6884:28;6906:5;6884:28;:::i;7327:184::-;7397:6;7450:2;7438:9;7429:7;7425:23;7421:32;7418:52;;;7466:1;7463;7456:12;7418:52;-1:-1:-1;7489:16:127;;7327:184;-1:-1:-1;7327:184:127:o;8883:579::-;9010:4;9016:6;9076:11;9063:25;9170:2;9166:7;9155:8;9139:14;9135:29;9131:43;9111:18;9107:68;9097:96;;9189:1;9186;9179:12;9097:96;9216:33;;9268:20;;;-1:-1:-1;9311:18:127;9300:30;;9297:50;;;9343:1;9340;9333:12;9297:50;9376:4;9364:17;;-1:-1:-1;9427:1:127;9423:14;;;9407;9403:35;9393:46;;9390:66;;;9452:1;9449;9442:12;10580:127;10641:10;10636:3;10632:20;10629:1;10622:31;10672:4;10669:1;10662:15;10696:4;10693:1;10686:15;10712:521;10789:4;10795:6;10855:11;10842:25;10949:2;10945:7;10934:8;10918:14;10914:29;10910:43;10890:18;10886:68;10876:96;;10968:1;10965;10958:12;10876:96;10995:33;;11047:20;;;-1:-1:-1;11090:18:127;11079:30;;11076:50;;;11122:1;11119;11112:12;11076:50;11155:4;11143:17;;-1:-1:-1;11186:14:127;11182:27;;;11172:38;;11169:58;;;11223:1;11220;11213:12;11524:258;11596:1;11606:113;11620:6;11617:1;11614:13;11606:113;;;11696:11;;;11690:18;11677:11;;;11670:39;11642:2;11635:10;11606:113;;;11737:6;11734:1;11731:13;11728:48;;;-1:-1:-1;;11772:1:127;11754:16;;11747:27;11524:258::o;11787:257::-;11828:3;11866:5;11860:12;11893:6;11888:3;11881:19;11909:63;11965:6;11958:4;11953:3;11949:14;11942:4;11935:5;11931:16;11909:63;:::i;:::-;12026:2;12005:15;-1:-1:-1;;12001:29:127;11992:39;;;;12033:4;11988:50;;11787:257;-1:-1:-1;;11787:257:127:o;12049:288::-;12224:6;12213:9;12206:25;12267:2;12262;12251:9;12247:18;12240:30;12187:4;12287:44;12327:2;12316:9;12312:18;12304:6;12287:44;:::i;12342:339::-;12448:6;12456;12509:2;12497:9;12488:7;12484:23;12480:32;12477:52;;;12525:1;12522;12515:12;12477:52;12557:9;12551:16;12576:31;12601:5;12576:31;:::i;:::-;12671:2;12656:18;;;;12650:25;12626:5;;12650:25;;-1:-1:-1;;;12342:339:127:o;12686:127::-;12747:10;12742:3;12738:20;12735:1;12728:31;12778:4;12775:1;12768:15;12802:4;12799:1;12792:15;12818:135;12857:3;-1:-1:-1;;12878:17:127;;12875:43;;;12898:18;;:::i;:::-;-1:-1:-1;12945:1:127;12934:13;;12818:135::o;13226:632::-;13496:1;13492;13487:3;13483:11;13479:19;13471:6;13467:32;13456:9;13449:51;13536:6;13531:2;13520:9;13516:18;13509:34;13579:6;13574:2;13563:9;13559:18;13552:34;13622:3;13617:2;13606:9;13602:18;13595:31;13663:6;13657:3;13646:9;13642:19;13635:35;13721:6;13713;13707:3;13696:9;13692:19;13679:49;13778:1;13748:22;;;13772:3;13744:32;;;13737:43;;;;13841:2;13820:15;;;-1:-1:-1;;13816:29:127;13801:45;13797:55;;13226:632;-1:-1:-1;;;;13226:632:127:o;14295:241::-;14351:6;14404:2;14392:9;14383:7;14379:23;14375:32;14372:52;;;14420:1;14417;14410:12;14372:52;14459:9;14446:23;14478:28;14500:5;14478:28;:::i;14822:331::-;14927:9;14938;14980:8;14968:10;14965:24;14962:44;;;15002:1;14999;14992:12;14962:44;15031:6;15021:8;15018:20;15015:40;;;15051:1;15048;15041:12;15015:40;-1:-1:-1;;15077:23:127;;;15122:25;;;;;-1:-1:-1;14822:331:127:o;15158:127::-;15219:10;15214:3;15210:20;15207:1;15200:31;15250:4;15247:1;15240:15;15274:4;15271:1;15264:15;15290:255;15362:2;15356:9;15404:6;15392:19;;15441:18;15426:34;;15462:22;;;15423:62;15420:88;;;15488:18;;:::i;:::-;15524:2;15517:22;15290:255;:::o;15550:275::-;15621:2;15615:9;15686:2;15667:13;;-1:-1:-1;;15663:27:127;15651:40;;15721:18;15706:34;;15742:22;;;15703:62;15700:88;;;15768:18;;:::i;:::-;15804:2;15797:22;15550:275;;-1:-1:-1;15550:275:127:o;15830:204::-;15911:4;15944:18;15936:6;15933:30;15930:56;;;15966:18;;:::i;:::-;-1:-1:-1;16011:1:127;16007:14;16023:4;16003:25;;15830:204::o;16039:779::-;16114:5;16167:3;16160:4;16152:6;16148:17;16144:27;16134:55;;16185:1;16182;16175:12;16134:55;16221:6;16208:20;16247:4;16271:81;16287:64;16348:2;16287:64;:::i;:::-;16271:81;:::i;:::-;16386:15;;;16472:1;16468:10;;;;16456:23;;16452:32;;;16417:12;;;;16496:15;;;16493:35;;;16524:1;16521;16514:12;16493:35;16560:2;16552:6;16548:15;16572:217;16588:6;16583:3;16580:15;16572:217;;;16668:3;16655:17;16685:31;16710:5;16685:31;:::i;:::-;16729:18;;16767:12;;;;16605;;16572:217;;;-1:-1:-1;16807:5:127;16039:779;-1:-1:-1;;;;;;16039:779:127:o;16823:1560::-;16875:5;16905:4;16949:3;16944:2;16936:6;16932:15;16928:25;16918:53;;16967:1;16964;16957:12;16918:53;17003:6;16990:20;17029:4;17053:81;17069:64;17130:2;17069:64;:::i;17053:81::-;17168:15;;;17254:1;17250:10;;;;17238:23;;17234:32;;;17199:12;;;;17278:15;;;17275:35;;;17306:1;17303;17296:12;17275:35;17342:2;17334:6;17330:15;17354:1000;17370:6;17365:3;17362:15;17354:1000;;;17456:3;17443:17;17483:18;17533:2;17520:11;17517:19;17514:109;;;17577:1;17606:2;17602;17595:14;17514:109;17658:11;17650:6;17646:24;17636:34;;17710:3;17705:2;17701;17697:11;17693:21;17683:119;;17756:1;17785:2;17781;17774:14;17683:119;17846:2;17842;17838:11;17825:25;17873:2;17898;17894;17891:10;17888:36;;;17904:18;;:::i;:::-;17952:51;17976:11;;;-1:-1:-1;;17972:25:127;17968:34;;17952:51;:::i;:::-;17937:66;;18032:2;18023:7;18016:19;18076:3;18071:2;18066;18062;18058:11;18054:20;18051:29;18048:122;;;18122:1;18152:3;18147;18140:16;18048:122;18227:2;18222;18218;18214:11;18209:2;18200:7;18196:16;18183:47;-1:-1:-1;18277:1:127;18254:16;;;18250:25;;18243:36;18292:20;;-1:-1:-1;18332:12:127;;;;17387;;17354:1000;;;-1:-1:-1;18372:5:127;16823:1560;-1:-1:-1;;;;;;;16823:1560:127:o;18388:1663::-;18499:6;18552:2;18540:9;18531:7;18527:23;18523:32;18520:52;;;18568:1;18565;18558:12;18520:52;18608:9;18595:23;18637:18;18678:2;18670:6;18667:14;18664:34;;;18694:1;18691;18684:12;18664:34;18717:22;;;;18773:6;18755:16;;;18751:29;18748:49;;;18793:1;18790;18783:12;18748:49;18819:22;;:::i;:::-;18864;18883:2;18864:22;:::i;:::-;18857:5;18850:37;18940:2;18936;18932:11;18919:25;18914:2;18907:5;18903:14;18896:49;18977:31;19004:2;19000;18996:11;18977:31;:::i;:::-;18972:2;18965:5;18961:14;18954:55;19041:31;19068:2;19064;19060:11;19041:31;:::i;:::-;19036:2;19029:5;19025:14;19018:55;19106:32;19133:3;19129:2;19125:12;19106:32;:::i;:::-;19100:3;19093:5;19089:15;19082:57;19193:3;19189:2;19185:12;19172:26;19166:3;19159:5;19155:15;19148:51;19245:3;19241:2;19237:12;19224:26;19275:2;19265:8;19262:16;19259:36;;;19291:1;19288;19281:12;19259:36;19328:77;19397:7;19386:8;19382:2;19378:17;19328:77;:::i;:::-;19322:3;19315:5;19311:15;19304:102;;19452:3;19448:2;19444:12;19431:26;19482:2;19472:8;19469:16;19466:36;;;19498:1;19495;19488:12;19466:36;19535:54;19581:7;19570:8;19566:2;19562:17;19535:54;:::i;:::-;19529:3;19522:5;19518:15;19511:79;;19609:3;19658:2;19654;19650:11;19637:25;19687:2;19677:8;19674:16;19671:36;;;19703:1;19700;19693:12;19671:36;19739:77;19808:7;19797:8;19793:2;19789:17;19739:77;:::i;:::-;19734:2;19727:5;19723:14;19716:101;;;19836:3;19885:2;19881;19877:11;19864:25;19914:2;19904:8;19901:16;19898:36;;;19930:1;19927;19920:12;19898:36;19966:54;20012:7;20001:8;19997:2;19993:17;19966:54;:::i;:::-;19950:14;;;19943:78;;;;-1:-1:-1;19954:5:127;18388:1663;-1:-1:-1;;;;;18388:1663:127:o;21253:407::-;21455:2;21437:21;;;21494:2;21474:18;;;21467:30;21533:34;21528:2;21513:18;;21506:62;-1:-1:-1;;;21599:2:127;21584:18;;21577:41;21650:3;21635:19;;21253:407::o;22026:125::-;22066:4;22094:1;22091;22088:8;22085:34;;;22099:18;;:::i;:::-;-1:-1:-1;22136:9:127;;22026:125::o;22156:136::-;22195:3;22223:5;22213:39;;22232:18;;:::i;:::-;-1:-1:-1;;;22268:18:127;;22156:136::o;24331:414::-;24533:2;24515:21;;;24572:2;24552:18;;;24545:30;24611:34;24606:2;24591:18;;24584:62;-1:-1:-1;;;24677:2:127;24662:18;;24655:48;24735:3;24720:19;;24331:414::o;24750:412::-;25009:1;25005;25000:3;24996:11;24992:19;24984:6;24980:32;24969:9;24962:51;25049:6;25044:2;25033:9;25029:18;25022:34;25092:2;25087;25076:9;25072:18;25065:30;24943:4;25112:44;25152:2;25141:9;25137:18;25129:6;25112:44;:::i;25167:128::-;25207:3;25238:1;25234:6;25231:1;25228:13;25225:39;;;25244:18;;:::i;:::-;-1:-1:-1;25280:9:127;;25167:128::o;26158:278::-;26227:6;26280:2;26268:9;26259:7;26255:23;26251:32;26248:52;;;26296:1;26293;26286:12;26248:52;26328:9;26322:16;26378:8;26371:5;26367:20;26360:5;26357:31;26347:59;;26402:1;26399;26392:12;28073:243;28150:6;28158;28211:2;28199:9;28190:7;28186:23;28182:32;28179:52;;;28227:1;28224;28217:12;28179:52;-1:-1:-1;;28250:16:127;;28306:2;28291:18;;;28285:25;28250:16;;28285:25;;-1:-1:-1;28073:243:127:o;29207:274::-;29336:3;29374:6;29368:13;29390:53;29436:6;29431:3;29424:4;29416:6;29412:17;29390:53;:::i;:::-;29459:16;;;;;29207:274;-1:-1:-1;;29207:274:127:o;29893:219::-;30042:2;30031:9;30024:21;30005:4;30062:44;30102:2;30091:9;30087:18;30079:6;30062:44;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "W_NATIVE_ADDRESS()": "81738f13", + "_whitelistRedemptionStrategies(address[],bool[])": "8a0b9090", + "_whitelistRedemptionStrategy(address,bool)": "5a431365", + "initialize(address,address)": "485cc955", + "owner()": "8da5cb5b", + "quoter()": "c6bbd5a7", + "redemptionStrategiesWhitelist(address)": "5b672371", + "renounceOwnership()": "715018a6", + "safeLiquidate(address,uint256,address,address,uint256)": "20b72325", + "safeLiquidateToTokensWithFlashLoan((address,uint256,address,address,address,uint256,address[],bytes[],address[],bytes[]))": "55e9e8fe", + "transferOwnership(address)": "f2fde38b", + "uniswapV3FlashCallback(uint256,uint256,bytes)": "e9cbafb0" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/IonicUniV3Liquidator_Proxy.json b/packages/sdk/deployments/mode/IonicUniV3Liquidator_Proxy.json new file mode 100644 index 0000000000..3fc7190318 --- /dev/null +++ b/packages/sdk/deployments/mode/IonicUniV3Liquidator_Proxy.json @@ -0,0 +1,261 @@ +{ + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "transactionIndex": 1, + "gasUsed": "815377", + "logsBloom": "0x10000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000080000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000000020001000000000000000040000004000000400000000000000000020000000000000000000000000000000000000000000000000040000008000000000", + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c", + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2625238, + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000b48221b8a1137895e384abcaff8120d053be43f5" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c" + }, + { + "transactionIndex": 1, + "blockNumber": 2625238, + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c" + }, + { + "transactionIndex": 1, + "blockNumber": 2625238, + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c" + }, + { + "transactionIndex": 1, + "blockNumber": 2625238, + "transactionHash": "0x0b4c297497a99aa162f0448b8fabf95e102ebb9129444ba707b6c13e8a9e46a6", + "address": "0xa12c1E460c06B1745EFcbfC9A1f666a8749B0e3A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 3, + "blockHash": "0x103178b2cd659ae7e4c6a53f1e7abcec5f76e15e3e796af28f019edac56ce45c" + } + ], + "blockNumber": 2625238, + "cumulativeGasUsed": "862290", + "status": 1, + "byzantium": true + }, + "args": [ + "0xB48221b8a1137895e384aBcaFF8120d053Be43F5", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0x485cc95500000000000000000000000042000000000000000000000000000000000000060000000000000000000000007fd569b2021850fba53887dd07736010acbfc787" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/JumpRateModel.json b/packages/sdk/deployments/mode/JumpRateModel.json new file mode 100644 index 0000000000..31d871ff15 --- /dev/null +++ b/packages/sdk/deployments/mode/JumpRateModel.json @@ -0,0 +1,667 @@ +{ + "address": "0x21a455cEd9C79BC523D4E340c2B97521F4217817", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_blocksPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "baseRatePerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "multiplierPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "jumpMultiplierPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kink_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "baseRatePerBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "multiplierPerBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "jumpMultiplierPerBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "kink", + "type": "uint256" + } + ], + "name": "NewInterestParams", + "type": "event" + }, + { + "inputs": [], + "name": "baseRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "name": "getBorrowRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactorMantissa", + "type": "uint256" + } + ], + "name": "getSupplyRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isInterestRateModel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "jumpMultiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "kink", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "multiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "name": "utilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "transactionHash": "0xb640b15b38b1d3b5024aa9da152c3724aadb2bba06441ab21c5546084f6dd973", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x21a455cEd9C79BC523D4E340c2B97521F4217817", + "transactionIndex": 1, + "gasUsed": "354371", + "logsBloom": "0x20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000002000000000000000080000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000", + "blockHash": "0x7b27d183a20052ad866ec77a080aa4bda940cf974933277fe952b5749b1ded5d", + "transactionHash": "0xb640b15b38b1d3b5024aa9da152c3724aadb2bba06441ab21c5546084f6dd973", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097508, + "transactionHash": "0xb640b15b38b1d3b5024aa9da152c3724aadb2bba06441ab21c5546084f6dd973", + "address": "0x21a455cEd9C79BC523D4E340c2B97521F4217817", + "topics": [ + "0x6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a86b16fa0000000000000000000000000000000000000000000000000000003b1068377e0000000000000000000000000000000000000000000000000b1a2bc2ec500000", + "logIndex": 0, + "blockHash": "0x7b27d183a20052ad866ec77a080aa4bda940cf974933277fe952b5749b1ded5d" + } + ], + "blockNumber": 2097508, + "cumulativeGasUsed": "418384", + "status": 1, + "byzantium": true + }, + "args": [ + 15768000, + "0", + "180000000000000000", + "4000000000000000000", + "800000000000000000" + ], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_blocksPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "baseRatePerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "multiplierPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "jumpMultiplierPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kink_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "baseRatePerBlock", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "multiplierPerBlock", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "jumpMultiplierPerBlock", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "kink", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewInterestParams", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "baseRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSupplyRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "isInterestRateModel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "jumpMultiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "kink", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "multiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "utilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "_blocksPerYear": "The approximate number of blocks per year", + "baseRatePerYear": "The approximate target base APR, as a mantissa (scaled by 1e18)", + "jumpMultiplierPerYear": "The multiplierPerBlock after hitting a specified utilization point", + "kink_": "The utilization point at which the jump multiplier is applied", + "multiplierPerYear": "The rate of increase in interest rate wrt utilization (scaled by 1e18)" + } + }, + "getBorrowRate(uint256,uint256,uint256)": { + "params": { + "borrows": "The amount of borrows in the market", + "cash": "The amount of cash in the market", + "reserves": "The amount of reserves in the market" + }, + "returns": { + "_0": "The borrow rate percentage per block as a mantissa (scaled by 1e18)" + } + }, + "getSupplyRate(uint256,uint256,uint256,uint256)": { + "params": { + "borrows": "The amount of borrows in the market", + "cash": "The amount of cash in the market", + "reserveFactorMantissa": "The current reserve factor for the market", + "reserves": "The amount of reserves in the market" + }, + "returns": { + "_0": "The supply rate percentage per block as a mantissa (scaled by 1e18)" + } + }, + "utilizationRate(uint256,uint256,uint256)": { + "params": { + "borrows": "The amount of borrows in the market", + "cash": "The amount of cash in the market", + "reserves": "The amount of reserves in the market (currently unused)" + }, + "returns": { + "_0": "The utilization rate as a mantissa between [0, 1e18]" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "baseRatePerBlock()": { + "notice": "The base interest rate which is the y-intercept when utilization rate is 0" + }, + "blocksPerYear()": { + "notice": "The approximate number of blocks per year that is assumed by the interest rate model" + }, + "constructor": { + "notice": "Construct an interest rate model" + }, + "getBorrowRate(uint256,uint256,uint256)": { + "notice": "Calculates the current borrow rate per block, with the error code expected by the market" + }, + "getSupplyRate(uint256,uint256,uint256,uint256)": { + "notice": "Calculates the current supply rate per block" + }, + "isInterestRateModel()": { + "notice": "Indicator that this is an InterestRateModel contract (for inspection)" + }, + "jumpMultiplierPerBlock()": { + "notice": "The multiplierPerBlock after hitting a specified utilization point" + }, + "kink()": { + "notice": "The utilization point at which the jump multiplier is applied" + }, + "multiplierPerBlock()": { + "notice": "The multiplier of utilization rate that gives the slope of the interest rate" + }, + "utilizationRate(uint256,uint256,uint256)": { + "notice": "Calculates the utilization rate of the market: `borrows / (cash + borrows - reserves)`" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/JumpRateModel.sol": "JumpRateModel" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/JumpRateModel.sol": { + "keccak256": "0x58c22b251b5a400a582b65598e64e5005e850797dcb8e1afc3f32ece462ef2c3", + "urls": [ + "bzz-raw://d849afc568f51e016f1d0313034d20dd1cf2a698fa89b1eea64f9a4ead78a4bf", + "dweb:/ipfs/QmSTDXPDQTdnUnGzqTDNuB84s54y3QARM5b4EM6DW5bvqq" + ], + "license": "UNLICENSED" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506040516104de3803806104de83398101604081905261002f916100c1565b600085905561003e8585610101565b60025560005461004e9084610101565b60015560005461005e9083610101565b60038190556004829055600254600154604080519283526020830191909152810191909152606081018290527f6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d9060800160405180910390a15050505050610123565b600080600080600060a086880312156100d957600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b60008261011e57634e487b7160e01b600052601260045260246000fd5b500490565b6103ac806101326000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a385fb9611610066578063a385fb96146100f2578063b8168816146100fb578063b9f9850a1461010e578063f14039de14610117578063fd2da3391461012057600080fd5b806315f24053146100985780632191f92a146100be5780636e71e2d8146100d65780638726bb89146100e9575b600080fd5b6100ab6100a63660046102bb565b610129565b6040519081526020015b60405180910390f35b6100c6600181565b60405190151581526020016100b5565b6100ab6100e43660046102bb565b6101f7565b6100ab60015481565b6100ab60005481565b6100ab6101093660046102e7565b61023f565b6100ab60035481565b6100ab60025481565b6100ab60045481565b6000806101378585856101f7565b9050600454811161017857600254670de0b6b3a76400006001548361015c919061032f565b610166919061034e565b6101709190610370565b9150506101f0565b6000600254670de0b6b3a7640000600154600454610196919061032f565b6101a0919061034e565b6101aa9190610370565b90506000600454836101bc9190610388565b905081670de0b6b3a7640000600354836101d6919061032f565b6101e0919061034e565b6101ea9190610370565b93505050505b9392505050565b600082610206575060006101f0565b816102118486610370565b61021b9190610388565b61022d84670de0b6b3a764000061032f565b610237919061034e565b949350505050565b60008061025483670de0b6b3a7640000610388565b90506000610263878787610129565b90506000670de0b6b3a764000061027a848461032f565b610284919061034e565b9050670de0b6b3a76400008161029b8a8a8a6101f7565b6102a5919061032f565b6102af919061034e565b98975050505050505050565b6000806000606084860312156102d057600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156102fd57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561034957610349610319565b500290565b60008261036b57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561038357610383610319565b500190565b60008282101561039a5761039a610319565b50039056fea164736f6c634300080a000a", + "sourceMap": "172:4226:26:-:0;;;1533:498;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1697:13;:30;;;1752:31;1713:14;1752:15;:31;:::i;:::-;1733:16;:50;1830:13;;1810:33;;:17;:33;:::i;:::-;1789:18;:54;1898:13;;1874:37;;:21;:37;:::i;:::-;1849:22;:62;;;1917:4;:12;;;1959:16;;1977:18;;1941:85;;;902:25:486;;;958:2;943:18;;936:34;;;;986:18;;979:34;;;;1044:2;1029:18;;1022:34;;;1941:85:26;;889:3:486;874:19;1941:85:26;;;;;;;1533:498;;;;;172:4226;;14:430:486;120:6;128;136;144;152;205:3;193:9;184:7;180:23;176:33;173:53;;;222:1;219;212:12;173:53;-1:-1:-1;;245:16:486;;301:2;286:18;;280:25;345:2;330:18;;324:25;389:2;374:18;;368:25;433:3;418:19;;;412:26;245:16;;280:25;;-1:-1:-1;324:25:486;368;-1:-1:-1;412:26:486;;-1:-1:-1;14:430:486;-1:-1:-1;14:430:486:o;449:217::-;489:1;515;505:132;;559:10;554:3;550:20;547:1;540:31;594:4;591:1;584:15;622:4;619:1;612:15;505:132;-1:-1:-1;651:9:486;;449:217::o;671:391::-;172:4226:26;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063a385fb9611610066578063a385fb96146100f2578063b8168816146100fb578063b9f9850a1461010e578063f14039de14610117578063fd2da3391461012057600080fd5b806315f24053146100985780632191f92a146100be5780636e71e2d8146100d65780638726bb89146100e9575b600080fd5b6100ab6100a63660046102bb565b610129565b6040519081526020015b60405180910390f35b6100c6600181565b60405190151581526020016100b5565b6100ab6100e43660046102bb565b6101f7565b6100ab60015481565b6100ab60005481565b6100ab6101093660046102e7565b61023f565b6100ab60035481565b6100ab60025481565b6100ab60045481565b6000806101378585856101f7565b9050600454811161017857600254670de0b6b3a76400006001548361015c919061032f565b610166919061034e565b6101709190610370565b9150506101f0565b6000600254670de0b6b3a7640000600154600454610196919061032f565b6101a0919061034e565b6101aa9190610370565b90506000600454836101bc9190610388565b905081670de0b6b3a7640000600354836101d6919061032f565b6101e0919061034e565b6101ea9190610370565b93505050505b9392505050565b600082610206575060006101f0565b816102118486610370565b61021b9190610388565b61022d84670de0b6b3a764000061032f565b610237919061034e565b949350505050565b60008061025483670de0b6b3a7640000610388565b90506000610263878787610129565b90506000670de0b6b3a764000061027a848461032f565b610284919061034e565b9050670de0b6b3a76400008161029b8a8a8a6101f7565b6102a5919061032f565b6102af919061034e565b98975050505050505050565b6000806000606084860312156102d057600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156102fd57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561034957610349610319565b500290565b60008261036b57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561038357610383610319565b500190565b60008282101561039a5761039a610319565b50039056fea164736f6c634300080a000a", + "sourceMap": "172:4226:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:505;;;;;;:::i;:::-;;:::i;:::-;;;481:25:486;;;469:2;454:18;3045:505:26;;;;;;;;266:47:25;;309:4;266:47;;;;;682:14:486;;675:22;657:41;;645:2;630:18;266:47:25;517:187:486;2396:286:26;;;;;;:::i;:::-;;:::i;613:33::-;;;;;;478:28;;;;;;3945:451;;;;;;:::i;:::-;;:::i;879:37::-;;;;;;751:31;;;;;;1008:19;;;;;;3045:505;3163:7;3178:12;3193:40;3209:4;3215:7;3224:8;3193:15;:40::i;:::-;3178:55;;3252:4;;3244;:12;3240:306;;3312:16;;3304:4;3282:18;;3275:4;:25;;;;:::i;:::-;3274:34;;;;:::i;:::-;3273:55;;;;:::i;:::-;3266:62;;;;;3240:306;3349:18;3409:16;;3401:4;3379:18;;3372:4;;:25;;;;:::i;:::-;3371:34;;;;:::i;:::-;3370:55;;;;:::i;:::-;3349:76;;3433:18;3461:4;;3454;:11;;;;:::i;:::-;3433:32;;3529:10;3521:4;3495:22;;3482:10;:35;;;;:::i;:::-;3481:44;;;;:::i;:::-;3480:59;;;;:::i;:::-;3473:66;;;;;3045:505;;;;;;:::o;2396:286::-;2507:7;2581:12;2577:41;;-1:-1:-1;2610:1:26;2603:8;;2577:41;2668:8;2651:14;2658:7;2651:4;:14;:::i;:::-;:25;;;;:::i;:::-;2632:14;:7;2642:4;2632:14;:::i;:::-;2631:46;;;;:::i;:::-;2624:53;2396:286;-1:-1:-1;;;;2396:286:26:o;3945:451::-;4106:7;;4153:28;4160:21;4153:4;:28;:::i;:::-;4121:60;;4187:18;4208:38;4222:4;4228:7;4237:8;4208:13;:38::i;:::-;4187:59;-1:-1:-1;4252:18:26;4312:4;4274:34;4287:21;4187:59;4274:34;:::i;:::-;4273:43;;;;:::i;:::-;4252:64;;4387:4;4373:10;4330:40;4346:4;4352:7;4361:8;4330:15;:40::i;:::-;:53;;;;:::i;:::-;4329:62;;;;:::i;:::-;4322:69;3945:451;-1:-1:-1;;;;;;;;3945:451:26:o;14:316:486:-;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;199:23:486;;;269:2;254:18;;241:32;;-1:-1:-1;320:2:486;305:18;;;292:32;;14:316;-1:-1:-1;14:316:486:o;709:385::-;795:6;803;811;819;872:3;860:9;851:7;847:23;843:33;840:53;;;889:1;886;879:12;840:53;-1:-1:-1;;912:23:486;;;982:2;967:18;;954:32;;-1:-1:-1;1033:2:486;1018:18;;1005:32;;1084:2;1069:18;1056:32;;-1:-1:-1;709:385:486;-1:-1:-1;709:385:486:o;1099:127::-;1160:10;1155:3;1151:20;1148:1;1141:31;1191:4;1188:1;1181:15;1215:4;1212:1;1205:15;1231:168;1271:7;1337:1;1333;1329:6;1325:14;1322:1;1319:21;1314:1;1307:9;1300:17;1296:45;1293:71;;;1344:18;;:::i;:::-;-1:-1:-1;1384:9:486;;1231:168::o;1404:217::-;1444:1;1470;1460:132;;1514:10;1509:3;1505:20;1502:1;1495:31;1549:4;1546:1;1539:15;1577:4;1574:1;1567:15;1460:132;-1:-1:-1;1606:9:486;;1404:217::o;1626:128::-;1666:3;1697:1;1693:6;1690:1;1687:13;1684:39;;;1703:18;;:::i;:::-;-1:-1:-1;1739:9:486;;1626:128::o;1759:125::-;1799:4;1827:1;1824;1821:8;1818:34;;;1832:18;;:::i;:::-;-1:-1:-1;1869:9:486;;1759:125::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "baseRatePerBlock()": "f14039de", + "blocksPerYear()": "a385fb96", + "getBorrowRate(uint256,uint256,uint256)": "15f24053", + "getSupplyRate(uint256,uint256,uint256,uint256)": "b8168816", + "isInterestRateModel()": "2191f92a", + "jumpMultiplierPerBlock()": "b9f9850a", + "kink()": "fd2da339", + "multiplierPerBlock()": "8726bb89", + "utilizationRate(uint256,uint256,uint256)": "6e71e2d8" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LeveredPositionFactory.json b/packages/sdk/deployments/mode/LeveredPositionFactory.json new file mode 100644 index 0000000000..ea66716629 --- /dev/null +++ b/packages/sdk/deployments/mode/LeveredPositionFactory.json @@ -0,0 +1,938 @@ +{ + "address": "0x9B506A03bBFf2a842866b10BC6732da72640cd45", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "_feeDistributor", + "type": "address" + }, + { + "internalType": "contract ILiquidatorsRegistry", + "name": "_registry", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_blocksPerYear", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "_currentImpl", + "type": "address" + } + ], + "name": "FunctionAlreadyAdded", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "FunctionNotFound", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "name": "_listExtensions", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "name": "_registerExtension", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "_liquidatorsRegistry", + "type": "address" + } + ], + "name": "_setLiquidatorsRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "bool", + "name": "_whitelisted", + "type": "bool" + } + ], + "name": "_setPairWhitelisted", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "liquidatorsRegistry", + "outputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xdda5ba71d8c0e5d787e8fc91a6d8922866722736a055107c76d7d88fabf5c09a", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x9B506A03bBFf2a842866b10BC6732da72640cd45", + "transactionIndex": 1, + "gasUsed": "1147948", + "logsBloom": "0x00000000200000000000000000200000000000000000000000800000000200000020000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x2978ba6315f6a0703ff965961cdc7098f4e9e1849dcdd97e4a1e123e881c4379", + "transactionHash": "0xdda5ba71d8c0e5d787e8fc91a6d8922866722736a055107c76d7d88fabf5c09a", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097649, + "transactionHash": "0xdda5ba71d8c0e5d787e8fc91a6d8922866722736a055107c76d7d88fabf5c09a", + "address": "0x9B506A03bBFf2a842866b10BC6732da72640cd45", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x2978ba6315f6a0703ff965961cdc7098f4e9e1849dcdd97e4a1e123e881c4379" + } + ], + "blockNumber": 2097649, + "cumulativeGasUsed": "1194861", + "status": 1, + "byzantium": true + }, + "args": [ + "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "0xc71B968C6C23e2723Bae32957D815C9bE3ca1b34", + 15768000 + ], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "_feeDistributor", + "type": "address" + }, + { + "internalType": "contract ILiquidatorsRegistry", + "name": "_registry", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_blocksPerYear", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "_currentImpl", + "type": "address" + } + ], + "type": "error", + "name": "FunctionAlreadyAdded" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "type": "error", + "name": "FunctionNotFound" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_listExtensions", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_registerExtension" + }, + { + "inputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "_liquidatorsRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLiquidatorsRegistry" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "bool", + "name": "_whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPairWhitelisted" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidatorsRegistry", + "outputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_registerExtension(address,address)": { + "details": "register a logic extension", + "params": { + "extensionToAdd": "the extension whose functions are to be added", + "extensionToReplace": "the extension whose functions are to be removed/replaced" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/levered/LeveredPositionFactory.sol": "LeveredPositionFactory" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/LeveredPositionFactory.sol": { + "keccak256": "0x46b4b9c8b3b669d7a0af3165c6109fc87bce87074cb5b85c5511c7694c828516", + "urls": [ + "bzz-raw://66f13c0409689ff6632e808d9e649360c6a73232e8c66428786a174937010224", + "dweb:/ipfs/QmfKXfyPaqhM3yoqtiW6awMJYpDEWmt5beRVKdAL4K1fum" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactoryStorage.sol": { + "keccak256": "0xec2c0858dfa3924ea09559bf081c579ff5b19a56ce36b2e986affad3e4f7cc4f", + "urls": [ + "bzz-raw://6973d7b17ad48d6f17fb9566c629b8db4abcd907d40c8085a01af647e5e1d016", + "dweb:/ipfs/QmVzc1JhAXMQY1Yr1EUc5rWfFTLZmB1aj8HRdnqehvVegh" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040523480156200001157600080fd5b506040516200136838038062001368833981016040819052620000349162000108565b6200003f3362000078565b600980546001600160a01b039485166001600160a01b031991821617909155600a805493909416921691909117909155600b5562000150565b600180546001600160a01b03191690556200009f81620000a2602090811b6200058117901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200009f57600080fd5b6000806000606084860312156200011e57600080fd5b83516200012b81620000f2565b60208501519093506200013e81620000f2565b80925050604084015190509250925092565b61120880620001606000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638715b16b116100715780638715b16b146101a857806389cd9855146101bb5780638da5cb5b146101ce578063a385fb96146101df578063e30c3978146101f6578063f2fde38b14610207576100b4565b8063035d2a381461012b5780630d43e8ad1461014057806316bb997f146101705780636333d00114610183578063715018a61461019857806379ba5097146101a0575b60006100cb6000356001600160e01b03191661021a565b90506001600160a01b03811661010757604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610126573d6000f35b3d6000fd5b61013e610139366004610f07565b61023a565b005b600954610153906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600a54610153906001600160a01b031681565b61018b6103f7565b6040516101679190610f57565b61013e610406565b61013e610456565b61013e6101b6366004610fa4565b6104d0565b61013e6101c9366004610fc1565b6104fa565b6000546001600160a01b0316610153565b6101e8600b5481565b604051908152602001610167565b6001546001600160a01b0316610153565b61013e610215366004610fa4565b610510565b6000610234826000805160206111dc8339815191526105d1565b92915050565b610242610677565b816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a49190610ffa565b6001600160a01b0316836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030f9190610ffa565b6001600160a01b0316146103655760405162461bcd60e51b815260206004820152601c60248201527f6d61726b657473206e6f74206f66207468652073616d6520706f6f6c0000000060448201526064016100fe565b801561039f576103766005846106d3565b506001600160a01b038316600090815260076020526040902061039990836106d3565b50505050565b6001600160a01b03831660009081526007602052604090206103c190836106ef565b506001600160a01b03831660009081526007602052604090206103e390610704565b6103f2576103996005846106ef565b505050565b606061040161070e565b905090565b61040e610677565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064016100fe565b60015433906001600160a01b031681146104c45760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016100fe565b6104cd81610780565b50565b6104d8610677565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610502610677565b61050c8282610799565b5050565b610518610677565b600180546001600160a01b0383166001600160a01b031990911681179091556105496000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8054600090815b8181101561066c57846001600160e01b03191684600001828154811061060057610600611017565b600091825260209091200154600160a01b900460e01b6001600160e01b031916141561065a5783600001818154811061063b5761063b611017565b6000918252602090912001546001600160a01b03169250610234915050565b8061066481611043565b9150506105d8565b506000949350505050565b6000546001600160a01b031633146106d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016100fe565b565b60006106e8836001600160a01b0384166107ba565b9392505050565b60006106e8836001600160a01b038416610809565b6000610234825490565b60606000805160206111dc83398151915260010180548060200260200160405190810160405280929190818152602001828054801561077657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610758575b5050505050905090565b600180546001600160a01b03191690556104cd81610581565b6001600160a01b038116156107b1576107b1816108fc565b61050c82610a2c565b600081815260018301602052604081205461080157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610234565b506000610234565b600081815260018301602052604081205480156108f257600061082d60018361105e565b85549091506000906108419060019061105e565b90508181146108a657600086600001828154811061086157610861611017565b906000526020600020015490508087600001848154811061088457610884611017565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806108b7576108b7611075565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610234565b6000915050610234565b6000805160206111dc83398151915261091482610b24565b60005b600182015460ff821610156103f257826001600160a01b0316826001018260ff168154811061094857610948611017565b6000918252602090912001546001600160a01b03161415610a1a576001808301805490916109759161105e565b8154811061098557610985611017565b6000918252602090912001546001830180546001600160a01b039092169160ff84169081106109b6576109b6611017565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806109f7576109f7611075565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610a248161108b565b915050610917565b6000805160206111dc83398151915260005b600182015460ff82161015610ae457826001600160a01b0316826001018260ff1681548110610a6f57610a6f611017565b6000918252602090912001546001600160a01b03161415610ad25760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c726561647920616464656400000000000000000060448201526064016100fe565b80610adc8161108b565b915050610a3e565b50610aee82610ce3565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b8c91908101906110de565b90506000805160206111dc83398151915260005b82518161ffff161015610399576000838261ffff1681518110610bc557610bc5611017565b60200260200101519050610bd981846105d1565b6001600160a01b0316856001600160a01b031614610bf957610bf96111a3565b6000610c058285610e6a565b84549091508490610c189060019061105e565b81548110610c2857610c28611017565b90600052602060002001846000018261ffff1681548110610c4b57610c4b611017565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080610cac57610cac611075565b600082815260209020810160001990810180546001600160c01b031916905501905550819050610cdb816111b9565b915050610ba0565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d4b91908101906110de565b6000805160206111dc83398151915280549192509060005b8351811015610e63576000848281518110610d8057610d80611017565b602002602001015190506000610d9682866105d1565b90506001600160a01b03811615610ddb57604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b03821660248201526044016100fe565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b0319909216939092169290921791909117905583610e4b816111b9565b94505050508080610e5b90611043565b915050610d63565b5050505050565b8054600090815b8161ffff168161ffff161015610ee657846001600160e01b031916846000018261ffff1681548110610ea557610ea5611017565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610ed45791506102349050565b80610ede816111b9565b915050610e71565b5061ffff949350505050565b6001600160a01b03811681146104cd57600080fd5b600080600060608486031215610f1c57600080fd5b8335610f2781610ef2565b92506020840135610f3781610ef2565b915060408401358015158114610f4c57600080fd5b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f985783516001600160a01b031683529284019291840191600101610f73565b50909695505050505050565b600060208284031215610fb657600080fd5b81356106e881610ef2565b60008060408385031215610fd457600080fd5b8235610fdf81610ef2565b91506020830135610fef81610ef2565b809150509250929050565b60006020828403121561100c57600080fd5b81516106e881610ef2565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156110575761105761102d565b5060010190565b6000828210156110705761107061102d565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156110a2576110a261102d565b60010192915050565b634e487b7160e01b600052604160045260246000fd5b80516001600160e01b0319811681146110d957600080fd5b919050565b600060208083850312156110f157600080fd5b825167ffffffffffffffff8082111561110957600080fd5b818501915085601f83011261111d57600080fd5b81518181111561112f5761112f6110ab565b8060051b604051601f19603f83011681018181108582111715611154576111546110ab565b60405291825284820192508381018501918883111561117257600080fd5b938501935b8285101561119757611188856110c1565b84529385019392850192611177565b98975050505050505050565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156111d1576111d161102d565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000a", + "sourceMap": "849:1760:143:-:0;;;1163:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:452;719:10:466;936:18:452;:32::i;:::-;1286:14:143;:32;;-1:-1:-1;;;;;1286:32:143;;;-1:-1:-1;;;;;;1286:32:143;;;;;;;1324:19;:31;;;;;;;;;;;;;;;1361:13;:30;849:1760;;1496:153:453;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:148:486:-;-1:-1:-1;;;;;106:31:486;;96:42;;86:70;;152:1;149;142:12;167:535;310:6;318;326;379:2;367:9;358:7;354:23;350:32;347:52;;;395:1;392;385:12;347:52;427:9;421:16;446:48;488:5;446:48;:::i;:::-;563:2;548:18;;542:25;513:5;;-1:-1:-1;576:50:486;542:25;576:50;:::i;:::-;645:7;635:17;;;692:2;681:9;677:18;671:25;661:35;;167:535;;;;;:::o;:::-;849:1760:143;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638715b16b116100715780638715b16b146101a857806389cd9855146101bb5780638da5cb5b146101ce578063a385fb96146101df578063e30c3978146101f6578063f2fde38b14610207576100b4565b8063035d2a381461012b5780630d43e8ad1461014057806316bb997f146101705780636333d00114610183578063715018a61461019857806379ba5097146101a0575b60006100cb6000356001600160e01b03191661021a565b90506001600160a01b03811661010757604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610126573d6000f35b3d6000fd5b61013e610139366004610f07565b61023a565b005b600954610153906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600a54610153906001600160a01b031681565b61018b6103f7565b6040516101679190610f57565b61013e610406565b61013e610456565b61013e6101b6366004610fa4565b6104d0565b61013e6101c9366004610fc1565b6104fa565b6000546001600160a01b0316610153565b6101e8600b5481565b604051908152602001610167565b6001546001600160a01b0316610153565b61013e610215366004610fa4565b610510565b6000610234826000805160206111dc8339815191526105d1565b92915050565b610242610677565b816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a49190610ffa565b6001600160a01b0316836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030f9190610ffa565b6001600160a01b0316146103655760405162461bcd60e51b815260206004820152601c60248201527f6d61726b657473206e6f74206f66207468652073616d6520706f6f6c0000000060448201526064016100fe565b801561039f576103766005846106d3565b506001600160a01b038316600090815260076020526040902061039990836106d3565b50505050565b6001600160a01b03831660009081526007602052604090206103c190836106ef565b506001600160a01b03831660009081526007602052604090206103e390610704565b6103f2576103996005846106ef565b505050565b606061040161070e565b905090565b61040e610677565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064016100fe565b60015433906001600160a01b031681146104c45760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016100fe565b6104cd81610780565b50565b6104d8610677565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610502610677565b61050c8282610799565b5050565b610518610677565b600180546001600160a01b0383166001600160a01b031990911681179091556105496000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8054600090815b8181101561066c57846001600160e01b03191684600001828154811061060057610600611017565b600091825260209091200154600160a01b900460e01b6001600160e01b031916141561065a5783600001818154811061063b5761063b611017565b6000918252602090912001546001600160a01b03169250610234915050565b8061066481611043565b9150506105d8565b506000949350505050565b6000546001600160a01b031633146106d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016100fe565b565b60006106e8836001600160a01b0384166107ba565b9392505050565b60006106e8836001600160a01b038416610809565b6000610234825490565b60606000805160206111dc83398151915260010180548060200260200160405190810160405280929190818152602001828054801561077657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610758575b5050505050905090565b600180546001600160a01b03191690556104cd81610581565b6001600160a01b038116156107b1576107b1816108fc565b61050c82610a2c565b600081815260018301602052604081205461080157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610234565b506000610234565b600081815260018301602052604081205480156108f257600061082d60018361105e565b85549091506000906108419060019061105e565b90508181146108a657600086600001828154811061086157610861611017565b906000526020600020015490508087600001848154811061088457610884611017565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806108b7576108b7611075565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610234565b6000915050610234565b6000805160206111dc83398151915261091482610b24565b60005b600182015460ff821610156103f257826001600160a01b0316826001018260ff168154811061094857610948611017565b6000918252602090912001546001600160a01b03161415610a1a576001808301805490916109759161105e565b8154811061098557610985611017565b6000918252602090912001546001830180546001600160a01b039092169160ff84169081106109b6576109b6611017565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806109f7576109f7611075565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610a248161108b565b915050610917565b6000805160206111dc83398151915260005b600182015460ff82161015610ae457826001600160a01b0316826001018260ff1681548110610a6f57610a6f611017565b6000918252602090912001546001600160a01b03161415610ad25760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c726561647920616464656400000000000000000060448201526064016100fe565b80610adc8161108b565b915050610a3e565b50610aee82610ce3565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b8c91908101906110de565b90506000805160206111dc83398151915260005b82518161ffff161015610399576000838261ffff1681518110610bc557610bc5611017565b60200260200101519050610bd981846105d1565b6001600160a01b0316856001600160a01b031614610bf957610bf96111a3565b6000610c058285610e6a565b84549091508490610c189060019061105e565b81548110610c2857610c28611017565b90600052602060002001846000018261ffff1681548110610c4b57610c4b611017565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080610cac57610cac611075565b600082815260209020810160001990810180546001600160c01b031916905501905550819050610cdb816111b9565b915050610ba0565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d4b91908101906110de565b6000805160206111dc83398151915280549192509060005b8351811015610e63576000848281518110610d8057610d80611017565b602002602001015190506000610d9682866105d1565b90506001600160a01b03811615610ddb57604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b03821660248201526044016100fe565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b0319909216939092169290921791909117905583610e4b816111b9565b94505050508080610e5b90611043565b915050610d63565b5050505050565b8054600090815b8161ffff168161ffff161015610ee657846001600160e01b031916846000018261ffff1681548110610ea557610ea5611017565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610ed45791506102349050565b80610ede816111b9565b915050610e71565b5061ffff949350505050565b6001600160a01b03811681146104cd57600080fd5b600080600060608486031215610f1c57600080fd5b8335610f2781610ef2565b92506020840135610f3781610ef2565b915060408401358015158114610f4c57600080fd5b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f985783516001600160a01b031683529284019291840191600101610f73565b50909695505050505050565b600060208284031215610fb657600080fd5b81356106e881610ef2565b60008060408385031215610fd457600080fd5b8235610fdf81610ef2565b91506020830135610fef81610ef2565b809150509250929050565b60006020828403121561100c57600080fd5b81516106e881610ef2565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156110575761105761102d565b5060010190565b6000828210156110705761107061102d565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156110a2576110a261102d565b60010192915050565b634e487b7160e01b600052604160045260246000fd5b80516001600160e01b0319811681146110d957600080fd5b919050565b600060208083850312156110f157600080fd5b825167ffffffffffffffff8082111561110957600080fd5b818501915085601f83011261111d57600080fd5b81518181111561112f5761112f6110ab565b8060051b604051601f19603f83011681018181108582111715611154576111546110ab565b60405291825284820192508381018501918883111561117257600080fd5b938501935b8285101561119757611188856110c1565b84529385019392850192611177565b98975050505050505050565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156111d1576111d161102d565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000a", + "sourceMap": "849:1760:143:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1275:17:129;1295:43;1330:7;;-1:-1:-1;;;;;;1330:7:129;1295:34;:43::i;:::-;1275:63;-1:-1:-1;;;;;;1348:23:129;;1344:61;;1380:25;;-1:-1:-1;;;1380:25:129;;-1:-1:-1;;;;;;1397:7:129;;;1380:25;;;158:52:486;131:18;;1380:25:129;;;;;;;;1344:61;1586:14;1583:1;1580;1567:34;1726:1;1723;1707:14;1704:1;1693:9;1686:5;1673:55;1786:16;1783:1;1780;1765:38;1878:6;1891:52;;;;1978:16;1975:1;1968:27;1891:52;1918:16;1915:1;1908:27;1583:655:143;;;;;;:::i;:::-;;:::i;:::-;;1127:37:146;;;;;-1:-1:-1;;;;;1127:37:146;;;;;;-1:-1:-1;;;;;1177:32:486;;;1159:51;;1147:2;1132:18;1127:37:146;;;;;;;;1168:47;;;;;-1:-1:-1;;;;;1168:47:146;;;1134:111:129;;;:::i;:::-;;;;;;;:::i;174:106:133:-;;;:::i;1729:206:453:-;;;:::i;2242:148:143:-;;;;;;:::i;:::-;;:::i;2394:213::-;;;;;;:::i;:::-;;:::i;1201:85:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;1201:85;;1219:28:146;;;;;;;;;3230:25:486;;;3218:2;3203:18;1219:28:146;3084:177:486;842:99:453;921:13;;-1:-1:-1;;;;;921:13:453;842:99;;1134:178;;;;;;:::i;:::-;;:::i;2384:147:129:-;2455:7;2477:49;2501:6;-1:-1:-1;;;;;;;;;;;2477:23:129;:49::i;:::-;2470:56;2384:147;-1:-1:-1;;2384:147:129:o;1583:655:143:-;1094:13:452;:11;:13::i;:::-;1765::143::1;-1:-1:-1::0;;;;;1765:25:143::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1730:62:143::1;:17;-1:-1:-1::0;;;;;1730:29:143::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1730:62:143::1;;1722:103;;;::::0;-1:-1:-1;;;1722:103:143;;4020:2:486;1722:103:143::1;::::0;::::1;4002:21:486::0;4059:2;4039:18;;;4032:30;4098;4078:18;;;4071:58;4146:18;;1722:103:143::1;3818:352:486::0;1722:103:143::1;1836:12;1832:402;;;1858:49;:17;1888::::0;1858:21:::1;:49::i;:::-;-1:-1:-1::0;;;;;;1915:48:143;::::1;;::::0;;;:29:::1;:48;::::0;;;;:76:::1;::::0;1976:13;1915:52:::1;:76::i;:::-;;1583:655:::0;;;:::o;1832:402::-:1;-1:-1:-1::0;;;;;2012:48:143;::::1;;::::0;;;:29:::1;:48;::::0;;;;:79:::1;::::0;2076:13;2012:55:::1;:79::i;:::-;-1:-1:-1::0;;;;;;2103:48:143;::::1;;::::0;;;:29:::1;:48;::::0;;;;:57:::1;::::0;:55:::1;:57::i;:::-;2099:128;;2175:52;:17;2208::::0;2175:24:::1;:52::i;2099:128::-;1583:655:::0;;;:::o;1134:111:129:-;1182:16;1213:27;:25;:27::i;:::-;1206:34;;1134:111;:::o;174:106:133:-;1094:13:452;:11;:13::i;:::-;235:40:133::1;::::0;-1:-1:-1;;;235:40:133;;4377:2:486;235:40:133::1;::::0;::::1;4359:21:486::0;4416:2;4396:18;;;4389:30;4455:32;4435:18;;;4428:60;4505:18;;235:40:133::1;4175:354:486::0;1729:206:453;921:13;;719:10:466;;-1:-1:-1;;;;;921:13:453;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:453;;4736:2:486;1814:78:453;;;4718:21:486;4775:2;4755:18;;;4748:30;4814:34;4794:18;;;4787:62;-1:-1:-1;;;4865:18:486;;;4858:39;4914:19;;1814:78:453;4534:405:486;1814:78:453;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;2242:148:143:-;1094:13:452;:11;:13::i;:::-;2343:19:143::1;:42:::0;;-1:-1:-1;;;;;;2343:42:143::1;-1:-1:-1::0;;;;;2343:42:143;;;::::1;::::0;;;::::1;::::0;;2242:148::o;2394:213::-;1094:13:452;:11;:13::i;:::-;2538:64:143::1;2567:14;2583:18;2538:28;:64::i;:::-;2394:213:::0;;:::o;1134:178:453:-;1094:13:452;:11;:13::i;:::-;1223::453::1;:24:::0;;-1:-1:-1;;;;;1223:24:453;::::1;-1:-1:-1::0;;;;;;1223:24:453;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::452::0;1273:6;-1:-1:-1;;;;;1273:6:452;;1201:85;1287:7:453::1;-1:-1:-1::0;;;;;1262:43:453::1;;;;;;;;;;;1134:178:::0;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;5191:309:129:-;5321:19;;5289:7;;;5346:126;5370:6;5366:1;:10;5346:126;;;5423:8;-1:-1:-1;;;;;5395:36:129;;:2;:12;;5408:1;5395:15;;;;;;;;:::i;:::-;;;;;;;;;;:24;-1:-1:-1;;;5395:24:129;;;;-1:-1:-1;;;;;;5395:36:129;;5391:74;;;5440:2;:12;;5453:1;5440:15;;;;;;;;:::i;:::-;;;;;;;;;;:25;-1:-1:-1;;;;;5440:25:129;;-1:-1:-1;5433:32:129;;-1:-1:-1;;5433:32:129;5391:74;5378:3;;;;:::i;:::-;;;;5346:126;;;-1:-1:-1;5493:1:129;;5191:309;-1:-1:-1;;;;5191:309:129:o;1359:130:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;719:10:466;1422:23:452;1414:68;;;;-1:-1:-1;;;1414:68:452;;5550:2:486;1414:68:452;;;5532:21:486;;;5569:18;;;5562:30;5628:34;5608:18;;;5601:62;5680:18;;1414:68:452;5348:356:486;1414:68:452;1359:130::o;8297:150:469:-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:469;;8390:4;:50::i;:::-;8383:57;8297:150;-1:-1:-1;;;8297:150:469:o;8615:156::-;8688:4;8711:53;8719:3;-1:-1:-1;;;;;8739:23:469;;8711:7;:53::i;9098:115::-;9161:7;9187:19;9195:3;4537:18;;4455:107;2714:112:129;2763:16;-1:-1:-1;;;;;;;;;;;2794:27:129;;2787:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2787:34:129;;;;;;;;;;;;;;;;;;;;;;;2714:112;:::o;1496:153:453:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;:34::i;2830:247:129:-;-1:-1:-1;;;;;2946:41:129;;;2942:97;;2997:35;3013:18;2997:15;:35::i;:::-;3044:28;3057:14;3044:12;:28::i;2206:404:469:-;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:469;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:469;2581:12;;2778:1388;2844:4;2981:19;;;:12;;;:19;;;;;;3015:15;;3011:1149;;3384:21;3408:14;3421:1;3408:10;:14;:::i;:::-;3456:18;;3384:38;;-1:-1:-1;3436:17:469;;3456:22;;3477:1;;3456:22;:::i;:::-;3436:42;;3510:13;3497:9;:26;3493:398;;3543:17;3563:3;:11;;3575:9;3563:22;;;;;;;;:::i;:::-;;;;;;;;;3543:42;;3714:9;3685:3;:11;;3697:13;3685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3797:23;;;:12;;;:23;;;;;:36;;;3493:398;3969:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4061:3;:12;;:19;4074:5;4061:19;;;;;;;;;;;4054:26;;;4102:4;4095:11;;;;;;;3011:1149;4144:5;4137:12;;;;;3081:430:129;-1:-1:-1;;;;;;;;;;;3253:35:129;3278:9;3253:24;:35::i;:::-;3299:7;3294:213;3316:13;;;:20;3312:24;;;;3294:213;;;3383:9;-1:-1:-1;;;;;3355:38:129;:2;:13;;3369:1;3355:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3355:16:129;:38;3351:150;;;3424:13;;;;3438:20;;3424:13;;3438:24;;;:::i;:::-;3424:39;;;;;;;;:::i;:::-;;;;;;;;;;;;3405:13;;:16;;-1:-1:-1;;;;;3424:39:129;;;;3405:16;;;;;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1;;;;;3405:58:129;;;;;-1:-1:-1;;;;;3405:58:129;;;;;;3473:2;:13;;:19;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;3473:19:129;;;;;-1:-1:-1;;;;;;3473:19:129;;;;;;3351:150;3338:3;;;;:::i;:::-;;;;3294:213;;3515:337;-1:-1:-1;;;;;;;;;;;3580:23:129;3628:138;3650:13;;;:20;3646:24;;;;3628:138;;;3721:9;-1:-1:-1;;;;;3693:38:129;:2;:13;;3707:1;3693:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3693:16:129;:38;;3685:74;;;;-1:-1:-1;;;3685:74:129;;6353:2:486;3685:74:129;;;6335:21:486;6392:2;6372:18;;;6365:30;6431:25;6411:18;;;6404:53;6474:18;;3685:74:129;6151:347:486;3685:74:129;3672:3;;;;:::i;:::-;;;;3628:138;;;;3771:32;3793:9;3771:21;:32::i;:::-;3809:13;;;;:38;;;;;;;-1:-1:-1;3809:38:129;;;;;;;;;-1:-1:-1;;;;;;3809:38:129;-1:-1:-1;;;;;3809:38:129;;;;;;;;;;3515:337::o;3856:672::-;3933:27;3963:9;-1:-1:-1;;;;;3963:32:129;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3963:34:129;;;;;;;;;;;;:::i;:::-;3933:64;-1:-1:-1;;;;;;;;;;;;4003:23:129;4051:473;4074:11;:18;4070:1;:22;;;4051:473;;;4107:23;4133:11;4145:1;4133:14;;;;;;;;;;:::i;:::-;;;;;;;4107:40;;4209:45;4233:16;4251:2;4209:23;:45::i;:::-;-1:-1:-1;;;;;4187:67:129;4195:9;-1:-1:-1;;;;;4187:67:129;;4180:75;;;;:::i;:::-;4356:18;4377:41;4397:16;4415:2;4377:19;:41::i;:::-;4467:19;;4356:62;;-1:-1:-1;4454:2:129;;4467:23;;4489:1;;4467:23;:::i;:::-;4454:37;;;;;;;;:::i;:::-;;;;;;;;4426:2;:12;;4439:11;4426:25;;;;;;;;;;:::i;:::-;;;;;;;;;:65;;:25;;:65;;-1:-1:-1;;;;;4426:65:129;;;-1:-1:-1;;;;;;4426:65:129;;;;;;;;-1:-1:-1;;;;;;4426:65:129;;;;;;-1:-1:-1;;;4426:65:129;;;;;;;;;;;;4499:18;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;4499:18:129;;;;;-1:-1:-1;;;;;;4499:18:129;;;;;;-1:-1:-1;4094:3:129;;-1:-1:-1;4094:3:129;;;:::i;:::-;;;;4051:473;;4532:655;4606:24;4633:9;-1:-1:-1;;;;;4633:32:129;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4633:34:129;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;4752:19:129;;4606:61;;-1:-1:-1;2182:47:129;4673:23;4778:405;4828:8;:15;4811:14;:32;4778:405;;;4871:15;4889:8;4898:14;4889:24;;;;;;;;:::i;:::-;;;;;;;4871:42;;4921:25;4949:37;4973:8;4983:2;4949:23;:37::i;:::-;4921:65;-1:-1:-1;;;;;;4998:31:129;;;4994:93;;5038:49;;-1:-1:-1;;;5038:49:129;;-1:-1:-1;;;;;;8473:33:486;;5038:49:129;;;8455:52:486;-1:-1:-1;;;;;8543:32:486;;8523:18;;;8516:60;8428:18;;5038:49:129;8283:299:486;4994:93:129;5113:38;;;;;;;;;-1:-1:-1;;;;;5113:38:129;;;;;-1:-1:-1;;;;;;5113:38:129;;;;;;;;;5095:57;;;;;;;:12;:57;;;;;;;;;;;;;;;;;-1:-1:-1;;;5095:57:129;-1:-1:-1;;;;;;5095:57:129;;;;;;;;;;;;;;;;;5160:16;;;;:::i;:::-;;;;4863:320;;4845:16;;;;;:::i;:::-;;;;4778:405;;;;4600:587;;;4532:655;:::o;5504:292::-;5635:19;;5598:6;;;5661:101;5684:6;5680:10;;:1;:10;;;5661:101;;;5737:8;-1:-1:-1;;;;;5709:36:129;;:2;:12;;5722:1;5709:15;;;;;;;;;;:::i;:::-;;;;;;;;;;:24;-1:-1:-1;;;5709:24:129;;;;-1:-1:-1;;;;;;5709:36:129;;5705:50;;;5754:1;-1:-1:-1;5747:8:129;;-1:-1:-1;5747:8:129;5705:50;5692:3;;;;:::i;:::-;;;;5661:101;;;-1:-1:-1;5775:16:129;;5504:292;-1:-1:-1;;;;5504:292:129:o;221:140:486:-;-1:-1:-1;;;;;305:31:486;;295:42;;285:70;;351:1;348;341:12;366:609;474:6;482;490;543:2;531:9;522:7;518:23;514:32;511:52;;;559:1;556;549:12;511:52;598:9;585:23;617:40;651:5;617:40;:::i;:::-;676:5;-1:-1:-1;733:2:486;718:18;;705:32;746:42;705:32;746:42;:::i;:::-;807:7;-1:-1:-1;866:2:486;851:18;;838:32;908:15;;901:23;889:36;;879:64;;939:1;936;929:12;879:64;962:7;952:17;;;366:609;;;;;:::o;1459:658::-;1630:2;1682:21;;;1752:13;;1655:18;;;1774:22;;;1601:4;;1630:2;1853:15;;;;1827:2;1812:18;;;1601:4;1896:195;1910:6;1907:1;1904:13;1896:195;;;1975:13;;-1:-1:-1;;;;;1971:39:486;1959:52;;2066:15;;;;2031:12;;;;2007:1;1925:9;1896:195;;;-1:-1:-1;2108:3:486;;1459:658;-1:-1:-1;;;;;;1459:658:486:o;2122:286::-;2211:6;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:40;2372:5;2338:40;:::i;2413:458::-;2533:6;2541;2594:2;2582:9;2573:7;2569:23;2565:32;2562:52;;;2610:1;2607;2600:12;2562:52;2649:9;2636:23;2668:40;2702:5;2668:40;:::i;:::-;2727:5;-1:-1:-1;2784:2:486;2769:18;;2756:32;2797:42;2756:32;2797:42;:::i;:::-;2858:7;2848:17;;;2413:458;;;;;:::o;3527:286::-;3623:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:52;;;3692:1;3689;3682:12;3644:52;3724:9;3718:16;3743:40;3777:5;3743:40;:::i;4944:127::-;5005:10;5000:3;4996:20;4993:1;4986:31;5036:4;5033:1;5026:15;5060:4;5057:1;5050:15;5076:127;5137:10;5132:3;5128:20;5125:1;5118:31;5168:4;5165:1;5158:15;5192:4;5189:1;5182:15;5208:135;5247:3;-1:-1:-1;;5268:17:486;;5265:43;;;5288:18;;:::i;:::-;-1:-1:-1;5335:1:486;5324:13;;5208:135::o;5709:125::-;5749:4;5777:1;5774;5771:8;5768:34;;;5782:18;;:::i;:::-;-1:-1:-1;5819:9:486;;5709:125::o;5839:127::-;5900:10;5895:3;5891:20;5888:1;5881:31;5931:4;5928:1;5921:15;5955:4;5952:1;5945:15;5971:175;6008:3;6052:4;6045:5;6041:16;6081:4;6072:7;6069:17;6066:43;;;6089:18;;:::i;:::-;6138:1;6125:15;;5971:175;-1:-1:-1;;5971:175:486:o;6503:127::-;6564:10;6559:3;6555:20;6552:1;6545:31;6595:4;6592:1;6585:15;6619:4;6616:1;6609:15;6635:177;6713:13;;-1:-1:-1;;;;;;6755:32:486;;6745:43;;6735:71;;6802:1;6799;6792:12;6735:71;6635:177;;;:::o;6817:1127::-;6911:6;6942:2;6985;6973:9;6964:7;6960:23;6956:32;6953:52;;;7001:1;6998;6991:12;6953:52;7034:9;7028:16;7063:18;7104:2;7096:6;7093:14;7090:34;;;7120:1;7117;7110:12;7090:34;7158:6;7147:9;7143:22;7133:32;;7203:7;7196:4;7192:2;7188:13;7184:27;7174:55;;7225:1;7222;7215:12;7174:55;7254:2;7248:9;7276:2;7272;7269:10;7266:36;;;7282:18;;:::i;:::-;7328:2;7325:1;7321:10;7360:2;7354:9;7423:2;7419:7;7414:2;7410;7406:11;7402:25;7394:6;7390:38;7478:6;7466:10;7463:22;7458:2;7446:10;7443:18;7440:46;7437:72;;;7489:18;;:::i;:::-;7525:2;7518:22;7575:18;;;7609:15;;;;-1:-1:-1;7651:11:486;;;7647:20;;;7679:19;;;7676:39;;;7711:1;7708;7701:12;7676:39;7735:11;;;;7755:158;7771:6;7766:3;7763:15;7755:158;;;7837:33;7866:3;7837:33;:::i;:::-;7825:46;;7788:12;;;;7891;;;;7755:158;;;7932:6;6817:1127;-1:-1:-1;;;;;;;;6817:1127:486:o;7949:127::-;8010:10;8005:3;8001:20;7998:1;7991:31;8041:4;8038:1;8031:15;8065:4;8062:1;8055:15;8081:197;8119:3;8147:6;8188:2;8181:5;8177:14;8215:2;8206:7;8203:15;8200:41;;;8221:18;;:::i;:::-;8270:1;8257:15;;8081:197;-1:-1:-1;;;8081:197:486:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_listExtensions()": "6333d001", + "_registerExtension(address,address)": "89cd9855", + "_setLiquidatorsRegistry(address)": "8715b16b", + "_setPairWhitelisted(address,address,bool)": "035d2a38", + "acceptOwnership()": "79ba5097", + "blocksPerYear()": "a385fb96", + "feeDistributor()": "0d43e8ad", + "liquidatorsRegistry()": "16bb997f", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LeveredPositionFactoryFirstExtension.json b/packages/sdk/deployments/mode/LeveredPositionFactoryFirstExtension.json new file mode 100644 index 0000000000..b22fe1c432 --- /dev/null +++ b/packages/sdk/deployments/mode/LeveredPositionFactoryFirstExtension.json @@ -0,0 +1,1246 @@ +{ + "address": "0x4e20eB2AF6bE30660323cB25204e071116737FEA", + "abi": [ + { + "inputs": [], + "name": "NoSuchPosition", + "type": "error" + }, + { + "inputs": [], + "name": "PairNotWhitelisted", + "type": "error" + }, + { + "inputs": [], + "name": "PositionNotClosed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "position", + "type": "address" + } + ], + "name": "closeAndRemoveUserPosition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "feeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAccountsWithOpenPositions", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + } + ], + "name": "getBorrowableMarketsByCollateral", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinBorrowNative", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getPositionsByAccount", + "outputs": [ + { + "internalType": "address[]", + "name": "positions", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "closed", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "msgSig", + "type": "bytes4" + } + ], + "name": "getPositionsExtension", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "name": "getRedemptionStrategies", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategiesData", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getWhitelistedCollateralMarkets", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "liquidatorsRegistry", + "outputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "closedPosition", + "type": "address" + } + ], + "name": "removeClosedPosition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xe06ead75633fff3a5da81e9a3f7969d929570eeb74cda1865b61976887f8adb9", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x4e20eB2AF6bE30660323cB25204e071116737FEA", + "transactionIndex": 1, + "gasUsed": "1123041", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000400000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000001000000000000000000", + "blockHash": "0x6e074affb7089b4eea6b4a68d68d9e9b00446f4e1f82c5d5bfe37deb521d38b8", + "transactionHash": "0xe06ead75633fff3a5da81e9a3f7969d929570eeb74cda1865b61976887f8adb9", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097652, + "transactionHash": "0xe06ead75633fff3a5da81e9a3f7969d929570eeb74cda1865b61976887f8adb9", + "address": "0x4e20eB2AF6bE30660323cB25204e071116737FEA", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x6e074affb7089b4eea6b4a68d68d9e9b00446f4e1f82c5d5bfe37deb521d38b8" + } + ], + "blockNumber": 2097652, + "cumulativeGasUsed": "1173530", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "type": "error", + "name": "NoSuchPosition" + }, + { + "inputs": [], + "type": "error", + "name": "PairNotWhitelisted" + }, + { + "inputs": [], + "type": "error", + "name": "PositionNotClosed" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "position", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "closeAndRemoveUserPosition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAccountsWithOpenPositions", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowableMarketsByCollateral", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getMinBorrowNative", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPositionsByAccount", + "outputs": [ + { + "internalType": "address[]", + "name": "positions", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "closed", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "msgSig", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPositionsExtension", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRedemptionStrategies", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategiesData", + "type": "bytes[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getWhitelistedCollateralMarkets", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidatorsRegistry", + "outputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "closedPosition", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeClosedPosition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/levered/LeveredPositionFactoryFirstExtension.sol": "LeveredPositionFactoryFirstExtension" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/compound/ICToken.sol": { + "keccak256": "0xd90b56c414ed688746f99b939cd2550cd1a646996ed7ee020f95877068324c48", + "urls": [ + "bzz-raw://73318f893d20ec8720226ed2bd0f3937d0a78050b77e368065edae1ba648a2e3", + "dweb:/ipfs/QmRVMeofs12tydFoWyyfGVX2s8uzD5JkGd3CXmRLRAGcbp" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IComptroller.sol": { + "keccak256": "0xc0b7f7119d3cd69ed2ca37d8a79e9a81a0da60503d5349ab2b60d0038570889d", + "urls": [ + "bzz-raw://25ff53ec74d592e46ddb8a4edeb7c372bb151d1c05618337bf5e8f9a4cb5c2b9", + "dweb:/ipfs/QmT9ikZXBVEnvoRcRANvoTdQj5o5aQjZ1Q98b9AD4x48dV" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IPriceOracle.sol": { + "keccak256": "0x501ba6588dc3bbcbcd7629eb294b2249dce97cb78e1c78feb1815d220b488368", + "urls": [ + "bzz-raw://19fa30ac47cf668858b1d9e8842e1a2d9a6c8bbae85bc12ce8a0f1bbe0868559", + "dweb:/ipfs/QmYuypErSBwLnNWjUBZiBvp5xJ95DxbBDCvCSnE3NZjaev" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IRewardsDistributor.sol": { + "keccak256": "0x175299449a462109cf22ec786c1bcc820f16eba8052dcfa621e65666e657e3f3", + "urls": [ + "bzz-raw://4986563cd770103066f69b5e86331a4bbbefc4337f94a260a46545da4416d858", + "dweb:/ipfs/Qmd64tG56C3DS5gGHebbTEZi1TM6SXG1Ahot7paYjH8gKF" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IUnitroller.sol": { + "keccak256": "0x629111448df95d5f4c6cae88cd8fceb67537af80e82f643e697d2dd4c22e1c49", + "urls": [ + "bzz-raw://6cf120d715430134deccb0add41e71c92618843aba8bac15135e96fb912b0424", + "dweb:/ipfs/QmaSRgMRrG8n5Ck4pZNaHj6LArRDGCnQ9wQhpL7WZ9MT6e" + ], + "license": "BSD-3-Clause" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/IFlashLoanReceiver.sol": { + "keccak256": "0x3db1dbf3e47975f60cccc859740aa84665d9fd683079c7329285008502c454da", + "urls": [ + "bzz-raw://89727af88e6d376eced9a6ea97c3da80d6c801198f133d9d6b887894f7b8ab00", + "dweb:/ipfs/QmVS7Thpbkt3RGi4UsKev94BJdLstHiGHrGk1mPXadSqS2" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/ILeveredPositionFactory.sol": { + "keccak256": "0x422831aefc6bc1edc9864205bf710620d25b9e4d8138bcf5c13020fe3738f103", + "urls": [ + "bzz-raw://d05924628c79254bdeb073a2791e1b82c5cae603015dbeb138f87267fd886c3b", + "dweb:/ipfs/QmbP4oeh1TksPdLMPEM1SzSZaeCF7bCX99ycNuo4ezPPGZ" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/LeveredPosition.sol": { + "keccak256": "0xbdbd1edc4c699e4064067948a093a87cba474b5db011cd7000bbe481d50096a6", + "urls": [ + "bzz-raw://9f8bb1d3c07074f6903786cbf3669fc5a7ce38579cd707d5256deea41c82f91e", + "dweb:/ipfs/QmYo6VqduPYqjuuH3sYKWxscUAjeNa8LSLshrMDTGX9W1F" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactoryFirstExtension.sol": { + "keccak256": "0xe726bb36c895e102c6b3b2eda228c4bd95bf7126c02fcbdb35c950fc82aa4324", + "urls": [ + "bzz-raw://568ac3e6f77a5ccae209f42d13d6d1e9245951f98934ac44e455d98cba36949f", + "dweb:/ipfs/QmVaKYPrPRuAwyMvfxaeycSqXzHZzscRbfWxjDqTYfaeiJ" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactoryStorage.sol": { + "keccak256": "0xec2c0858dfa3924ea09559bf081c579ff5b19a56ce36b2e986affad3e4f7cc4f", + "urls": [ + "bzz-raw://6973d7b17ad48d6f17fb9566c629b8db4abcd907d40c8085a01af647e5e1d016", + "dweb:/ipfs/QmVzc1JhAXMQY1Yr1EUc5rWfFTLZmB1aj8HRdnqehvVegh" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionStorage.sol": { + "keccak256": "0xe3342347e2315c9a7a8503ef7ba83390f1cd296318a50952a88d984af940e430", + "urls": [ + "bzz-raw://e6245ac45d4f691c1565e1f7228e475dcfa012ac5394a5b3142e1437efc33ba5", + "dweb:/ipfs/Qme2VMo4kP4DpANSZVrsAYYF8bEq9aySjMveDo1y7iMMC7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheel.sol": { + "keccak256": "0x8d4dc0e54619cbf9d7a503c9664163c55dbfbd43dc4ec6c5156711a5fd6bee34", + "urls": [ + "bzz-raw://90e2282f7bc72e65c084f40eee44e77f5a59a0702b66222595c417d078094cd5", + "dweb:/ipfs/QmY6jo9jnqeQsD8S6vSSWWT7NJdsXpVQZQh6Vaq6ZZo5QA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5061001a3361001f565b610096565b600180546001600160a01b031916905561004381610046602090811b610a0617901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6112d8806100a56000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063d337a1da11610071578063d337a1da1461022e578063e30c397814610241578063ed287f3f14610252578063f2fde38b14610273578063f4e610661461028657600080fd5b80638da5cb5b146101e9578063a339d751146101fa578063a385fb9614610202578063ca2de6bc1461020b57600080fd5b806316bb997f116100e957806316bb997f1461019b578063715018a6146101ae57806379ba5097146101b857806386ef7482146101c057806389f8132e146101d457600080fd5b80630973e9161461011b5780630d43e8ad146101455780630da2262c1461017057806312468b7714610186575b600080fd5b61012e610129366004610d62565b610299565b60405161013c929190610dc3565b60405180910390f35b600954610158906001600160a01b031681565b6040516001600160a01b03909116815260200161013c565b6101786103c8565b60405190815260200161013c565b61018e61043b565b60405161013c9190610e1c565b600a54610158906001600160a01b031681565b6101b6610447565b005b6101b661049c565b6101586101ce366004610e2f565b50600090565b6101dc610516565b60405161013c9190610e59565b6000546001600160a01b0316610158565b61018e6107e0565b610178600b5481565b61021e610219366004610d62565b6107ec565b604051901515815260200161013c565b61021e61023c366004610d62565b6107f8565b6001546001600160a01b0316610158565b610265610260366004610ea7565b6108e8565b60405161013c929190610f10565b6101b6610281366004610d62565b610971565b61018e610294366004610d62565b6109e2565b6001600160a01b038116600090815260046020526040902060609081906102bf90610a56565b9150815167ffffffffffffffff8111156102db576102db610fc9565b604051908082528060200260200182016040528015610304578160200160208202803683370190505b50905060005b82518110156103c25782818151811061032557610325610fdf565b60200260200101516001600160a01b0316633e2f147f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561036a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038e9190610ff5565b8282815181106103a0576103a0610fdf565b91151560209283029190910190910152806103ba8161102d565b91505061030a565b50915091565b6009546040805163fdb25fb160e01b815290516000926001600160a01b03169163fdb25fb19160048083019260209291908290030181865afa158015610412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104369190611048565b905090565b60606104366002610a56565b61044f610a63565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b0316811461050a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610493565b61051381610abf565b50565b60408051600980825261014082019092526060919060009082602082016101208036833701905050905063328b79af60e21b8161055284611061565b93508360ff168151811061056857610568610fdf565b6001600160e01b03199092166020928302919091019091015263699bd0ed60e11b8161059384611061565b93508360ff16815181106105a9576105a9610fdf565b6001600160e01b031990921660209283029190910190910152630368898b60e21b816105d484611061565b93508360ff16815181106105ea576105ea610fdf565b6001600160e01b03199092166020928302919091019091015263ed287f3f60e01b8161061584611061565b93508360ff168151811061062b5761062b610fdf565b6001600160e01b031990921660209283029190910190910152637a73083360e11b8161065684611061565b93508360ff168151811061066c5761066c610fdf565b6001600160e01b03199092166020928302919091019091015263a339d75160e01b8161069784611061565b93508360ff16815181106106ad576106ad610fdf565b6001600160e01b0319909216602092830291909101909101526312468b7760e01b816106d884611061565b93508360ff16815181106106ee576106ee610fdf565b6001600160e01b0319909216602092830291909101909101526304b9f48b60e11b8161071984611061565b93508360ff168151811061072f5761072f610fdf565b6001600160e01b031990921660209283029190910190910152634377ba4160e11b8161075a84611061565b93508360ff168151811061077057610770610fdf565b6001600160e01b03199092166020928302919091019091015260ff8216156107da5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610493565b92915050565b60606104366005610a56565b60006107da8233610ad8565b6000610802610a63565b6000826001600160a01b031663cb2af14b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610866919061107e565b604051632f86e2dd60e01b81526001600160a01b03808316600483015291925090841690632f86e2dd906024016020604051808303816000875af11580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190611048565b506108e18382610ad8565b9392505050565b600a5460405163ed287f3f60e01b81526001600160a01b0384811660048301528381166024830152606092839291169063ed287f3f90604401600060405180830381865afa15801561093e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096691908101906111d9565b915091509250929050565b610979610a63565b600180546001600160a01b0383166001600160a01b031990911681179091556109aa6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b03811660009081526007602052604090206060906107da90610a56565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006108e183610bdf565b6000546001600160a01b03163314610abd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610493565b565b600180546001600160a01b031916905561051381610a06565b6001600160a01b0381166000908152600460205260408120610b1681856001600160a01b031660009081526001919091016020526040902054151590565b610b3357604051632af0900d60e21b815260040160405180910390fd5b836001600160a01b0316633e2f147f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b959190610ff5565b610bb2576040516345916a4760e11b815260040160405180910390fd5b610bbc8185610c3b565b9150610bc781610c50565b610bd857610bd6600284610c3b565b505b5092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c2f57602002820191906000526020600020905b815481526020019060010190808311610c1b575b50505050509050919050565b60006108e1836001600160a01b038416610c5a565b60006107da825490565b60008181526001830160205260408120548015610d43576000610c7e60018361129e565b8554909150600090610c929060019061129e565b9050818114610cf7576000866000018281548110610cb257610cb2610fdf565b9060005260206000200154905080876000018481548110610cd557610cd5610fdf565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610d0857610d086112b5565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107da565b60009150506107da565b6001600160a01b038116811461051357600080fd5b600060208284031215610d7457600080fd5b81356108e181610d4d565b600081518084526020808501945080840160005b83811015610db85781516001600160a01b031687529582019590820190600101610d93565b509495945050505050565b604081526000610dd66040830185610d7f565b82810360208481019190915284518083528582019282019060005b81811015610e0f578451151583529383019391830191600101610df1565b5090979650505050505050565b6020815260006108e16020830184610d7f565b600060208284031215610e4157600080fd5b81356001600160e01b0319811681146108e157600080fd5b6020808252825182820181905260009190848201906040850190845b81811015610e9b5783516001600160e01b03191683529284019291840191600101610e75565b50909695505050505050565b60008060408385031215610eba57600080fd5b8235610ec581610d4d565b91506020830135610ed581610d4d565b809150509250929050565b60005b83811015610efb578181015183820152602001610ee3565b83811115610f0a576000848401525b50505050565b604080825283519082018190526000906020906060840190828701845b82811015610f525781516001600160a01b031684529284019290840190600101610f2d565b50505083810382850152845180825282820190600581901b8301840187850160005b83811015610fba57601f198087850301865282518051808652610f9c818b88018c8501610ee0565b96890196601f01909116939093018701925090860190600101610f74565b50909998505050505050505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561100757600080fd5b815180151581146108e157600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561104157611041611017565b5060010190565b60006020828403121561105a57600080fd5b5051919050565b600060ff82168061107457611074611017565b6000190192915050565b60006020828403121561109057600080fd5b81516108e181610d4d565b604051601f8201601f1916810167ffffffffffffffff811182821017156110c4576110c4610fc9565b604052919050565b600067ffffffffffffffff8211156110e6576110e6610fc9565b5060051b60200190565b6000601f838184011261110257600080fd5b82516020611117611112836110cc565b61109b565b82815260059290921b8501810191818101908784111561113657600080fd5b8287015b848110156111cd57805167ffffffffffffffff8082111561115b5760008081fd5b818a0191508a603f8301126111705760008081fd5b8582015160408282111561118657611186610fc9565b611197828b01601f1916890161109b565b92508183528c818386010111156111ae5760008081fd5b6111bd82898501838701610ee0565b505084525091830191830161113a565b50979650505050505050565b600080604083850312156111ec57600080fd5b825167ffffffffffffffff8082111561120457600080fd5b818501915085601f83011261121857600080fd5b81516020611228611112836110cc565b82815260059290921b8401810191818101908984111561124757600080fd5b948201945b8386101561126e57855161125f81610d4d565b8252948201949082019061124c565b9188015191965090935050508082111561128757600080fd5b50611294858286016110f0565b9150509250929050565b6000828210156112b0576112b0611017565b500390565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080a000a", + "sourceMap": "1041:3986:144:-:0;;;;;;;;;;;;-1:-1:-1;936:32:452;719:10:466;936:18:452;:32::i;:::-;1041:3986:144;;1496:153:453;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1041:3986:144:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063d337a1da11610071578063d337a1da1461022e578063e30c397814610241578063ed287f3f14610252578063f2fde38b14610273578063f4e610661461028657600080fd5b80638da5cb5b146101e9578063a339d751146101fa578063a385fb9614610202578063ca2de6bc1461020b57600080fd5b806316bb997f116100e957806316bb997f1461019b578063715018a6146101ae57806379ba5097146101b857806386ef7482146101c057806389f8132e146101d457600080fd5b80630973e9161461011b5780630d43e8ad146101455780630da2262c1461017057806312468b7714610186575b600080fd5b61012e610129366004610d62565b610299565b60405161013c929190610dc3565b60405180910390f35b600954610158906001600160a01b031681565b6040516001600160a01b03909116815260200161013c565b6101786103c8565b60405190815260200161013c565b61018e61043b565b60405161013c9190610e1c565b600a54610158906001600160a01b031681565b6101b6610447565b005b6101b661049c565b6101586101ce366004610e2f565b50600090565b6101dc610516565b60405161013c9190610e59565b6000546001600160a01b0316610158565b61018e6107e0565b610178600b5481565b61021e610219366004610d62565b6107ec565b604051901515815260200161013c565b61021e61023c366004610d62565b6107f8565b6001546001600160a01b0316610158565b610265610260366004610ea7565b6108e8565b60405161013c929190610f10565b6101b6610281366004610d62565b610971565b61018e610294366004610d62565b6109e2565b6001600160a01b038116600090815260046020526040902060609081906102bf90610a56565b9150815167ffffffffffffffff8111156102db576102db610fc9565b604051908082528060200260200182016040528015610304578160200160208202803683370190505b50905060005b82518110156103c25782818151811061032557610325610fdf565b60200260200101516001600160a01b0316633e2f147f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561036a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038e9190610ff5565b8282815181106103a0576103a0610fdf565b91151560209283029190910190910152806103ba8161102d565b91505061030a565b50915091565b6009546040805163fdb25fb160e01b815290516000926001600160a01b03169163fdb25fb19160048083019260209291908290030181865afa158015610412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104369190611048565b905090565b60606104366002610a56565b61044f610a63565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b0316811461050a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610493565b61051381610abf565b50565b60408051600980825261014082019092526060919060009082602082016101208036833701905050905063328b79af60e21b8161055284611061565b93508360ff168151811061056857610568610fdf565b6001600160e01b03199092166020928302919091019091015263699bd0ed60e11b8161059384611061565b93508360ff16815181106105a9576105a9610fdf565b6001600160e01b031990921660209283029190910190910152630368898b60e21b816105d484611061565b93508360ff16815181106105ea576105ea610fdf565b6001600160e01b03199092166020928302919091019091015263ed287f3f60e01b8161061584611061565b93508360ff168151811061062b5761062b610fdf565b6001600160e01b031990921660209283029190910190910152637a73083360e11b8161065684611061565b93508360ff168151811061066c5761066c610fdf565b6001600160e01b03199092166020928302919091019091015263a339d75160e01b8161069784611061565b93508360ff16815181106106ad576106ad610fdf565b6001600160e01b0319909216602092830291909101909101526312468b7760e01b816106d884611061565b93508360ff16815181106106ee576106ee610fdf565b6001600160e01b0319909216602092830291909101909101526304b9f48b60e11b8161071984611061565b93508360ff168151811061072f5761072f610fdf565b6001600160e01b031990921660209283029190910190910152634377ba4160e11b8161075a84611061565b93508360ff168151811061077057610770610fdf565b6001600160e01b03199092166020928302919091019091015260ff8216156107da5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610493565b92915050565b60606104366005610a56565b60006107da8233610ad8565b6000610802610a63565b6000826001600160a01b031663cb2af14b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610866919061107e565b604051632f86e2dd60e01b81526001600160a01b03808316600483015291925090841690632f86e2dd906024016020604051808303816000875af11580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190611048565b506108e18382610ad8565b9392505050565b600a5460405163ed287f3f60e01b81526001600160a01b0384811660048301528381166024830152606092839291169063ed287f3f90604401600060405180830381865afa15801561093e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096691908101906111d9565b915091509250929050565b610979610a63565b600180546001600160a01b0383166001600160a01b031990911681179091556109aa6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b03811660009081526007602052604090206060906107da90610a56565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006108e183610bdf565b6000546001600160a01b03163314610abd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610493565b565b600180546001600160a01b031916905561051381610a06565b6001600160a01b0381166000908152600460205260408120610b1681856001600160a01b031660009081526001919091016020526040902054151590565b610b3357604051632af0900d60e21b815260040160405180910390fd5b836001600160a01b0316633e2f147f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b959190610ff5565b610bb2576040516345916a4760e11b815260040160405180910390fd5b610bbc8185610c3b565b9150610bc781610c50565b610bd857610bd6600284610c3b565b505b5092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c2f57602002820191906000526020600020905b815481526020019060010190808311610c1b575b50505050509050919050565b60006108e1836001600160a01b038416610c5a565b60006107da825490565b60008181526001830160205260408120548015610d43576000610c7e60018361129e565b8554909150600090610c929060019061129e565b9050818114610cf7576000866000018281548110610cb257610cb2610fdf565b9060005260206000200154905080876000018481548110610cd557610cd5610fdf565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610d0857610d086112b5565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107da565b60009150506107da565b6001600160a01b038116811461051357600080fd5b600060208284031215610d7457600080fd5b81356108e181610d4d565b600081518084526020808501945080840160005b83811015610db85781516001600160a01b031687529582019590820190600101610d93565b509495945050505050565b604081526000610dd66040830185610d7f565b82810360208481019190915284518083528582019282019060005b81811015610e0f578451151583529383019391830191600101610df1565b5090979650505050505050565b6020815260006108e16020830184610d7f565b600060208284031215610e4157600080fd5b81356001600160e01b0319811681146108e157600080fd5b6020808252825182820181905260009190848201906040850190845b81811015610e9b5783516001600160e01b03191683529284019291840191600101610e75565b50909695505050505050565b60008060408385031215610eba57600080fd5b8235610ec581610d4d565b91506020830135610ed581610d4d565b809150509250929050565b60005b83811015610efb578181015183820152602001610ee3565b83811115610f0a576000848401525b50505050565b604080825283519082018190526000906020906060840190828701845b82811015610f525781516001600160a01b031684529284019290840190600101610f2d565b50505083810382850152845180825282820190600581901b8301840187850160005b83811015610fba57601f198087850301865282518051808652610f9c818b88018c8501610ee0565b96890196601f01909116939093018701925090860190600101610f74565b50909998505050505050505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561100757600080fd5b815180151581146108e157600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561104157611041611017565b5060010190565b60006020828403121561105a57600080fd5b5051919050565b600060ff82168061107457611074611017565b6000190192915050565b60006020828403121561109057600080fd5b81516108e181610d4d565b604051601f8201601f1916810167ffffffffffffffff811182821017156110c4576110c4610fc9565b604052919050565b600067ffffffffffffffff8211156110e6576110e6610fc9565b5060051b60200190565b6000601f838184011261110257600080fd5b82516020611117611112836110cc565b61109b565b82815260059290921b8501810191818101908784111561113657600080fd5b8287015b848110156111cd57805167ffffffffffffffff8082111561115b5760008081fd5b818a0191508a603f8301126111705760008081fd5b8582015160408282111561118657611186610fc9565b611197828b01601f1916890161109b565b92508183528c818386010111156111ae5760008081fd5b6111bd82898501838701610ee0565b505084525091830191830161113a565b50979650505050505050565b600080604083850312156111ec57600080fd5b825167ffffffffffffffff8082111561120457600080fd5b818501915085601f83011261121857600080fd5b81516020611228611112836110cc565b82815260059290921b8401810191818101908984111561124757600080fd5b948201945b8386101561126e57855161125f81610d4d565b8252948201949082019061124c565b9188015191965090935050508082111561128757600080fd5b50611294858286016110f0565b9150509250929050565b6000828210156112b0576112b0611017565b500390565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080a000a", + "sourceMap": "1041:3986:144:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4081:364;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1127:37:146;;;;;-1:-1:-1;;;;;1127:37:146;;;;;;-1:-1:-1;;;;;1884:32:486;;;1866:51;;1854:2;1839:18;1127:37:146;1687:236:486;3675:109:144;;;:::i;:::-;;;2074:25:486;;;2062:2;2047:18;3675:109:144;1928:177:486;4449:133:144;;;:::i;:::-;;;;;;;:::i;1168:47:146:-;;;;;-1:-1:-1;;;;;1168:47:146;;;174:106:133;;;:::i;:::-;;1729:206:453;;;:::i;4907:118:144:-;;;;;;:::i;:::-;-1:-1:-1;4976:7:144;;4907:118;1378:954;;;:::i;:::-;;;;;;;:::i;1201:85:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;1201:85;;4586:128:144;;;:::i;1219:28:146:-;;;;;;2565:145:144;;;;;;:::i;:::-;;:::i;:::-;;;3940:14:486;;3933:22;3915:41;;3903:2;3888:18;2565:145:144;3775:187:486;2714:266:144;;;;;;:::i;:::-;;:::i;842:99:453:-;921:13;;-1:-1:-1;;;;;921:13:453;842:99;;3788:289:144;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1134:178:453:-;;;;;;:::i;:::-;;:::i;4718:185:144:-;;;;;;:::i;:::-;;:::i;4081:364::-;-1:-1:-1;;;;;4234:27:144;;;;;;:18;:27;;;;;4164:26;;;;4234:36;;:34;:36::i;:::-;4222:48;;4296:9;:16;4285:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4285:28:144;;4276:37;;4324:9;4319:122;4343:9;:16;4339:1;:20;4319:122;;;4402:9;4412:1;4402:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4386:46:144;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4374:6;4381:1;4374:9;;;;;;;;:::i;:::-;:60;;;:9;;;;;;;;;;;:60;4361:3;;;;:::i;:::-;;;;4319:122;;;;4081:364;;;:::o;3675:109::-;3750:14;;:29;;;-1:-1:-1;;;3750:29:144;;;;3728:7;;-1:-1:-1;;;;;3750:14:144;;:27;;:29;;;;;;;;;;;;;;:14;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3743:36;;3675:109;:::o;4449:133::-;4512:16;4543:34;:25;:32;:34::i;174:106:133:-;1094:13:452;:11;:13::i;:::-;235:40:133::1;::::0;-1:-1:-1;;;235:40:133;;8021:2:486;235:40:133::1;::::0;::::1;8003:21:486::0;8060:2;8040:18;;;8033:30;8099:32;8079:18;;;8072:60;8149:18;;235:40:133::1;;;;;;;;1729:206:453::0;921:13;;719:10:466;;-1:-1:-1;;;;;921:13:453;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:453;;8380:2:486;1814:78:453;;;8362:21:486;8419:2;8399:18;;;8392:30;8458:34;8438:18;;;8431:62;-1:-1:-1;;;8509:18:486;;;8502:39;8558:19;;1814:78:453;8178:405:486;1814:78:453;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;1378:954:144:-;1527:22;;;1484:1;1527:22;;;;;;;;;1444:15;;1484:1;1467:14;;1484:1;1527:22;;;;;;;;;;-1:-1:-1;;1491:58:144;-1:-1:-1;;;;1491:58:144;1573:10;;;:::i;:::-;;;;1555:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1555:66:144;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;1627:17:144;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:72:144;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;1705:17:144;1723:10;;;:::i;:::-;;;;1705:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1705:64:144;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;1775:17:144;1793:10;;;:::i;:::-;;;;1775:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1775:69:144;;;:29;;;;;;;;;;;:69;-1:-1:-1;;;1850:17:144;1868:10;;;:::i;:::-;;;;1850:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1850:78:144;;;:29;;;;;;;;;;;:78;-1:-1:-1;;;1934:17:144;1952:10;;;:::i;:::-;;;;1934:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1934:77:144;;;:29;;;;;;;;;;;:77;-1:-1:-1;;;2017:17:144;2035:10;;;:::i;:::-;;;;2017:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2017:74:144;;;:29;;;;;;;;;;;:74;-1:-1:-1;;;2097:17:144;2115:10;;;:::i;:::-;;;;2097:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2097:67:144;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;2170:17:144;2188:10;;;:::i;:::-;;;;2170:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2170:67:144;;;:29;;;;;;;;;;;:67;2251:13;;;;2243:54;;;;-1:-1:-1;;;2243:54:144;;8973:2:486;2243:54:144;;;8955:21:486;9012:2;8992:18;;;8985:30;9051;9031:18;;;9024:58;9099:18;;2243:54:144;8771:352:486;2243:54:144;2310:17;1378:954;-1:-1:-1;;1378:954:144:o;4586:128::-;4652:16;4683:26;:17;:24;:26::i;2565:145::-;2637:4;2656:49;2678:14;2694:10;2656:21;:49::i;2714:266::-;2804:4;1094:13:452;:11;:13::i;:::-;2816:21:144::1;2840:8;-1:-1:-1::0;;;;;2840:22:144::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2870:37;::::0;-1:-1:-1;;;2870:37:144;;-1:-1:-1;;;;;1884:32:486;;;2870:37:144::1;::::0;::::1;1866:51:486::0;2816:48:144;;-1:-1:-1;2870:22:144;;::::1;::::0;::::1;::::0;1839:18:486;;2870:37:144::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2920:55;2950:8;2961:13;2920:21;:55::i;:::-;2913:62:::0;2714:266;-1:-1:-1;;;2714:266:144:o;3788:289::-;4004:19;;:68;;-1:-1:-1;;;4004:68:144;;-1:-1:-1;;;;;9670:15:486;;;4004:68:144;;;9652:34:486;9722:15;;;9702:18;;;9695:43;3917:39:144;;;;4004:19;;;:43;;9587:18:486;;4004:68:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4004:68:144;;;;;;;;;;;;:::i;:::-;3997:75;;;;3788:289;;;;;:::o;1134:178:453:-;1094:13:452;:11;:13::i;:::-;1223::453::1;:24:::0;;-1:-1:-1;;;;;1223:24:453;::::1;-1:-1:-1::0;;;;;;1223:24:453;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::452::0;1273:6;-1:-1:-1;;;;;1273:6:452;;1201:85;1287:7:453::1;-1:-1:-1::0;;;;;1262:43:453::1;;;;;;;;;;;1134:178:::0;:::o;4718:185:144:-;-1:-1:-1;;;;;4841:48:144;;;;;;:29;:48;;;;;4810:16;;4841:57;;:55;:57::i;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;10251:300:469:-;10314:16;10342:22;10367:19;10375:3;10367:7;:19::i;1359:130:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;719:10:466;1422:23:452;1414:68;;;;-1:-1:-1;;;1414:68:452;;13226:2:486;1414:68:452;;;13208:21:486;;;13245:18;;;13238:30;13304:34;13284:18;;;13277:62;13356:18;;1414:68:452;13024:356:486;1414:68:452;1359:130::o;1496:153:453:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;:34::i;2984:505:144:-;-1:-1:-1;;;;;3149:33:144;;3080:12;3149:33;;;:18;:33;;;;;3193:38;3149:33;3216:14;-1:-1:-1;;;;;8985:23:469;8932:4;4343:19;;;:12;;;;;:19;;;;;;:24;;;8852:165;3193:38:144;3188:68;;3240:16;;-1:-1:-1;;;3240:16:144;;;;;;;;;;;3188:68;3283:14;-1:-1:-1;;;;;3267:48:144;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3262:83;;3326:19;;-1:-1:-1;;;3326:19:144;;;;;;;;;;;3262:83;3362:36;:13;3383:14;3362:20;:36::i;:::-;3352:46;;3408:22;:13;:20;:22::i;:::-;3404:80;;3437:47;:25;3470:13;3437:32;:47::i;:::-;;3404:80;3094:395;2984:505;;;;:::o;5562:109:469:-;5618:16;5653:3;:11;;5646:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:109;;;:::o;8615:156::-;8688:4;8711:53;8719:3;-1:-1:-1;;;;;8739:23:469;;8711:7;:53::i;9098:115::-;9161:7;9187:19;9195:3;4537:18;;4455:107;2778:1388;2844:4;2981:19;;;:12;;;:19;;;;;;3015:15;;3011:1149;;3384:21;3408:14;3421:1;3408:10;:14;:::i;:::-;3456:18;;3384:38;;-1:-1:-1;3436:17:469;;3456:22;;3477:1;;3456:22;:::i;:::-;3436:42;;3510:13;3497:9;:26;3493:398;;3543:17;3563:3;:11;;3575:9;3563:22;;;;;;;;:::i;:::-;;;;;;;;;3543:42;;3714:9;3685:3;:11;;3697:13;3685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3797:23;;;:12;;;:23;;;;;:36;;;3493:398;3969:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4061:3;:12;;:19;4074:5;4061:19;;;;;;;;;;;4054:26;;;4102:4;4095:11;;;;;;;3011:1149;4144:5;4137:12;;;;;14:131:486;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:461::-;455:3;493:5;487:12;520:6;515:3;508:19;546:4;575:2;570:3;566:12;559:19;;612:2;605:5;601:14;633:1;643:195;657:6;654:1;651:13;643:195;;;722:13;;-1:-1:-1;;;;;718:39:486;706:52;;778:12;;;;813:15;;;;754:1;672:9;643:195;;;-1:-1:-1;854:3:486;;402:461;-1:-1:-1;;;;;402:461:486:o;868:814::-;1119:2;1108:9;1101:21;1082:4;1145:56;1197:2;1186:9;1182:18;1174:6;1145:56;:::i;:::-;1258:22;;;1220:2;1238:18;;;1231:50;;;;1330:13;;1352:22;;;1428:15;;;;1390;;;1461:1;1471:185;1485:6;1482:1;1479:13;1471:185;;;1560:13;;1553:21;1546:29;1534:42;;1631:15;;;;1596:12;;;;1507:1;1500:9;1471:185;;;-1:-1:-1;1673:3:486;;868:814;-1:-1:-1;;;;;;;868:814:486:o;2110:261::-;2289:2;2278:9;2271:21;2252:4;2309:56;2361:2;2350:9;2346:18;2338:6;2309:56;:::i;2614:286::-;2672:6;2725:2;2713:9;2704:7;2700:23;2696:32;2693:52;;;2741:1;2738;2731:12;2693:52;2767:23;;-1:-1:-1;;;;;;2819:32:486;;2809:43;;2799:71;;2866:1;2863;2856:12;3113:657;3282:2;3334:21;;;3404:13;;3307:18;;;3426:22;;;3253:4;;3282:2;3505:15;;;;3479:2;3464:18;;;3253:4;3548:196;3562:6;3559:1;3556:13;3548:196;;;3627:13;;-1:-1:-1;;;;;;3623:40:486;3611:53;;3719:15;;;;3684:12;;;;3584:1;3577:9;3548:196;;;-1:-1:-1;3761:3:486;;3113:657;-1:-1:-1;;;;;;3113:657:486:o;4244:444::-;4368:6;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:486;4595:18;;4582:32;4623:33;4582:32;4623:33;:::i;:::-;4675:7;4665:17;;;4244:444;;;;;:::o;4693:258::-;4765:1;4775:113;4789:6;4786:1;4783:13;4775:113;;;4865:11;;;4859:18;4846:11;;;4839:39;4811:2;4804:10;4775:113;;;4906:6;4903:1;4900:13;4897:48;;;4941:1;4932:6;4927:3;4923:16;4916:27;4897:48;;4693:258;;;:::o;4956:1582::-;5271:2;5283:21;;;5353:13;;5256:18;;;5375:22;;;5223:4;;5450;;5428:2;5413:18;;;5477:15;;;5223:4;5520:195;5534:6;5531:1;5528:13;5520:195;;;5599:13;;-1:-1:-1;;;;;5595:39:486;5583:52;;5655:12;;;;5690:15;;;;5631:1;5549:9;5520:195;;;-1:-1:-1;;;5751:19:486;;;5731:18;;;5724:47;5821:13;;5843:21;;;5882:12;;;;5934:1;5930:16;;;5921:26;;5917:35;;5977:15;;;6012:1;6022:487;6038:8;6033:3;6030:17;6022:487;;;6107:2;6103:7;6159:2;6153:3;6145:6;6141:16;6137:25;6130:5;6123:40;6192:8;6186:15;6236:2;6230:9;6267:8;6259:6;6252:24;6289:61;6341:8;6336:2;6328:6;6324:15;6319:2;6315;6311:11;6289:61;:::i;:::-;6485:14;;;;6407:2;6393:17;6389:26;;;6377:39;;;;6373:48;;;-1:-1:-1;6446:17:486;;;;6066:1;6057:11;6022:487;;;-1:-1:-1;6526:6:486;;4956:1582;-1:-1:-1;;;;;;;;;4956:1582:486:o;6812:127::-;6873:10;6868:3;6864:20;6861:1;6854:31;6904:4;6901:1;6894:15;6928:4;6925:1;6918:15;6944:127;7005:10;7000:3;6996:20;6993:1;6986:31;7036:4;7033:1;7026:15;7060:4;7057:1;7050:15;7076:277;7143:6;7196:2;7184:9;7175:7;7171:23;7167:32;7164:52;;;7212:1;7209;7202:12;7164:52;7244:9;7238:16;7297:5;7290:13;7283:21;7276:5;7273:32;7263:60;;7319:1;7316;7309:12;7358:127;7419:10;7414:3;7410:20;7407:1;7400:31;7450:4;7447:1;7440:15;7474:4;7471:1;7464:15;7490:135;7529:3;-1:-1:-1;;7550:17:486;;7547:43;;;7570:18;;:::i;:::-;-1:-1:-1;7617:1:486;7606:13;;7490:135::o;7630:184::-;7700:6;7753:2;7741:9;7732:7;7728:23;7724:32;7721:52;;;7769:1;7766;7759:12;7721:52;-1:-1:-1;7792:16:486;;7630:184;-1:-1:-1;7630:184:486:o;8588:178::-;8625:3;8669:4;8662:5;8658:16;8693:7;8683:41;;8704:18;;:::i;:::-;-1:-1:-1;;8740:20:486;;8588:178;-1:-1:-1;;8588:178:486:o;9128:251::-;9198:6;9251:2;9239:9;9230:7;9226:23;9222:32;9219:52;;;9267:1;9264;9257:12;9219:52;9299:9;9293:16;9318:31;9343:5;9318:31;:::i;9749:275::-;9820:2;9814:9;9885:2;9866:13;;-1:-1:-1;;9862:27:486;9850:40;;9920:18;9905:34;;9941:22;;;9902:62;9899:88;;;9967:18;;:::i;:::-;10003:2;9996:22;9749:275;;-1:-1:-1;9749:275:486:o;10029:204::-;10110:4;10143:18;10135:6;10132:30;10129:56;;;10165:18;;:::i;:::-;-1:-1:-1;10210:1:486;10206:14;10222:4;10202:25;;10029:204::o;10238:1510::-;10301:5;10331:4;10375:3;10370:2;10362:6;10358:15;10354:25;10344:53;;10393:1;10390;10383:12;10344:53;10422:6;10416:13;10448:4;10472:81;10488:64;10549:2;10488:64;:::i;:::-;10472:81;:::i;:::-;10587:15;;;10673:1;10669:10;;;;10657:23;;10653:32;;;10618:12;;;;10697:15;;;10694:35;;;10725:1;10722;10715:12;10694:35;10761:2;10753:6;10749:15;10773:946;10789:6;10784:3;10781:15;10773:946;;;10868:3;10862:10;10895:18;10945:2;10932:11;10929:19;10926:109;;;10989:1;11018:2;11014;11007:14;10926:109;11070:11;11062:6;11058:24;11048:34;;11122:3;11117:2;11113;11109:11;11105:21;11095:119;;11168:1;11197:2;11193;11186:14;11095:119;11251:2;11247;11243:11;11237:18;11278:2;11303;11299;11296:10;11293:36;;;11309:18;;:::i;:::-;11357:51;11381:11;;;-1:-1:-1;;11377:25:486;11373:34;;11357:51;:::i;:::-;11342:66;;11437:2;11428:7;11421:19;11481:3;11476:2;11471;11467;11463:11;11459:20;11456:29;11453:122;;;11527:1;11557:3;11552;11545:16;11453:122;11588:56;11641:2;11636;11627:7;11623:16;11618:2;11614;11610:11;11588:56;:::i;:::-;-1:-1:-1;;11657:20:486;;-1:-1:-1;11697:12:486;;;;10806;;10773:946;;;-1:-1:-1;11737:5:486;10238:1510;-1:-1:-1;;;;;;;10238:1510:486:o;11753:1266::-;11920:6;11928;11981:2;11969:9;11960:7;11956:23;11952:32;11949:52;;;11997:1;11994;11987:12;11949:52;12030:9;12024:16;12059:18;12100:2;12092:6;12089:14;12086:34;;;12116:1;12113;12106:12;12086:34;12154:6;12143:9;12139:22;12129:32;;12199:7;12192:4;12188:2;12184:13;12180:27;12170:55;;12221:1;12218;12211:12;12170:55;12250:2;12244:9;12272:4;12296:81;12312:64;12373:2;12312:64;:::i;12296:81::-;12411:15;;;12493:1;12489:10;;;;12481:19;;12477:28;;;12442:12;;;;12517:19;;;12514:39;;;12549:1;12546;12539:12;12514:39;12573:11;;;;12593:210;12609:6;12604:3;12601:15;12593:210;;;12682:3;12676:10;12699:31;12724:5;12699:31;:::i;:::-;12743:18;;12626:12;;;;12781;;;;12593:210;;;12858:18;;;12852:25;12822:5;;-1:-1:-1;12852:25:486;;-1:-1:-1;;;12889:16:486;;;12886:36;;;12918:1;12915;12908:12;12886:36;;12941:72;13005:7;12994:8;12983:9;12979:24;12941:72;:::i;:::-;12931:82;;;11753:1266;;;;;:::o;13385:125::-;13425:4;13453:1;13450;13447:8;13444:34;;;13458:18;;:::i;:::-;-1:-1:-1;13495:9:486;;13385:125::o;13515:127::-;13576:10;13571:3;13567:20;13564:1;13557:31;13607:4;13604:1;13597:15;13631:4;13628:1;13621:15", + "linkReferences": {} + }, + "methodIdentifiers": { + "_getExtensionFunctions()": "89f8132e", + "acceptOwnership()": "79ba5097", + "blocksPerYear()": "a385fb96", + "closeAndRemoveUserPosition(address)": "d337a1da", + "feeDistributor()": "0d43e8ad", + "getAccountsWithOpenPositions()": "12468b77", + "getBorrowableMarketsByCollateral(address)": "f4e61066", + "getMinBorrowNative()": "0da2262c", + "getPositionsByAccount(address)": "0973e916", + "getPositionsExtension(bytes4)": "86ef7482", + "getRedemptionStrategies(address,address)": "ed287f3f", + "getWhitelistedCollateralMarkets()": "a339d751", + "liquidatorsRegistry()": "16bb997f", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "removeClosedPosition(address)": "ca2de6bc", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LeveredPositionFactorySecondExtension.json b/packages/sdk/deployments/mode/LeveredPositionFactorySecondExtension.json new file mode 100644 index 0000000000..e29f612fd6 --- /dev/null +++ b/packages/sdk/deployments/mode/LeveredPositionFactorySecondExtension.json @@ -0,0 +1,1078 @@ +{ + "address": "0x2Afb71C0fe11A2315eba9A501a48700B83C19E33", + "abi": [ + { + "inputs": [], + "name": "PairNotWhitelisted", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "_fundingAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_fundingAmount", + "type": "uint256" + } + ], + "name": "createAndFundPosition", + "outputs": [ + { + "internalType": "contract LeveredPosition", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "_fundingAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_fundingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_leverageRatio", + "type": "uint256" + } + ], + "name": "createAndFundPositionAtRatio", + "outputs": [ + { + "internalType": "contract LeveredPosition", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + } + ], + "name": "createPosition", + "outputs": [ + { + "internalType": "contract LeveredPosition", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "feeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "liquidatorsRegistry", + "outputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xe7dfc8c070b2c3f74ec53884cb62a895626dfc467cef22c3e36d3ae45dc4d266", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x2Afb71C0fe11A2315eba9A501a48700B83C19E33", + "transactionIndex": 1, + "gasUsed": "4860842", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000200000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000080000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xbf979eede6eb63c27bdbf39944816ae79bfd3933b7cd6ba33a74823a6567c1f4", + "transactionHash": "0xe7dfc8c070b2c3f74ec53884cb62a895626dfc467cef22c3e36d3ae45dc4d266", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097656, + "transactionHash": "0xe7dfc8c070b2c3f74ec53884cb62a895626dfc467cef22c3e36d3ae45dc4d266", + "address": "0x2Afb71C0fe11A2315eba9A501a48700B83C19E33", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xbf979eede6eb63c27bdbf39944816ae79bfd3933b7cd6ba33a74823a6567c1f4" + } + ], + "blockNumber": 2097656, + "cumulativeGasUsed": "4907743", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "type": "error", + "name": "PairNotWhitelisted" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "_fundingAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_fundingAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "createAndFundPosition", + "outputs": [ + { + "internalType": "contract LeveredPosition", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "_fundingAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_fundingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_leverageRatio", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "createAndFundPositionAtRatio", + "outputs": [ + { + "internalType": "contract LeveredPosition", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "createPosition", + "outputs": [ + { + "internalType": "contract LeveredPosition", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidatorsRegistry", + "outputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/levered/LeveredPositionFactorySecondExtension.sol": "LeveredPositionFactorySecondExtension" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/compound/ICToken.sol": { + "keccak256": "0xd90b56c414ed688746f99b939cd2550cd1a646996ed7ee020f95877068324c48", + "urls": [ + "bzz-raw://73318f893d20ec8720226ed2bd0f3937d0a78050b77e368065edae1ba648a2e3", + "dweb:/ipfs/QmRVMeofs12tydFoWyyfGVX2s8uzD5JkGd3CXmRLRAGcbp" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IComptroller.sol": { + "keccak256": "0xc0b7f7119d3cd69ed2ca37d8a79e9a81a0da60503d5349ab2b60d0038570889d", + "urls": [ + "bzz-raw://25ff53ec74d592e46ddb8a4edeb7c372bb151d1c05618337bf5e8f9a4cb5c2b9", + "dweb:/ipfs/QmT9ikZXBVEnvoRcRANvoTdQj5o5aQjZ1Q98b9AD4x48dV" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IPriceOracle.sol": { + "keccak256": "0x501ba6588dc3bbcbcd7629eb294b2249dce97cb78e1c78feb1815d220b488368", + "urls": [ + "bzz-raw://19fa30ac47cf668858b1d9e8842e1a2d9a6c8bbae85bc12ce8a0f1bbe0868559", + "dweb:/ipfs/QmYuypErSBwLnNWjUBZiBvp5xJ95DxbBDCvCSnE3NZjaev" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IRewardsDistributor.sol": { + "keccak256": "0x175299449a462109cf22ec786c1bcc820f16eba8052dcfa621e65666e657e3f3", + "urls": [ + "bzz-raw://4986563cd770103066f69b5e86331a4bbbefc4337f94a260a46545da4416d858", + "dweb:/ipfs/Qmd64tG56C3DS5gGHebbTEZi1TM6SXG1Ahot7paYjH8gKF" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IUnitroller.sol": { + "keccak256": "0x629111448df95d5f4c6cae88cd8fceb67537af80e82f643e697d2dd4c22e1c49", + "urls": [ + "bzz-raw://6cf120d715430134deccb0add41e71c92618843aba8bac15135e96fb912b0424", + "dweb:/ipfs/QmaSRgMRrG8n5Ck4pZNaHj6LArRDGCnQ9wQhpL7WZ9MT6e" + ], + "license": "BSD-3-Clause" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/IFlashLoanReceiver.sol": { + "keccak256": "0x3db1dbf3e47975f60cccc859740aa84665d9fd683079c7329285008502c454da", + "urls": [ + "bzz-raw://89727af88e6d376eced9a6ea97c3da80d6c801198f133d9d6b887894f7b8ab00", + "dweb:/ipfs/QmVS7Thpbkt3RGi4UsKev94BJdLstHiGHrGk1mPXadSqS2" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/ILeveredPositionFactory.sol": { + "keccak256": "0x422831aefc6bc1edc9864205bf710620d25b9e4d8138bcf5c13020fe3738f103", + "urls": [ + "bzz-raw://d05924628c79254bdeb073a2791e1b82c5cae603015dbeb138f87267fd886c3b", + "dweb:/ipfs/QmbP4oeh1TksPdLMPEM1SzSZaeCF7bCX99ycNuo4ezPPGZ" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/LeveredPosition.sol": { + "keccak256": "0xbdbd1edc4c699e4064067948a093a87cba474b5db011cd7000bbe481d50096a6", + "urls": [ + "bzz-raw://9f8bb1d3c07074f6903786cbf3669fc5a7ce38579cd707d5256deea41c82f91e", + "dweb:/ipfs/QmYo6VqduPYqjuuH3sYKWxscUAjeNa8LSLshrMDTGX9W1F" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactorySecondExtension.sol": { + "keccak256": "0x382500af7d15f66826c6a9ac369af80c00ff8f0ca424ef8c9f85e298de02d7d2", + "urls": [ + "bzz-raw://b7cd5273a1ec3ddaa70ef3d6701a662d925e09761386fd580c96aed3719075f9", + "dweb:/ipfs/QmbP3od8Fkf1KgQF6beNzy4vVsTkdQY9yyxtVZS9Ynr6M7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactoryStorage.sol": { + "keccak256": "0xec2c0858dfa3924ea09559bf081c579ff5b19a56ce36b2e986affad3e4f7cc4f", + "urls": [ + "bzz-raw://6973d7b17ad48d6f17fb9566c629b8db4abcd907d40c8085a01af647e5e1d016", + "dweb:/ipfs/QmVzc1JhAXMQY1Yr1EUc5rWfFTLZmB1aj8HRdnqehvVegh" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionStorage.sol": { + "keccak256": "0xe3342347e2315c9a7a8503ef7ba83390f1cd296318a50952a88d984af940e430", + "urls": [ + "bzz-raw://e6245ac45d4f691c1565e1f7228e475dcfa012ac5394a5b3142e1437efc33ba5", + "dweb:/ipfs/Qme2VMo4kP4DpANSZVrsAYYF8bEq9aySjMveDo1y7iMMC7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheel.sol": { + "keccak256": "0x8d4dc0e54619cbf9d7a503c9664163c55dbfbd43dc4ec6c5156711a5fd6bee34", + "urls": [ + "bzz-raw://90e2282f7bc72e65c084f40eee44e77f5a59a0702b66222595c417d078094cd5", + "dweb:/ipfs/QmY6jo9jnqeQsD8S6vSSWWT7NJdsXpVQZQh6Vaq6ZZo5QA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5061001a3361001f565b610096565b600180546001600160a01b031916905561004381610046602090811b61092c17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b615690806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000c35760003560e01c80637bf8f349116200007a5780637bf8f349146200015157806389f8132e14620001685780638da5cb5b1462000181578063a385fb961462000193578063e30c397814620001ac578063f2fde38b14620001be57600080fd5b80630d43e8ad14620000c857806316bb997f14620000f9578063534da460146200010d5780636969e58b1462000124578063715018a6146200013b57806379ba50971462000147575b600080fd5b600954620000dc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600a54620000dc906001600160a01b031681565b620000dc6200011e36600462000d17565b620001d5565b620000dc6200013536600462000d79565b62000273565b6200014562000588565b005b62000145620005df565b620000dc6200016236600462000db7565b6200065d565b620001726200076c565b604051620000f0919062000e0f565b6000546001600160a01b0316620000dc565b6200019d600b5481565b604051908152602001620000f0565b6001546001600160a01b0316620000dc565b62000145620001cf36600462000e5f565b620008b8565b600080620001e6878787876200065d565b9050670de0b6b3a76400008311156200026957604051639028493360e01b8152600481018490526001600160a01b038216906390284933906024016020604051808303816000875af115801562000241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000267919062000e7f565b505b9695505050505050565b6001600160a01b03821660009081526007602052604081206200029790836200097c565b620002b557604051633f94e3f760e01b815260040160405180910390fd5b6000338484604051620002c89062000cf3565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801562000305573d6000803e3d6000fd5b50905062000315600233620009a1565b50336000908152600460205260409020620003319082620009a1565b50600954604080516322ab0bc360e21b815290516000926001600160a01b031691638aac2f0c9160048083019260209291908290030181865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000e99565b90506000856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c919062000e99565b60405163ec2ffdd160e01b81526001600160a01b03808316600483015291925060009184169063ec2ffdd190602401602060405180830381865afa15801562000459573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047f919062000e99565b90506001600160a01b038116156200057b57826001600160a01b031663ca224d988386846001600160a01b0316633300183c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000507919062000eb9565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260ff16604482015260016064820152608401600060405180830381600087803b1580156200056157600080fd5b505af115801562000576573d6000803e3d6000fd5b505050505b5091925050505b92915050565b62000592620009b8565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b031681146200064f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401620005d6565b6200065a8162000a16565b50565b6000806200066c868662000273565b9050620006856001600160a01b03851633308662000a31565b60405163095ea7b360e01b81526001600160a01b0382811660048301526024820185905285169063095ea7b3906044016020604051808303816000875af1158015620006d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006fb919062000ede565b50604051633a8a230760e01b81526001600160a01b03858116600483015260248201859052821690633a8a230790604401600060405180830381600087803b1580156200074757600080fd5b505af11580156200075c573d6000803e3d6000fd5b509293505050505b949350505050565b604080516003808252608082019092526060919060009082602082018580368337019050509050636969e58b60e01b81620007a78462000f02565b93508360ff1681518110620007c057620007c062000f2e565b6001600160e01b031990921660209283029190910190910152637bf8f34960e01b81620007ed8462000f02565b93508360ff168151811062000806576200080662000f2e565b6001600160e01b03199092166020928302919091019091015263029a6d2360e51b81620008338462000f02565b93508360ff16815181106200084c576200084c62000f2e565b6001600160e01b03199092166020928302919091019091015260ff821615620005825760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401620005d6565b620008c2620009b8565b600180546001600160a01b0383166001600160a01b03199091168117909155620008f46000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b60006200099a836001600160a01b03841662000a93565b6000546001600160a01b0316331462000a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005d6565b565b600180546001600160a01b03191690556200065a816200092c565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905262000a8d90859062000ae5565b50505050565b600081815260018301602052604081205462000adc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000582565b50600062000582565b600062000b3c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662000bc39092919063ffffffff16565b80519091501562000bbe578080602001905181019062000b5d919062000ede565b62000bbe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620005d6565b505050565b606062000764848460008585600080866001600160a01b0316858760405162000bed919062000f73565b60006040518083038185875af1925050503d806000811462000c2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000c31565b606091505b509150915062000c448783838762000c4f565b979650505050505050565b6060831562000cc057825162000cb8576001600160a01b0385163b62000cb85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620005d6565b508162000764565b62000764838381511562000cd75781518083602001fd5b8060405162461bcd60e51b8152600401620005d6919062000f91565b6146bd8062000fc783390190565b6001600160a01b03811681146200065a57600080fd5b600080600080600060a0868803121562000d3057600080fd5b853562000d3d8162000d01565b9450602086013562000d4f8162000d01565b9350604086013562000d618162000d01565b94979396509394606081013594506080013592915050565b6000806040838503121562000d8d57600080fd5b823562000d9a8162000d01565b9150602083013562000dac8162000d01565b809150509250929050565b6000806000806080858703121562000dce57600080fd5b843562000ddb8162000d01565b9350602085013562000ded8162000d01565b9250604085013562000dff8162000d01565b9396929550929360600135925050565b6020808252825182820181905260009190848201906040850190845b8181101562000e535783516001600160e01b0319168352928401929184019160010162000e2b565b50909695505050505050565b60006020828403121562000e7257600080fd5b81356200099a8162000d01565b60006020828403121562000e9257600080fd5b5051919050565b60006020828403121562000eac57600080fd5b81516200099a8162000d01565b60006020828403121562000ecc57600080fd5b815160ff811681146200099a57600080fd5b60006020828403121562000ef157600080fd5b815180151581146200099a57600080fd5b600060ff82168062000f2457634e487b7160e01b600052601160045260246000fd5b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101562000f6157818101518382015260200162000f47565b8381111562000a8d5750506000910152565b6000825162000f8781846020870162000f44565b9190910192915050565b602081526000825180602084015262000fb281604085016020870162000f44565b601f01601f1916919091016040019291505056fe60a06040523480156200001157600080fd5b50604051620046bd380380620046bd8339810160408190526200003491620002e5565b6001600160a01b0380841660805260408051635fe3b56760e01b81529051600092851691635fe3b5679160048083019260209291908290030181865afa15801562000083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a9919062000339565b90506000826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000112919062000339565b9050806001600160a01b0316826001600160a01b0316146200017a5760405162461bcd60e51b815260206004820152601460248201527f6d61726b65747320706f6f6c7320646966666572000000000000000000000000604482015260640160405180910390fd5b600380546001600160a01b038085166001600160a01b03199283161790925560018054928716929091168217905560408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a919062000339565b600480546001600160a01b039283166001600160a01b031991821617825560028054938716939091168317905560408051636f307dc360e01b81529051636f307dc3928281019260209291908290030181865afa15801562000270573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000296919062000339565b600580546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550620003609350505050565b6001600160a01b0381168114620002e257600080fd5b50565b600080600060608486031215620002fb57600080fd5b83516200030881620002cc565b60208501519093506200031b81620002cc565b60408501519092506200032e81620002cc565b809150509250925092565b6000602082840312156200034c57600080fd5b81516200035981620002cc565b9392505050565b60805161432562000398600039600081816103a3015281816105740152818161114f0152818161174b0152611b1101526143256000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063958fa280116100b8578063b21fd0291161007c578063b21fd02914610368578063c31443bb1461037b578063c393d0e314610383578063c45a01551461038b578063cb2af14b1461039e578063ef5cfb8c146103c557610142565b8063958fa28014610314578063a415deda14610327578063a7e269a61461033a578063a833cb7f1461034d578063aabaecd61461035557610142565b80633a8a23071161010a5780633a8a2307146102a55780633e2f147f146102b8578063459b9ef1146102d0578063555b334a146102d85780636813f999146102ee578063902849331461030157610142565b806316f0115b1461021a5780631d7d45b31461024a5780632f86e2dd14610272578063372500ab14610293578063374607041461029d575b60008054604051634377ba4160e11b815282356001600160e01b03191660048201526001600160a01b03909116906386ef748290602401602060405180830381865afa158015610196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ba9190613a86565b90506001600160a01b0381166101f657604051637d60257960e01b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610215573d6000f35b3d6000fd5b60035461022d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61025d610258366004613aa3565b6103d8565b60408051928352602083019190915201610241565b610285610280366004613abc565b610567565b604051908152602001610241565b61029b610877565b005b610285610882565b61029b6102b3366004613ad9565b610a0b565b6102c0610b73565b6040519015158152602001610241565b610285610be6565b6102e0610df5565b604051610241929190613b05565b60055461022d906001600160a01b031681565b61028561030f366004613aa3565b611142565b61029b610322366004613b89565b6111fa565b60015461022d906001600160a01b031681565b60025461022d906001600160a01b031681565b61028561147c565b60045461022d906001600160a01b031681565b610285610376366004613abc565b61173e565b610285611835565b610285611af6565b60005461022d906001600160a01b031681565b61022d7f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103d3366004613abc565b611b06565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104549190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c9190613c12565b90506000610548611835565b905080871161055981898587611eba565b965096505050505050915091565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906105ad57506000546001600160a01b03163314155b156105cb576040516370d645e360e01b815260040160405180910390fd5b6105dc670de0b6b3a764000061232f565b600160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190613c12565b50600354600154604051630ede4edd60e41b81526001600160a01b039182166004820152600092919091169063ede4edd0906024016020604051808303816000875af11580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190613c12565b905080156106f15760405163059548ef60e51b8152600481018290526024016101ed565b6001546040516370a0823160e01b81523060048201526001600160a01b039091169063db006a759082906370a0823190602401602060405180830381865afa158015610741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107659190613c12565b6040518263ffffffff1660e01b815260040161078391815260200190565b6020604051808303816000875af11580156107a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c69190613c12565b905080156107ea5760405163eeddaac560e01b8152600481018290526024016101ed565b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190613c12565b600454909250610871906001600160a01b031684846128d7565b50919050565b61088033611b06565b565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa1580156108cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f39190613c12565b90508061090257600091505090565b600354600254604051630cbb414760e11b81523060048201526001600160a01b039182166024820152600160448201526000929190911690631976828e90606401602060405180830381865afa158015610960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109849190613c12565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa1580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190613c12565b9050610a0382848361293a565b935050505090565b610a206001600160a01b038316333084612c83565b610a2982612cbb565b5060035460015460405163929fe9a160e01b81526001600160a01b039283169263929fe9a192610a6192309290911690600401613c2b565b602060405180830381865afa158015610a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa29190613c45565b610b6f5760408051600180825281830190925260009160208083019080368337505060015482519293506001600160a01b031691839150600090610ae857610ae8613c7d565b6001600160a01b039283166020918202929092010152600354604051631853304760e31b815291169063c299823890610b25908490600401613c93565b6000604051808303816000875af1158015610b44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6c9190810190613d35565b50505b5050565b600154604051633af9e66960e01b81523060048201526000916001600160a01b031690633af9e66990602401602060405180830381865afa158015610bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be09190613c12565b15919050565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015610c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c579190613c12565b905080610c6657600091505090565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd49190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d489190613c12565b905060008160008054906101000a90046001600160a01b03166001600160a01b0316630da2262c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc29190613c12565b610dd490670de0b6b3a7640000613de1565b610dde9190613e16565b9050610dec8185600061293a565b94505050505090565b6060806000600360009054906101000a90046001600160a01b03166001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e759190810190613e2a565b9050805167ffffffffffffffff811115610e9157610e91613c67565b604051908082528060200260200182016040528015610eba578160200160208202803683370190505b509250805167ffffffffffffffff811115610ed757610ed7613c67565b604051908082528060200260200182016040528015610f00578160200160208202803683370190505b50915060005b815181101561113c576000828281518110610f2357610f23613c7d565b6020908102919091010151600154604051632e6f912b60e21b81529192506001600160a01b038084169263b9be44ac92610f639216903090600401613c2b565b6020604051808303816000875af1158015610f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa69190613c12565b50600254604051632e6f912b60e21b81526001600160a01b038381169263b9be44ac92610fdb92909116903090600401613c2b565b6020604051808303816000875af1158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e9190613c12565b50806001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110819190613a86565b85838151811061109357611093613c7d565b6001600160a01b039283166020918202929092010152604051630ff6b5a760e31b815230600482015290821690637fb5ad38906024016020604051808303816000875af11580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190613c12565b84838151811061111e5761111e613c7d565b6020908102919091010152508061113481613eb9565b915050610f06565b50509091565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061118857506000546001600160a01b03163314155b156111a6576040516370d645e360e01b815260040160405180910390fd5b670de0b6b3a764000082116111c6576111c6670de0b6b3a764000061232f565b816111cf611835565b10156111e3576111de82612e6f565b6111ec565b6111ec8261232f565b6111f4611835565b92915050565b6001546001600160a01b03163314156112e257600061121b82840184613aa3565b9050611226816131bc565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112989190613c12565b9050848110156112db57600480546040516319ad25f160e11b81526001600160a01b039091169181019190915260248101829052604481018690526064016101ed565b5050611404565b6002546001600160a01b03163314156113bc57600061130382840184613aa3565b905061130f8482613282565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137c9190613c12565b9050848110156112db576005546040516319ad25f160e11b81526001600160a01b03909116600482015260248101829052604481018690526064016101ed565b60405162461bcd60e51b815260206004820152601b60248201527f21666c206e6f742066726f6d20656974686572206d61726b657473000000000060448201526064016101ed565b60405163095ea7b360e01b8152336004820152602481018490526001600160a01b0385169063095ea7b3906044016020604051808303816000875af1158015611451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114759190613c45565b5050505050565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f69190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015611546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156a9190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa1580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115de9190613c12565b600154604051633af9e66960e01b81523060048201529192506000916001600160a01b0390911690633af9e66990602401602060405180830381865afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190613c12565b90506000670de0b6b3a76400006116678385613de1565b6116719190613e16565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e39190613c12565b90506000670de0b6b3a76400006116fa8388613de1565b6117049190613e16565b905060006117128285613ed4565b90508561172782670de0b6b3a7640000613de1565b6117319190613e16565b9850505050505050505090565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611789576040516370d645e360e01b815260040160405180910390fd5b611791610b73565b6117ae5760405163716041e560e01b815260040160405180910390fd5b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156117f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181b9190613c12565b6005549091506111f4906001600160a01b031684836128d7565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015611882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a69190613c12565b9050806118b557600091505090565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa1580156118ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119239190613a86565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015611973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119979190613c12565b90506000670de0b6b3a76400006119ae8584613de1565b6119b89190613e16565b6002546040516305eff7ef60e21b815230600482015291925060009182916001600160a01b0316906317bfdfbc90602401602060405180830381865afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a9190613c12565b90508015611ac55760025460405163fc57d4df60e01b81526001600160a01b03918216600482015260009187169063fc57d4df90602401602060405180830381865afa158015611a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa29190613c12565b9050670de0b6b3a7640000611ab78383613de1565b611ac19190613e16565b9250505b611acf8284613ed4565b611ae184670de0b6b3a7640000613de1565b611aeb9190613e16565b965050505050505090565b6000611b0133610567565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611b4a57506000546001600160a01b03163314155b15611b68576040516370d645e360e01b815260040160405180910390fd5b60035460408051633605b51b60e01b815290516000926001600160a01b031691633605b51b91600480830192869291908290030181865afa158015611bb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bd99190810190613e2a565b905060005b8151811015611eb5576000828281518110611bfb57611bfb613c7d565b6020908102919091010151600154604051632e6f912b60e21b81529192506001600160a01b038084169263b9be44ac92611c3b9216903090600401613c2b565b6020604051808303816000875af1158015611c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7e9190613c12565b50600254604051632e6f912b60e21b81526001600160a01b038381169263b9be44ac92611cb392909116903090600401613c2b565b6020604051808303816000875af1158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190613c12565b50604051633bd73ee360e21b81523060048201526001600160a01b0382169063ef5cfb8c90602401600060405180830381600087803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b505050506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db49190613a86565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613c12565b90508015611e9f5760405163a9059cbb60e01b81526001600160a01b0387811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015611e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9d9190613c45565b505b5050508080611ead90613eb9565b915050611bde565b505050565b600154604051633af9e66960e01b8152306004820152600091829182916001600160a01b031690633af9e66990602401602060405180830381865afa158015611f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2b9190613c12565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa158015611f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9d9190613c12565b90506000881561209c5760008054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190613a86565b60055460048054604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b9461205494908216939091169101613c2b565b602060405180830381865afa158015612071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120959190613c12565b905061218c565b60008054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121119190613a86565b60048054600554604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b94612148948216939091169101613c2b565b602060405180830381865afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121899190613c12565b90505b600061271061219b8382613eeb565b6121ad90670de0b6b3a7640000613de1565b6121b79190613e16565b9050600080670de0b6b3a76400006121cf878c613de1565b6121d99190613e16565b90506000670de0b6b3a76400006121f0878c613de1565b6121fa9190613e16565b90508b6000612211670de0b6b3a764000083613f03565b905085600061222883670de0b6b3a7640000613f42565b6122328584613f42565b61223c9190613f03565b6122468587613f42565b6122508886613f42565b61225a9190613f03565b61226c90670de0b6b3a7640000613f42565b6122769190613fc7565b905060008112612286578061228f565b61228f81613ff5565b96505050505050508881670de0b6b3a76400006122ac9190613de1565b6122b69190613e16565b9650876122cb82670de0b6b3a7640000613de1565b6122d59190613e16565b95508a1561230157670de0b6b3a76400006122f08388613de1565b6122fa9190613e16565b9550612321565b670de0b6b3a76400006123148389613de1565b61231e9190613e16565b96505b505050505094509492505050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa1580156123fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241f9190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa15801561246f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124939190613c12565b9050670de0b6b3a7640000861161264b576002546040516305eff7ef60e21b81523060048201526001600160a01b03909116906317bfdfbc90602401602060405180830381865afa1580156124ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125109190613c12565b9350600061251e8386613de1565b905060008060009054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125989190613a86565b60048054600554604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b946125cf948216939091169101613c2b565b602060405180830381865afa1580156125ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126109190613c12565b905060006127106126218382613eeb565b61262b9085613de1565b6126359190613e16565b90506126418482613e16565b975050505061265e565b6126586000878385611eba565b90955093505b83156126e3576002546040805160208082018990528251808303909101815281830192839052633c3b4b8960e01b9092526001600160a01b0390921691633c3b4b89916126b09188919060440161406a565b600060405180830381600087803b1580156126ca57600080fd5b505af11580156126de573d6000803e3d6000fd5b505050505b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561272c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127509190613c12565b905080156128ce576002546040516305eff7ef60e21b81523060048201526000916001600160a01b0316906317bfdfbc90602401602060405180830381865afa1580156127a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c59190613c12565b905080156128cc5760008282116127dc57816127de565b825b60055460025460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015612835573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128599190613c45565b5060025460405163073a938160e11b8152600481018390526001600160a01b0390911690630e752702906024016020604051808303816000875af11580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190613c12565b50505b505b50505050505050565b6040516001600160a01b038316602482015260448101829052611eb590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526134c8565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b49190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015612a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a289190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015612a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9c9190613c12565b90506000670de0b6b3a7640000612ab38488613de1565b612abd9190613e16565b90506000670de0b6b3a7640000612ad4858b613de1565b612ade9190613e16565b90506000670de0b6b3a7640000612af5858b613de1565b612aff9190613e16565b905060008060009054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b799190613a86565b60055460048054604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b94612bb194908216939091169101613c2b565b602060405180830381865afa158015612bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf29190613c12565b9050612bff600a82613eeb565b90506000612c0f82612710613eeb565b612c1b85612710613de1565b612c259190613e16565b90508285828682612c368386614083565b612c409190613f03565b612c4a9190613f03565b612c548285614083565b612c6690670de0b6b3a7640000613f42565b612c709190613fc7565b9f9e505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610b6c9085906323b872dd60e01b90608401612903565b6004546000906001600160a01b03838116911614612cec57600454612cea9083906001600160a01b031661359a565b505b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d599190613c12565b6004805460015460405163095ea7b360e01b81526001600160a01b039182169381019390935260248301849052929350919091169063095ea7b3906044016020604051808303816000875af1158015612db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dda9190613c45565b5060015460405163140e25ad60e31b8152600481018390526000916001600160a01b03169063a0712d68906024016020604051808303816000875af1158015612e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4b9190613c12565b9050801561087157604051631a25a97b60e31b8152600481018290526024016101ed565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa158015612eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edd9190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f519190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015612fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc59190613c12565b9050600080612fd76001878587611eba565b6001546040805160208082018590528251808303909101815281830192839052633c3b4b8960e01b9092529395509193506001600160a01b031691633c3b4b89916130279186919060440161406a565b600060405180830381600087803b15801561304157600080fd5b505af1158015613055573d6000803e3d6000fd5b5050600480546040516370a0823160e01b81523092810192909252600093506001600160a01b031691506370a0823190602401602060405180830381865afa1580156130a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c99190613c12565b905080156128ce576004805460015460405163095ea7b360e01b81526001600160a01b039182169381019390935260248301849052169063095ea7b3906044016020604051808303816000875af1158015613128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314c9190613c45565b5060015460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d68906024016020604051808303816000875af1158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc9190613c12565b6004546131d1906001600160a01b0316612cbb565b5060025460405163317afabb60e21b8152600481018390526000916001600160a01b03169063c5ebeaec906024016020604051808303816000875af115801561321e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132429190613c12565b9050801561326657604051636f86fa6b60e11b8152600481018290526024016101ed565b600554600454611eb5916001600160a01b03908116911661359a565b6002546040516305eff7ef60e21b81523060048201526000916001600160a01b0316906317bfdfbc90602401602060405180830381865afa1580156132cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ef9190613c12565b905060008184106133005781613302565b835b60055460025460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015613359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337d9190613c45565b5060025460405163073a938160e11b8152600481018390526000916001600160a01b031690630e752702906024016020604051808303816000875af11580156133ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ee9190613c12565b905080156134115760405162f0f70d60e41b8152600481018290526024016101ed565b60015460405163852a12e360e01b8152600481018690526001600160a01b039091169063852a12e3906024016020604051808303816000875af115801561345c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134809190613c12565b905080156134a45760405163213e72eb60e11b8152600481018290526024016101ed565b6004546005546134c0916001600160a01b03908116911661359a565b505050505050565b600061351d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661372a9092919063ffffffff16565b805190915015611eb5578080602001905181019061353b9190613c45565b611eb55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ed565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156135e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136079190613c12565b6000805460405163ed287f3f60e01b8152929350909182916001600160a01b03169063ed287f3f9061363f9089908990600401613c2b565b600060405180830381865afa15801561365c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261368491908101906141a8565b915091508151600014156136ab57604051634fd1fa8360e11b815260040160405180910390fd5b60005b82518110156137205760008382815181106136cb576136cb613c7d565b6020026020010151905060008383815181106136e9576136e9613c7d565b602002602001015190506136ff89878484613743565b9099508998509650869550829150613718905081613eb9565b9150506136ae565b5050505092915050565b606061373984846000856137c4565b90505b9392505050565b60008060006137a0856310badf4e60e01b8989886040516024016137699392919061426d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526138a1565b9050808060200190518101906137b69190614294565b925092505094509492505050565b6060824710156138255760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ed565b600080866001600160a01b0316858760405161384191906142c2565b60006040518083038185875af1925050503d806000811461387e576040519150601f19603f3d011682016040523d82523d6000602084013e613883565b606091505b509150915061389487838387613995565b925050505b949350505050565b60606001600160a01b0383163b6139095760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ed565b600080846001600160a01b03168460405161392491906142c2565b600060405180830381855af49150503d806000811461395f576040519150601f19603f3d011682016040523d82523d6000602084013e613964565b606091505b509150915061398c82826040518060600160405280602781526020016142f260279139613a0b565b95945050505050565b60608315613a015782516139fa576001600160a01b0385163b6139fa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ed565b5081613899565b6138998383613a44565b60608315613a1a57508161373c565b825115613a2a5782518084602001fd5b8160405162461bcd60e51b81526004016101ed91906142de565b815115613a545781518083602001fd5b8060405162461bcd60e51b81526004016101ed91906142de565b6001600160a01b0381168114613a8357600080fd5b50565b600060208284031215613a9857600080fd5b815161373c81613a6e565b600060208284031215613ab557600080fd5b5035919050565b600060208284031215613ace57600080fd5b813561373c81613a6e565b60008060408385031215613aec57600080fd5b8235613af781613a6e565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015613b475781516001600160a01b031684529284019290840190600101613b22565b5050508381038285015284518082528583019183019060005b81811015613b7c57835183529284019291840191600101613b60565b5090979650505050505050565b60008060008060608587031215613b9f57600080fd5b8435613baa81613a6e565b935060208501359250604085013567ffffffffffffffff80821115613bce57600080fd5b818701915087601f830112613be257600080fd5b813581811115613bf157600080fd5b886020828501011115613c0357600080fd5b95989497505060200194505050565b600060208284031215613c2457600080fd5b5051919050565b6001600160a01b0392831681529116602082015260400190565b600060208284031215613c5757600080fd5b8151801515811461373c57600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015613cd45783516001600160a01b031683529284019291840191600101613caf565b50909695505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613d0957613d09613c67565b604052919050565b600067ffffffffffffffff821115613d2b57613d2b613c67565b5060051b60200190565b60006020808385031215613d4857600080fd5b825167ffffffffffffffff811115613d5f57600080fd5b8301601f81018513613d7057600080fd5b8051613d83613d7e82613d11565b613ce0565b81815260059190911b82018301908381019087831115613da257600080fd5b928401925b82841015613dc057835182529284019290840190613da7565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613dfb57613dfb613dcb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613e2557613e25613e00565b500490565b60006020808385031215613e3d57600080fd5b825167ffffffffffffffff811115613e5457600080fd5b8301601f81018513613e6557600080fd5b8051613e73613d7e82613d11565b81815260059190911b82018301908381019087831115613e9257600080fd5b928401925b82841015613dc0578351613eaa81613a6e565b82529284019290840190613e97565b6000600019821415613ecd57613ecd613dcb565b5060010190565b600082821015613ee657613ee6613dcb565b500390565b60008219821115613efe57613efe613dcb565b500190565b60008083128015600160ff1b850184121615613f2157613f21613dcb565b6001600160ff1b0384018313811615613f3c57613f3c613dcb565b50500390565b60006001600160ff1b0381841382841380821686840486111615613f6857613f68613dcb565b600160ff1b6000871282811687830589121615613f8757613f87613dcb565b60008712925087820587128484161615613fa357613fa3613dcb565b87850587128184161615613fb957613fb9613dcb565b505050929093029392505050565b600082613fd657613fd6613e00565b600160ff1b821460001984141615613ff057613ff0613dcb565b500590565b6000600160ff1b82141561400b5761400b613dcb565b5060000390565b60005b8381101561402d578181015183820152602001614015565b83811115610b6c5750506000910152565b60008151808452614056816020860160208601614012565b601f01601f19169290920160200192915050565b828152604060208201526000613739604083018461403e565b600080821280156001600160ff1b03849003851316156140a5576140a5613dcb565b600160ff1b83900384128116156140be576140be613dcb565b50500190565b6000601f83818401126140d657600080fd5b825160206140e6613d7e83613d11565b82815260059290921b8501810191818101908784111561410557600080fd5b8287015b8481101561419c57805167ffffffffffffffff8082111561412a5760008081fd5b818a0191508a603f83011261413f5760008081fd5b8582015160408282111561415557614155613c67565b614166828b01601f19168901613ce0565b92508183528c8183860101111561417d5760008081fd5b61418c82898501838701614012565b5050845250918301918301614109565b50979650505050505050565b600080604083850312156141bb57600080fd5b825167ffffffffffffffff808211156141d357600080fd5b818501915085601f8301126141e757600080fd5b815160206141f7613d7e83613d11565b82815260059290921b8401810191818101908984111561421657600080fd5b948201945b8386101561423d57855161422e81613a6e565b8252948201949082019061421b565b9188015191965090935050508082111561425657600080fd5b50614263858286016140c4565b9150509250929050565b60018060a01b038416815282602082015260606040820152600061398c606083018461403e565b600080604083850312156142a757600080fd5b82516142b281613a6e565b6020939093015192949293505050565b600082516142d4818460208701614012565b9190910192915050565b60208152600061373c602083018461403e56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "1042:2786:145:-:0;;;;;;;;;;;;-1:-1:-1;936:32:452;719:10:466;936:18:452;:32::i;:::-;1042:2786:145;;1496:153:453;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1042:2786:145:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040523480156200001157600080fd5b5060043610620000c35760003560e01c80637bf8f349116200007a5780637bf8f349146200015157806389f8132e14620001685780638da5cb5b1462000181578063a385fb961462000193578063e30c397814620001ac578063f2fde38b14620001be57600080fd5b80630d43e8ad14620000c857806316bb997f14620000f9578063534da460146200010d5780636969e58b1462000124578063715018a6146200013b57806379ba50971462000147575b600080fd5b600954620000dc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600a54620000dc906001600160a01b031681565b620000dc6200011e36600462000d17565b620001d5565b620000dc6200013536600462000d79565b62000273565b6200014562000588565b005b62000145620005df565b620000dc6200016236600462000db7565b6200065d565b620001726200076c565b604051620000f0919062000e0f565b6000546001600160a01b0316620000dc565b6200019d600b5481565b604051908152602001620000f0565b6001546001600160a01b0316620000dc565b62000145620001cf36600462000e5f565b620008b8565b600080620001e6878787876200065d565b9050670de0b6b3a76400008311156200026957604051639028493360e01b8152600481018490526001600160a01b038216906390284933906024016020604051808303816000875af115801562000241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000267919062000e7f565b505b9695505050505050565b6001600160a01b03821660009081526007602052604081206200029790836200097c565b620002b557604051633f94e3f760e01b815260040160405180910390fd5b6000338484604051620002c89062000cf3565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801562000305573d6000803e3d6000fd5b50905062000315600233620009a1565b50336000908152600460205260409020620003319082620009a1565b50600954604080516322ab0bc360e21b815290516000926001600160a01b031691638aac2f0c9160048083019260209291908290030181865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000e99565b90506000856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c919062000e99565b60405163ec2ffdd160e01b81526001600160a01b03808316600483015291925060009184169063ec2ffdd190602401602060405180830381865afa15801562000459573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047f919062000e99565b90506001600160a01b038116156200057b57826001600160a01b031663ca224d988386846001600160a01b0316633300183c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000507919062000eb9565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260ff16604482015260016064820152608401600060405180830381600087803b1580156200056157600080fd5b505af115801562000576573d6000803e3d6000fd5b505050505b5091925050505b92915050565b62000592620009b8565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b031681146200064f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401620005d6565b6200065a8162000a16565b50565b6000806200066c868662000273565b9050620006856001600160a01b03851633308662000a31565b60405163095ea7b360e01b81526001600160a01b0382811660048301526024820185905285169063095ea7b3906044016020604051808303816000875af1158015620006d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006fb919062000ede565b50604051633a8a230760e01b81526001600160a01b03858116600483015260248201859052821690633a8a230790604401600060405180830381600087803b1580156200074757600080fd5b505af11580156200075c573d6000803e3d6000fd5b509293505050505b949350505050565b604080516003808252608082019092526060919060009082602082018580368337019050509050636969e58b60e01b81620007a78462000f02565b93508360ff1681518110620007c057620007c062000f2e565b6001600160e01b031990921660209283029190910190910152637bf8f34960e01b81620007ed8462000f02565b93508360ff168151811062000806576200080662000f2e565b6001600160e01b03199092166020928302919091019091015263029a6d2360e51b81620008338462000f02565b93508360ff16815181106200084c576200084c62000f2e565b6001600160e01b03199092166020928302919091019091015260ff821615620005825760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401620005d6565b620008c2620009b8565b600180546001600160a01b0383166001600160a01b03199091168117909155620008f46000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b60006200099a836001600160a01b03841662000a93565b6000546001600160a01b0316331462000a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005d6565b565b600180546001600160a01b03191690556200065a816200092c565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905262000a8d90859062000ae5565b50505050565b600081815260018301602052604081205462000adc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000582565b50600062000582565b600062000b3c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662000bc39092919063ffffffff16565b80519091501562000bbe578080602001905181019062000b5d919062000ede565b62000bbe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620005d6565b505050565b606062000764848460008585600080866001600160a01b0316858760405162000bed919062000f73565b60006040518083038185875af1925050503d806000811462000c2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000c31565b606091505b509150915062000c448783838762000c4f565b979650505050505050565b6060831562000cc057825162000cb8576001600160a01b0385163b62000cb85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620005d6565b508162000764565b62000764838381511562000cd75781518083602001fd5b8060405162461bcd60e51b8152600401620005d6919062000f91565b6146bd8062000fc783390190565b6001600160a01b03811681146200065a57600080fd5b600080600080600060a0868803121562000d3057600080fd5b853562000d3d8162000d01565b9450602086013562000d4f8162000d01565b9350604086013562000d618162000d01565b94979396509394606081013594506080013592915050565b6000806040838503121562000d8d57600080fd5b823562000d9a8162000d01565b9150602083013562000dac8162000d01565b809150509250929050565b6000806000806080858703121562000dce57600080fd5b843562000ddb8162000d01565b9350602085013562000ded8162000d01565b9250604085013562000dff8162000d01565b9396929550929360600135925050565b6020808252825182820181905260009190848201906040850190845b8181101562000e535783516001600160e01b0319168352928401929184019160010162000e2b565b50909695505050505050565b60006020828403121562000e7257600080fd5b81356200099a8162000d01565b60006020828403121562000e9257600080fd5b5051919050565b60006020828403121562000eac57600080fd5b81516200099a8162000d01565b60006020828403121562000ecc57600080fd5b815160ff811681146200099a57600080fd5b60006020828403121562000ef157600080fd5b815180151581146200099a57600080fd5b600060ff82168062000f2457634e487b7160e01b600052601160045260246000fd5b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101562000f6157818101518382015260200162000f47565b8381111562000a8d5750506000910152565b6000825162000f8781846020870162000f44565b9190910192915050565b602081526000825180602084015262000fb281604085016020870162000f44565b601f01601f1916919091016040019291505056fe60a06040523480156200001157600080fd5b50604051620046bd380380620046bd8339810160408190526200003491620002e5565b6001600160a01b0380841660805260408051635fe3b56760e01b81529051600092851691635fe3b5679160048083019260209291908290030181865afa15801562000083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a9919062000339565b90506000826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000112919062000339565b9050806001600160a01b0316826001600160a01b0316146200017a5760405162461bcd60e51b815260206004820152601460248201527f6d61726b65747320706f6f6c7320646966666572000000000000000000000000604482015260640160405180910390fd5b600380546001600160a01b038085166001600160a01b03199283161790925560018054928716929091168217905560408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a919062000339565b600480546001600160a01b039283166001600160a01b031991821617825560028054938716939091168317905560408051636f307dc360e01b81529051636f307dc3928281019260209291908290030181865afa15801562000270573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000296919062000339565b600580546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550620003609350505050565b6001600160a01b0381168114620002e257600080fd5b50565b600080600060608486031215620002fb57600080fd5b83516200030881620002cc565b60208501519093506200031b81620002cc565b60408501519092506200032e81620002cc565b809150509250925092565b6000602082840312156200034c57600080fd5b81516200035981620002cc565b9392505050565b60805161432562000398600039600081816103a3015281816105740152818161114f0152818161174b0152611b1101526143256000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063958fa280116100b8578063b21fd0291161007c578063b21fd02914610368578063c31443bb1461037b578063c393d0e314610383578063c45a01551461038b578063cb2af14b1461039e578063ef5cfb8c146103c557610142565b8063958fa28014610314578063a415deda14610327578063a7e269a61461033a578063a833cb7f1461034d578063aabaecd61461035557610142565b80633a8a23071161010a5780633a8a2307146102a55780633e2f147f146102b8578063459b9ef1146102d0578063555b334a146102d85780636813f999146102ee578063902849331461030157610142565b806316f0115b1461021a5780631d7d45b31461024a5780632f86e2dd14610272578063372500ab14610293578063374607041461029d575b60008054604051634377ba4160e11b815282356001600160e01b03191660048201526001600160a01b03909116906386ef748290602401602060405180830381865afa158015610196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ba9190613a86565b90506001600160a01b0381166101f657604051637d60257960e01b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610215573d6000f35b3d6000fd5b60035461022d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61025d610258366004613aa3565b6103d8565b60408051928352602083019190915201610241565b610285610280366004613abc565b610567565b604051908152602001610241565b61029b610877565b005b610285610882565b61029b6102b3366004613ad9565b610a0b565b6102c0610b73565b6040519015158152602001610241565b610285610be6565b6102e0610df5565b604051610241929190613b05565b60055461022d906001600160a01b031681565b61028561030f366004613aa3565b611142565b61029b610322366004613b89565b6111fa565b60015461022d906001600160a01b031681565b60025461022d906001600160a01b031681565b61028561147c565b60045461022d906001600160a01b031681565b610285610376366004613abc565b61173e565b610285611835565b610285611af6565b60005461022d906001600160a01b031681565b61022d7f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103d3366004613abc565b611b06565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104549190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c9190613c12565b90506000610548611835565b905080871161055981898587611eba565b965096505050505050915091565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906105ad57506000546001600160a01b03163314155b156105cb576040516370d645e360e01b815260040160405180910390fd5b6105dc670de0b6b3a764000061232f565b600160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190613c12565b50600354600154604051630ede4edd60e41b81526001600160a01b039182166004820152600092919091169063ede4edd0906024016020604051808303816000875af11580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190613c12565b905080156106f15760405163059548ef60e51b8152600481018290526024016101ed565b6001546040516370a0823160e01b81523060048201526001600160a01b039091169063db006a759082906370a0823190602401602060405180830381865afa158015610741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107659190613c12565b6040518263ffffffff1660e01b815260040161078391815260200190565b6020604051808303816000875af11580156107a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c69190613c12565b905080156107ea5760405163eeddaac560e01b8152600481018290526024016101ed565b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190613c12565b600454909250610871906001600160a01b031684846128d7565b50919050565b61088033611b06565b565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa1580156108cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f39190613c12565b90508061090257600091505090565b600354600254604051630cbb414760e11b81523060048201526001600160a01b039182166024820152600160448201526000929190911690631976828e90606401602060405180830381865afa158015610960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109849190613c12565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa1580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190613c12565b9050610a0382848361293a565b935050505090565b610a206001600160a01b038316333084612c83565b610a2982612cbb565b5060035460015460405163929fe9a160e01b81526001600160a01b039283169263929fe9a192610a6192309290911690600401613c2b565b602060405180830381865afa158015610a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa29190613c45565b610b6f5760408051600180825281830190925260009160208083019080368337505060015482519293506001600160a01b031691839150600090610ae857610ae8613c7d565b6001600160a01b039283166020918202929092010152600354604051631853304760e31b815291169063c299823890610b25908490600401613c93565b6000604051808303816000875af1158015610b44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6c9190810190613d35565b50505b5050565b600154604051633af9e66960e01b81523060048201526000916001600160a01b031690633af9e66990602401602060405180830381865afa158015610bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be09190613c12565b15919050565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015610c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c579190613c12565b905080610c6657600091505090565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd49190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d489190613c12565b905060008160008054906101000a90046001600160a01b03166001600160a01b0316630da2262c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc29190613c12565b610dd490670de0b6b3a7640000613de1565b610dde9190613e16565b9050610dec8185600061293a565b94505050505090565b6060806000600360009054906101000a90046001600160a01b03166001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e759190810190613e2a565b9050805167ffffffffffffffff811115610e9157610e91613c67565b604051908082528060200260200182016040528015610eba578160200160208202803683370190505b509250805167ffffffffffffffff811115610ed757610ed7613c67565b604051908082528060200260200182016040528015610f00578160200160208202803683370190505b50915060005b815181101561113c576000828281518110610f2357610f23613c7d565b6020908102919091010151600154604051632e6f912b60e21b81529192506001600160a01b038084169263b9be44ac92610f639216903090600401613c2b565b6020604051808303816000875af1158015610f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa69190613c12565b50600254604051632e6f912b60e21b81526001600160a01b038381169263b9be44ac92610fdb92909116903090600401613c2b565b6020604051808303816000875af1158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e9190613c12565b50806001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110819190613a86565b85838151811061109357611093613c7d565b6001600160a01b039283166020918202929092010152604051630ff6b5a760e31b815230600482015290821690637fb5ad38906024016020604051808303816000875af11580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190613c12565b84838151811061111e5761111e613c7d565b6020908102919091010152508061113481613eb9565b915050610f06565b50509091565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061118857506000546001600160a01b03163314155b156111a6576040516370d645e360e01b815260040160405180910390fd5b670de0b6b3a764000082116111c6576111c6670de0b6b3a764000061232f565b816111cf611835565b10156111e3576111de82612e6f565b6111ec565b6111ec8261232f565b6111f4611835565b92915050565b6001546001600160a01b03163314156112e257600061121b82840184613aa3565b9050611226816131bc565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112989190613c12565b9050848110156112db57600480546040516319ad25f160e11b81526001600160a01b039091169181019190915260248101829052604481018690526064016101ed565b5050611404565b6002546001600160a01b03163314156113bc57600061130382840184613aa3565b905061130f8482613282565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137c9190613c12565b9050848110156112db576005546040516319ad25f160e11b81526001600160a01b03909116600482015260248101829052604481018690526064016101ed565b60405162461bcd60e51b815260206004820152601b60248201527f21666c206e6f742066726f6d20656974686572206d61726b657473000000000060448201526064016101ed565b60405163095ea7b360e01b8152336004820152602481018490526001600160a01b0385169063095ea7b3906044016020604051808303816000875af1158015611451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114759190613c45565b5050505050565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f69190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015611546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156a9190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa1580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115de9190613c12565b600154604051633af9e66960e01b81523060048201529192506000916001600160a01b0390911690633af9e66990602401602060405180830381865afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190613c12565b90506000670de0b6b3a76400006116678385613de1565b6116719190613e16565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e39190613c12565b90506000670de0b6b3a76400006116fa8388613de1565b6117049190613e16565b905060006117128285613ed4565b90508561172782670de0b6b3a7640000613de1565b6117319190613e16565b9850505050505050505090565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611789576040516370d645e360e01b815260040160405180910390fd5b611791610b73565b6117ae5760405163716041e560e01b815260040160405180910390fd5b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156117f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181b9190613c12565b6005549091506111f4906001600160a01b031684836128d7565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015611882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a69190613c12565b9050806118b557600091505090565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa1580156118ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119239190613a86565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015611973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119979190613c12565b90506000670de0b6b3a76400006119ae8584613de1565b6119b89190613e16565b6002546040516305eff7ef60e21b815230600482015291925060009182916001600160a01b0316906317bfdfbc90602401602060405180830381865afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a9190613c12565b90508015611ac55760025460405163fc57d4df60e01b81526001600160a01b03918216600482015260009187169063fc57d4df90602401602060405180830381865afa158015611a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa29190613c12565b9050670de0b6b3a7640000611ab78383613de1565b611ac19190613e16565b9250505b611acf8284613ed4565b611ae184670de0b6b3a7640000613de1565b611aeb9190613e16565b965050505050505090565b6000611b0133610567565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611b4a57506000546001600160a01b03163314155b15611b68576040516370d645e360e01b815260040160405180910390fd5b60035460408051633605b51b60e01b815290516000926001600160a01b031691633605b51b91600480830192869291908290030181865afa158015611bb1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bd99190810190613e2a565b905060005b8151811015611eb5576000828281518110611bfb57611bfb613c7d565b6020908102919091010151600154604051632e6f912b60e21b81529192506001600160a01b038084169263b9be44ac92611c3b9216903090600401613c2b565b6020604051808303816000875af1158015611c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7e9190613c12565b50600254604051632e6f912b60e21b81526001600160a01b038381169263b9be44ac92611cb392909116903090600401613c2b565b6020604051808303816000875af1158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190613c12565b50604051633bd73ee360e21b81523060048201526001600160a01b0382169063ef5cfb8c90602401600060405180830381600087803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b505050506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db49190613a86565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613c12565b90508015611e9f5760405163a9059cbb60e01b81526001600160a01b0387811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015611e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9d9190613c45565b505b5050508080611ead90613eb9565b915050611bde565b505050565b600154604051633af9e66960e01b8152306004820152600091829182916001600160a01b031690633af9e66990602401602060405180830381865afa158015611f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2b9190613c12565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa158015611f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9d9190613c12565b90506000881561209c5760008054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190613a86565b60055460048054604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b9461205494908216939091169101613c2b565b602060405180830381865afa158015612071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120959190613c12565b905061218c565b60008054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121119190613a86565b60048054600554604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b94612148948216939091169101613c2b565b602060405180830381865afa158015612165573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121899190613c12565b90505b600061271061219b8382613eeb565b6121ad90670de0b6b3a7640000613de1565b6121b79190613e16565b9050600080670de0b6b3a76400006121cf878c613de1565b6121d99190613e16565b90506000670de0b6b3a76400006121f0878c613de1565b6121fa9190613e16565b90508b6000612211670de0b6b3a764000083613f03565b905085600061222883670de0b6b3a7640000613f42565b6122328584613f42565b61223c9190613f03565b6122468587613f42565b6122508886613f42565b61225a9190613f03565b61226c90670de0b6b3a7640000613f42565b6122769190613fc7565b905060008112612286578061228f565b61228f81613ff5565b96505050505050508881670de0b6b3a76400006122ac9190613de1565b6122b69190613e16565b9650876122cb82670de0b6b3a7640000613de1565b6122d59190613e16565b95508a1561230157670de0b6b3a76400006122f08388613de1565b6122fa9190613e16565b9550612321565b670de0b6b3a76400006123148389613de1565b61231e9190613e16565b96505b505050505094509492505050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa1580156123fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241f9190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa15801561246f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124939190613c12565b9050670de0b6b3a7640000861161264b576002546040516305eff7ef60e21b81523060048201526001600160a01b03909116906317bfdfbc90602401602060405180830381865afa1580156124ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125109190613c12565b9350600061251e8386613de1565b905060008060009054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125989190613a86565b60048054600554604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b946125cf948216939091169101613c2b565b602060405180830381865afa1580156125ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126109190613c12565b905060006127106126218382613eeb565b61262b9085613de1565b6126359190613e16565b90506126418482613e16565b975050505061265e565b6126586000878385611eba565b90955093505b83156126e3576002546040805160208082018990528251808303909101815281830192839052633c3b4b8960e01b9092526001600160a01b0390921691633c3b4b89916126b09188919060440161406a565b600060405180830381600087803b1580156126ca57600080fd5b505af11580156126de573d6000803e3d6000fd5b505050505b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561272c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127509190613c12565b905080156128ce576002546040516305eff7ef60e21b81523060048201526000916001600160a01b0316906317bfdfbc90602401602060405180830381865afa1580156127a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c59190613c12565b905080156128cc5760008282116127dc57816127de565b825b60055460025460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015612835573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128599190613c45565b5060025460405163073a938160e11b8152600481018390526001600160a01b0390911690630e752702906024016020604051808303816000875af11580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190613c12565b50505b505b50505050505050565b6040516001600160a01b038316602482015260448101829052611eb590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526134c8565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b49190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015612a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a289190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015612a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9c9190613c12565b90506000670de0b6b3a7640000612ab38488613de1565b612abd9190613e16565b90506000670de0b6b3a7640000612ad4858b613de1565b612ade9190613e16565b90506000670de0b6b3a7640000612af5858b613de1565b612aff9190613e16565b905060008060009054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b799190613a86565b60055460048054604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b94612bb194908216939091169101613c2b565b602060405180830381865afa158015612bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf29190613c12565b9050612bff600a82613eeb565b90506000612c0f82612710613eeb565b612c1b85612710613de1565b612c259190613e16565b90508285828682612c368386614083565b612c409190613f03565b612c4a9190613f03565b612c548285614083565b612c6690670de0b6b3a7640000613f42565b612c709190613fc7565b9f9e505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610b6c9085906323b872dd60e01b90608401612903565b6004546000906001600160a01b03838116911614612cec57600454612cea9083906001600160a01b031661359a565b505b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d599190613c12565b6004805460015460405163095ea7b360e01b81526001600160a01b039182169381019390935260248301849052929350919091169063095ea7b3906044016020604051808303816000875af1158015612db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dda9190613c45565b5060015460405163140e25ad60e31b8152600481018390526000916001600160a01b03169063a0712d68906024016020604051808303816000875af1158015612e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4b9190613c12565b9050801561087157604051631a25a97b60e31b8152600481018290526024016101ed565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa158015612eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edd9190613a86565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f519190613c12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015612fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc59190613c12565b9050600080612fd76001878587611eba565b6001546040805160208082018590528251808303909101815281830192839052633c3b4b8960e01b9092529395509193506001600160a01b031691633c3b4b89916130279186919060440161406a565b600060405180830381600087803b15801561304157600080fd5b505af1158015613055573d6000803e3d6000fd5b5050600480546040516370a0823160e01b81523092810192909252600093506001600160a01b031691506370a0823190602401602060405180830381865afa1580156130a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c99190613c12565b905080156128ce576004805460015460405163095ea7b360e01b81526001600160a01b039182169381019390935260248301849052169063095ea7b3906044016020604051808303816000875af1158015613128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314c9190613c45565b5060015460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d68906024016020604051808303816000875af1158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc9190613c12565b6004546131d1906001600160a01b0316612cbb565b5060025460405163317afabb60e21b8152600481018390526000916001600160a01b03169063c5ebeaec906024016020604051808303816000875af115801561321e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132429190613c12565b9050801561326657604051636f86fa6b60e11b8152600481018290526024016101ed565b600554600454611eb5916001600160a01b03908116911661359a565b6002546040516305eff7ef60e21b81523060048201526000916001600160a01b0316906317bfdfbc90602401602060405180830381865afa1580156132cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ef9190613c12565b905060008184106133005781613302565b835b60055460025460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015613359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337d9190613c45565b5060025460405163073a938160e11b8152600481018390526000916001600160a01b031690630e752702906024016020604051808303816000875af11580156133ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ee9190613c12565b905080156134115760405162f0f70d60e41b8152600481018290526024016101ed565b60015460405163852a12e360e01b8152600481018690526001600160a01b039091169063852a12e3906024016020604051808303816000875af115801561345c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134809190613c12565b905080156134a45760405163213e72eb60e11b8152600481018290526024016101ed565b6004546005546134c0916001600160a01b03908116911661359a565b505050505050565b600061351d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661372a9092919063ffffffff16565b805190915015611eb5578080602001905181019061353b9190613c45565b611eb55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ed565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156135e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136079190613c12565b6000805460405163ed287f3f60e01b8152929350909182916001600160a01b03169063ed287f3f9061363f9089908990600401613c2b565b600060405180830381865afa15801561365c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261368491908101906141a8565b915091508151600014156136ab57604051634fd1fa8360e11b815260040160405180910390fd5b60005b82518110156137205760008382815181106136cb576136cb613c7d565b6020026020010151905060008383815181106136e9576136e9613c7d565b602002602001015190506136ff89878484613743565b9099508998509650869550829150613718905081613eb9565b9150506136ae565b5050505092915050565b606061373984846000856137c4565b90505b9392505050565b60008060006137a0856310badf4e60e01b8989886040516024016137699392919061426d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526138a1565b9050808060200190518101906137b69190614294565b925092505094509492505050565b6060824710156138255760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ed565b600080866001600160a01b0316858760405161384191906142c2565b60006040518083038185875af1925050503d806000811461387e576040519150601f19603f3d011682016040523d82523d6000602084013e613883565b606091505b509150915061389487838387613995565b925050505b949350505050565b60606001600160a01b0383163b6139095760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ed565b600080846001600160a01b03168460405161392491906142c2565b600060405180830381855af49150503d806000811461395f576040519150601f19603f3d011682016040523d82523d6000602084013e613964565b606091505b509150915061398c82826040518060600160405280602781526020016142f260279139613a0b565b95945050505050565b60608315613a015782516139fa576001600160a01b0385163b6139fa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ed565b5081613899565b6138998383613a44565b60608315613a1a57508161373c565b825115613a2a5782518084602001fd5b8160405162461bcd60e51b81526004016101ed91906142de565b815115613a545781518083602001fd5b8060405162461bcd60e51b81526004016101ed91906142de565b6001600160a01b0381168114613a8357600080fd5b50565b600060208284031215613a9857600080fd5b815161373c81613a6e565b600060208284031215613ab557600080fd5b5035919050565b600060208284031215613ace57600080fd5b813561373c81613a6e565b60008060408385031215613aec57600080fd5b8235613af781613a6e565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015613b475781516001600160a01b031684529284019290840190600101613b22565b5050508381038285015284518082528583019183019060005b81811015613b7c57835183529284019291840191600101613b60565b5090979650505050505050565b60008060008060608587031215613b9f57600080fd5b8435613baa81613a6e565b935060208501359250604085013567ffffffffffffffff80821115613bce57600080fd5b818701915087601f830112613be257600080fd5b813581811115613bf157600080fd5b886020828501011115613c0357600080fd5b95989497505060200194505050565b600060208284031215613c2457600080fd5b5051919050565b6001600160a01b0392831681529116602082015260400190565b600060208284031215613c5757600080fd5b8151801515811461373c57600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015613cd45783516001600160a01b031683529284019291840191600101613caf565b50909695505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613d0957613d09613c67565b604052919050565b600067ffffffffffffffff821115613d2b57613d2b613c67565b5060051b60200190565b60006020808385031215613d4857600080fd5b825167ffffffffffffffff811115613d5f57600080fd5b8301601f81018513613d7057600080fd5b8051613d83613d7e82613d11565b613ce0565b81815260059190911b82018301908381019087831115613da257600080fd5b928401925b82841015613dc057835182529284019290840190613da7565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613dfb57613dfb613dcb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613e2557613e25613e00565b500490565b60006020808385031215613e3d57600080fd5b825167ffffffffffffffff811115613e5457600080fd5b8301601f81018513613e6557600080fd5b8051613e73613d7e82613d11565b81815260059190911b82018301908381019087831115613e9257600080fd5b928401925b82841015613dc0578351613eaa81613a6e565b82529284019290840190613e97565b6000600019821415613ecd57613ecd613dcb565b5060010190565b600082821015613ee657613ee6613dcb565b500390565b60008219821115613efe57613efe613dcb565b500190565b60008083128015600160ff1b850184121615613f2157613f21613dcb565b6001600160ff1b0384018313811615613f3c57613f3c613dcb565b50500390565b60006001600160ff1b0381841382841380821686840486111615613f6857613f68613dcb565b600160ff1b6000871282811687830589121615613f8757613f87613dcb565b60008712925087820587128484161615613fa357613fa3613dcb565b87850587128184161615613fb957613fb9613dcb565b505050929093029392505050565b600082613fd657613fd6613e00565b600160ff1b821460001984141615613ff057613ff0613dcb565b500590565b6000600160ff1b82141561400b5761400b613dcb565b5060000390565b60005b8381101561402d578181015183820152602001614015565b83811115610b6c5750506000910152565b60008151808452614056816020860160208601614012565b601f01601f19169290920160200192915050565b828152604060208201526000613739604083018461403e565b600080821280156001600160ff1b03849003851316156140a5576140a5613dcb565b600160ff1b83900384128116156140be576140be613dcb565b50500190565b6000601f83818401126140d657600080fd5b825160206140e6613d7e83613d11565b82815260059290921b8501810191818101908784111561410557600080fd5b8287015b8481101561419c57805167ffffffffffffffff8082111561412a5760008081fd5b818a0191508a603f83011261413f5760008081fd5b8582015160408282111561415557614155613c67565b614166828b01601f19168901613ce0565b92508183528c8183860101111561417d5760008081fd5b61418c82898501838701614012565b5050845250918301918301614109565b50979650505050505050565b600080604083850312156141bb57600080fd5b825167ffffffffffffffff808211156141d357600080fd5b818501915085601f8301126141e757600080fd5b815160206141f7613d7e83613d11565b82815260059290921b8401810191818101908984111561421657600080fd5b948201945b8386101561423d57855161422e81613a6e565b8252948201949082019061421b565b9188015191965090935050508082111561425657600080fd5b50614263858286016140c4565b9150509250929050565b60018060a01b038416815282602082015260606040820152600061398c606083018461403e565b600080604083850312156142a757600080fd5b82516142b281613a6e565b6020939093015192949293505050565b600082516142d4818460208701614012565b9190910192915050565b60208152600061373c602083018461403e56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "1042:2786:145:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1127:37:146;;;;;-1:-1:-1;;;;;1127:37:146;;;;;;-1:-1:-1;;;;;211:32:486;;;193:51;;181:2;166:18;1127:37:146;;;;;;;;1168:47;;;;;-1:-1:-1;;;;;1168:47:146;;;3362:464:145;;;;;;:::i;:::-;;:::i;1998:859::-;;;;;;:::i;:::-;;:::i;174:106:133:-;;;:::i;:::-;;1729:206:453;;;:::i;2861:497:145:-;;;;;;:::i;:::-;;:::i;1326:485::-;;;:::i;:::-;;;;;;;:::i;1201:85:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;1201:85;;1219:28:146;;;;;;;;;3785:25:486;;;3773:2;3758:18;1219:28:146;3639:177:486;842:99:453;921:13;;-1:-1:-1;;;;;921:13:453;842:99;;1134:178;;;;;;:::i;:::-;;:::i;3362:464:145:-;3573:15;3596:24;3623:86;3645:17;3664:13;3679;3694:14;3623:21;:86::i;:::-;3596:113;;3736:4;3719:14;:21;3715:86;;;3750:44;;-1:-1:-1;;;3750:44:145;;;;;3785:25:486;;;-1:-1:-1;;;;;3750:28:145;;;;;3758:18:486;;3750:44:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3715:86;3813:8;3362:464;-1:-1:-1;;;;;;3362:464:145:o;1998:859::-;-1:-1:-1;;;;;2116:48:145;;2088:15;2116:48;;;:29;:48;;;;;:81;;2182:13;2116:57;:81::i;:::-;2111:115;;2206:20;;-1:-1:-1;;;2206:20:145;;;;;;;;;;;2111:115;2233:24;2280:10;2292:17;2311:13;2260:65;;;;;:::i;:::-;-1:-1:-1;;;;;4563:15:486;;;4545:34;;4615:15;;;4610:2;4595:18;;4588:43;4667:15;;;4662:2;4647:18;;4640:43;4495:2;4480:18;2260:65:145;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2233:92:145;-1:-1:-1;2332:41:145;:25;2362:10;2332:29;:41::i;:::-;-1:-1:-1;2398:10:145;2379:30;;;;:18;:30;;;;;:53;;2422:8;2379:34;:53::i;:::-;-1:-1:-1;2481:14:145;;:36;;;-1:-1:-1;;;2481:36:145;;;;2439:39;;-1:-1:-1;;;;;2481:14:145;;:34;;:36;;;;;;;;;;;;;;:14;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2439:78;;2523:19;2553:17;-1:-1:-1;;;;;2553:29:145;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2621:49;;-1:-1:-1;;;2621:49:145;;-1:-1:-1;;;;;211:32:486;;;2621:49:145;;;193:51:486;2523:62:145;;-1:-1:-1;2591:27:145;;2621:36;;;;;166:18:486;;2621:49:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2591:79;-1:-1:-1;;;;;;2680:31:145;;;2676:155;;2721:19;-1:-1:-1;;;;;2721:31:145;;2753:11;2774:8;2785;-1:-1:-1;;;;;2785:30:145;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2721:103;;-1:-1:-1;;;;;;2721:103:145;;;;;;;-1:-1:-1;;;;;6127:15:486;;;2721:103:145;;;6109:34:486;6179:15;;;;6159:18;;;6152:43;6243:4;6231:17;6211:18;;;6204:45;2819:4:145;6265:18:486;;;6258:50;6043:19;;2721:103:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2676:155;-1:-1:-1;2844:8:145;;-1:-1:-1;;;1998:859:145;;;;;:::o;174:106:133:-;1094:13:452;:11;:13::i;:::-;235:40:133::1;::::0;-1:-1:-1;;;235:40:133;;6521:2:486;235:40:133::1;::::0;::::1;6503:21:486::0;6560:2;6540:18;;;6533:30;6599:32;6579:18;;;6572:60;6649:18;;235:40:133::1;;;;;;;;1729:206:453::0;921:13;;719:10:466;;-1:-1:-1;;;;;921:13:453;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:453;;6880:2:486;1814:78:453;;;6862:21:486;6919:2;6899:18;;;6892:30;6958:34;6938:18;;;6931:62;-1:-1:-1;;;7009:18:486;;;7002:39;7058:19;;1814:78:453;6678:405:486;1814:78:453;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;2861:497:145:-;3035:15;3058:24;3085:48;3100:17;3119:13;3085:14;:48::i;:::-;3058:75;-1:-1:-1;3139:73:145;-1:-1:-1;;;;;3139:30:145;;3170:10;3190:4;3197:14;3139:30;:73::i;:::-;3218:56;;-1:-1:-1;;;3218:56:145;;-1:-1:-1;;;;;7280:32:486;;;3218:56:145;;;7262:51:486;7329:18;;;7322:34;;;3218:21:145;;;;;7235:18:486;;3218:56:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3280:52:145;;-1:-1:-1;;;3280:52:145;;-1:-1:-1;;;;;7280:32:486;;;3280:52:145;;;7262:51:486;7329:18;;;7322:34;;;3280:21:145;;;;;7235:18:486;;3280:52:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3345:8:145;;-1:-1:-1;;;;2861:497:145;;;;;;;:::o;1326:485::-;1475:22;;;1432:1;1475:22;;;;;;;;;1392:15;;1432:1;1415:14;;1432:1;1475:22;;;1392:15;;1475:22;;;;;-1:-1:-1;;1439:58:145;-1:-1:-1;;;;1439:58:145;1521:10;;;:::i;:::-;;;;1503:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1503:60:145;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;1569:17:145;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:67:145;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;1642:17:145;1660:10;;;:::i;:::-;;;;1642:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1642:74:145;;;:29;;;;;;;;;;;:74;1730:13;;;;1722:54;;;;-1:-1:-1;;;1722:54:145;;8702:2:486;1722:54:145;;;8684:21:486;8741:2;8721:18;;;8714:30;8780;8760:18;;;8753:58;8828:18;;1722:54:145;8500:352:486;1134:178:453;1094:13:452;:11;:13::i;:::-;1223::453::1;:24:::0;;-1:-1:-1;;;;;1223:24:453;::::1;-1:-1:-1::0;;;;;;1223:24:453;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::452::0;1273:6;-1:-1:-1;;;;;1273:6:452;;1201:85;1287:7:453::1;-1:-1:-1::0;;;;;1262:43:453::1;;;;;;;;;;;1134:178:::0;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;8852:165:469:-;-1:-1:-1;;;;;8985:23:469;;8932:4;4343:19;;;:12;;;:19;;;;;;:24;;8955:55;8948:62;8852:165;-1:-1:-1;;;8852:165:469:o;8297:150::-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:469;;8390:4;:50::i;1359:130:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;719:10:466;1422:23:452;1414:68;;;;-1:-1:-1;;;1414:68:452;;9059:2:486;1414:68:452;;;9041:21:486;;;9078:18;;;9071:30;9137:34;9117:18;;;9110:62;9189:18;;1414:68:452;8857:356:486;1414:68:452;1359:130::o;1496:153:453:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;:34::i;1040:252:447:-;1216:68;;;-1:-1:-1;;;;;9476:15:486;;;1216:68:447;;;9458:34:486;9528:15;;9508:18;;;9501:43;9560:18;;;;9553:34;;;1216:68:447;;;;;;;;;;9393:18:486;;;;1216:68:447;;;;;;;;-1:-1:-1;;;;;1216:68:447;-1:-1:-1;;;1216:68:447;;;1189:96;;1209:5;;1189:19;:96::i;:::-;1040:252;;;;:::o;2206:404:469:-;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:469;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:469;2581:12;;3868:717:447;4298:23;4324:69;4352:4;4324:69;;;;;;;;;;;;;;;;;4332:5;-1:-1:-1;;;;;4324:27:447;;;:69;;;;;:::i;:::-;4407:17;;4298:95;;-1:-1:-1;4407:21:447;4403:176;;4502:10;4491:30;;;;;;;;;;;;:::i;:::-;4483:85;;;;-1:-1:-1;;;4483:85:447;;9800:2:486;4483:85:447;;;9782:21:486;9839:2;9819:18;;;9812:30;9878:34;9858:18;;;9851:62;-1:-1:-1;;;9929:18:486;;;9922:40;9979:19;;4483:85:447;9598:406:486;4483:85:447;3949:636;3868:717;;:::o;3883:223:448:-;4016:12;4047:52;4069:6;4077:4;4083:1;4086:12;4016;5251;5265:23;5292:6;-1:-1:-1;;;;;5292:11:448;5311:5;5318:4;5292:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5250:73;;;;5340:69;5367:6;5375:7;5384:10;5396:12;5340:26;:69::i;:::-;5333:76;4970:446;-1:-1:-1;;;;;;;4970:446:448:o;6588:628::-;6768:12;6796:7;6792:418;;;6823:17;;6819:286;;-1:-1:-1;;;;;1476:19:448;;;7030:60;;;;-1:-1:-1;;;7030:60:448;;11160:2:486;7030:60:448;;;11142:21:486;11199:2;11179:18;;;11172:30;11238:31;11218:18;;;11211:59;11287:18;;7030:60:448;10958:353:486;7030:60:448;-1:-1:-1;7125:10:448;7118:17;;6792:418;7166:33;7174:10;7186:12;7897:17;;:21;7893:379;;8125:10;8119:17;8181:15;8168:10;8164:2;8160:19;8153:44;7893:379;8248:12;8241:20;;-1:-1:-1;;;8241:20:448;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;:::o;493:140:486:-;-1:-1:-1;;;;;577:31:486;;567:42;;557:70;;623:1;620;613:12;638:756;795:6;803;811;819;827;880:3;868:9;859:7;855:23;851:33;848:53;;;897:1;894;887:12;848:53;936:9;923:23;955:40;989:5;955:40;:::i;:::-;1014:5;-1:-1:-1;1071:2:486;1056:18;;1043:32;1084:42;1043:32;1084:42;:::i;:::-;1145:7;-1:-1:-1;1204:2:486;1189:18;;1176:32;1217:42;1176:32;1217:42;:::i;:::-;638:756;;;;-1:-1:-1;1278:7:486;;1332:2;1317:18;;1304:32;;-1:-1:-1;1383:3:486;1368:19;1355:33;;638:756;-1:-1:-1;;638:756:486:o;1632:440::-;1734:6;1742;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;1850:9;1837:23;1869:40;1903:5;1869:40;:::i;:::-;1928:5;-1:-1:-1;1985:2:486;1970:18;;1957:32;1998:42;1957:32;1998:42;:::i;:::-;2059:7;2049:17;;;1632:440;;;;;:::o;2077:687::-;2225:6;2233;2241;2249;2302:3;2290:9;2281:7;2277:23;2273:33;2270:53;;;2319:1;2316;2309:12;2270:53;2358:9;2345:23;2377:40;2411:5;2377:40;:::i;:::-;2436:5;-1:-1:-1;2493:2:486;2478:18;;2465:32;2506:42;2465:32;2506:42;:::i;:::-;2567:7;-1:-1:-1;2626:2:486;2611:18;;2598:32;2639:42;2598:32;2639:42;:::i;:::-;2077:687;;;;-1:-1:-1;2700:7:486;;2754:2;2739:18;2726:32;;-1:-1:-1;;2077:687:486:o;2769:657::-;2938:2;2990:21;;;3060:13;;2963:18;;;3082:22;;;2909:4;;2938:2;3161:15;;;;3135:2;3120:18;;;2909:4;3204:196;3218:6;3215:1;3212:13;3204:196;;;3283:13;;-1:-1:-1;;;;;;3279:40:486;3267:53;;3375:15;;;;3340:12;;;;3240:1;3233:9;3204:196;;;-1:-1:-1;3417:3:486;;2769:657;-1:-1:-1;;;;;;2769:657:486:o;3821:256::-;3880:6;3933:2;3921:9;3912:7;3908:23;3904:32;3901:52;;;3949:1;3946;3939:12;3901:52;3988:9;3975:23;4007:40;4041:5;4007:40;:::i;4082:184::-;4152:6;4205:2;4193:9;4184:7;4180:23;4176:32;4173:52;;;4221:1;4218;4211:12;4173:52;-1:-1:-1;4244:16:486;;4082:184;-1:-1:-1;4082:184:486:o;4694:289::-;4793:6;4846:2;4834:9;4825:7;4821:23;4817:32;4814:52;;;4862:1;4859;4852:12;4814:52;4894:9;4888:16;4913:40;4947:5;4913:40;:::i;5572:273::-;5640:6;5693:2;5681:9;5672:7;5668:23;5664:32;5661:52;;;5709:1;5706;5699:12;5661:52;5741:9;5735:16;5791:4;5784:5;5780:16;5773:5;5770:27;5760:55;;5811:1;5808;5801:12;7367:277;7434:6;7487:2;7475:9;7466:7;7462:23;7458:32;7455:52;;;7503:1;7500;7493:12;7455:52;7535:9;7529:16;7588:5;7581:13;7574:21;7567:5;7564:32;7554:60;;7610:1;7607;7600:12;8088:275;8125:3;8169:4;8162:5;8158:16;8193:7;8183:138;;8243:10;8238:3;8234:20;8231:1;8224:31;8278:4;8275:1;8268:15;8306:4;8303:1;8296:15;8183:138;-1:-1:-1;;8337:20:486;;8088:275;-1:-1:-1;;8088:275:486:o;8368:127::-;8429:10;8424:3;8420:20;8417:1;8410:31;8460:4;8457:1;8450:15;8484:4;8481:1;8474:15;10416:258;10488:1;10498:113;10512:6;10509:1;10506:13;10498:113;;;10588:11;;;10582:18;10569:11;;;10562:39;10534:2;10527:10;10498:113;;;10629:6;10626:1;10623:13;10620:48;;;-1:-1:-1;;10664:1:486;10646:16;;10639:27;10416:258::o;10679:274::-;10808:3;10846:6;10840:13;10862:53;10908:6;10903:3;10896:4;10888:6;10884:17;10862:53;:::i;:::-;10931:16;;;;;10679:274;-1:-1:-1;;10679:274:486:o;11316:383::-;11465:2;11454:9;11447:21;11428:4;11497:6;11491:13;11540:6;11535:2;11524:9;11520:18;11513:34;11556:66;11615:6;11610:2;11599:9;11595:18;11590:2;11582:6;11578:15;11556:66;:::i;:::-;11683:2;11662:15;-1:-1:-1;;11658:29:486;11643:45;;;;11690:2;11639:54;;11316:383;-1:-1:-1;;11316:383:486:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_getExtensionFunctions()": "89f8132e", + "acceptOwnership()": "79ba5097", + "blocksPerYear()": "a385fb96", + "createAndFundPosition(address,address,address,uint256)": "7bf8f349", + "createAndFundPositionAtRatio(address,address,address,uint256,uint256)": "534da460", + "createPosition(address,address)": "6969e58b", + "feeDistributor()": "0d43e8ad", + "liquidatorsRegistry()": "16bb997f", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LeveredPositionsLens.json b/packages/sdk/deployments/mode/LeveredPositionsLens.json new file mode 100644 index 0000000000..5b01fce367 --- /dev/null +++ b/packages/sdk/deployments/mode/LeveredPositionsLens.json @@ -0,0 +1,730 @@ +{ + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_targetLeverageRatio", + "type": "uint256" + } + ], + "name": "getBorrowRateAtRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + } + ], + "name": "getBorrowableMarketsAndRates", + "outputs": [ + { + "internalType": "address[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "underlyingsPrices", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "names", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "symbols", + "type": "string[]" + }, + { + "internalType": "uint256[]", + "name": "rates", + "type": "uint256[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCollateralMarkets", + "outputs": [ + { + "internalType": "address[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "poolOfMarket", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "underlyingPrices", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "names", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "symbols", + "type": "string[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "uint256[]", + "name": "totalUnderlyingSupplied", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "ratesPerBlock", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newFunding", + "type": "uint256" + } + ], + "name": "getLeverageRatioAfterFunding", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_supplyAPY", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_supplyAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_targetLeverageRatio", + "type": "uint256" + } + ], + "name": "getNetAPY", + "outputs": [ + { + "internalType": "int256", + "name": "netAPY", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyAPY", + "type": "uint256" + } + ], + "name": "getNetApyForPosition", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyAPY", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newFunding", + "type": "uint256" + } + ], + "name": "getNetApyForPositionAfterFunding", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyApy", + "type": "uint256" + } + ], + "name": "getPositionInfo", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "collateralAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowedAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionSupplyAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityValue", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "currentApy", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "debtRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "safetyBuffer", + "type": "uint256" + } + ], + "internalType": "struct LeveredPositionsLens.PositionInfo", + "name": "info", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition[]", + "name": "positions", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "supplyApys", + "type": "uint256[]" + } + ], + "name": "getPositionsInfo", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "collateralAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowedAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionSupplyAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityValue", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "currentApy", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "debtRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "safetyBuffer", + "type": "uint256" + } + ], + "internalType": "struct LeveredPositionsLens.PositionInfo[]", + "name": "infos", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "_factory", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "_factory", + "type": "address" + } + ], + "name": "reinitialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "transactionIndex": 1, + "gasUsed": "746637", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000004000000080000000000000800000000000000000000000000000000400000000020000000000000800000000000000000020000000000000000000040000000000000400000000000000000000000000000004000000000000000000000000000000000020000000000000000000", + "blockHash": "0xd07d3f8efe08d1680df2605212228ba3ccef7ade250303f7f0e62f86c12cffda", + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097670, + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000d9a5677594694819f69d0907c3094eab480f3a28" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xd07d3f8efe08d1680df2605212228ba3ccef7ade250303f7f0e62f86c12cffda" + }, + { + "transactionIndex": 1, + "blockNumber": 2097670, + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 1, + "blockHash": "0xd07d3f8efe08d1680df2605212228ba3ccef7ade250303f7f0e62f86c12cffda" + }, + { + "transactionIndex": 1, + "blockNumber": 2097670, + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 2, + "blockHash": "0xd07d3f8efe08d1680df2605212228ba3ccef7ade250303f7f0e62f86c12cffda" + } + ], + "blockNumber": 2097670, + "cumulativeGasUsed": "797138", + "status": 1, + "byzantium": true + }, + "args": [ + "0xD9a5677594694819F69D0907C3094EAb480F3a28", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xc4d66de80000000000000000000000009b506a03bbff2a842866b10bc6732da72640cd45" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x9B506A03bBFf2a842866b10BC6732da72640cd45" + ] + }, + "implementation": "0xD9a5677594694819F69D0907C3094EAb480F3a28", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LeveredPositionsLens_Implementation.json b/packages/sdk/deployments/mode/LeveredPositionsLens_Implementation.json new file mode 100644 index 0000000000..143bec3115 --- /dev/null +++ b/packages/sdk/deployments/mode/LeveredPositionsLens_Implementation.json @@ -0,0 +1,1440 @@ +{ + "address": "0xD9a5677594694819F69D0907C3094EAb480F3a28", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_targetLeverageRatio", + "type": "uint256" + } + ], + "name": "getBorrowRateAtRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + } + ], + "name": "getBorrowableMarketsAndRates", + "outputs": [ + { + "internalType": "address[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "underlyingsPrices", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "names", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "symbols", + "type": "string[]" + }, + { + "internalType": "uint256[]", + "name": "rates", + "type": "uint256[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCollateralMarkets", + "outputs": [ + { + "internalType": "address[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "poolOfMarket", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "underlyingPrices", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "names", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "symbols", + "type": "string[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "uint256[]", + "name": "totalUnderlyingSupplied", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "ratesPerBlock", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newFunding", + "type": "uint256" + } + ], + "name": "getLeverageRatioAfterFunding", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_supplyAPY", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_supplyAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_targetLeverageRatio", + "type": "uint256" + } + ], + "name": "getNetAPY", + "outputs": [ + { + "internalType": "int256", + "name": "netAPY", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyAPY", + "type": "uint256" + } + ], + "name": "getNetApyForPosition", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyAPY", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newFunding", + "type": "uint256" + } + ], + "name": "getNetApyForPositionAfterFunding", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyApy", + "type": "uint256" + } + ], + "name": "getPositionInfo", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "collateralAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowedAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionSupplyAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityValue", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "currentApy", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "debtRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "safetyBuffer", + "type": "uint256" + } + ], + "internalType": "struct LeveredPositionsLens.PositionInfo", + "name": "info", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition[]", + "name": "positions", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "supplyApys", + "type": "uint256[]" + } + ], + "name": "getPositionsInfo", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "collateralAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowedAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionSupplyAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityValue", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "currentApy", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "debtRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "safetyBuffer", + "type": "uint256" + } + ], + "internalType": "struct LeveredPositionsLens.PositionInfo[]", + "name": "infos", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "_factory", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "_factory", + "type": "address" + } + ], + "name": "reinitialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x51a23a111b25a21b15af88b17ceddf62c650feda202c49ceb6102f3ec66fa611", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xD9a5677594694819F69D0907C3094EAb480F3a28", + "transactionIndex": 1, + "gasUsed": "2404236", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x3f7cd5afb23bd06ee99473b7684c39fcd16fd1d8d0d44a0b2cb601831e4b22cb", + "transactionHash": "0x51a23a111b25a21b15af88b17ceddf62c650feda202c49ceb6102f3ec66fa611", + "logs": [], + "blockNumber": 2097667, + "cumulativeGasUsed": "2451149", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "factory", + "outputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_targetLeverageRatio", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowRateAtRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowableMarketsAndRates", + "outputs": [ + { + "internalType": "address[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "underlyingsPrices", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "names", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "symbols", + "type": "string[]" + }, + { + "internalType": "uint256[]", + "name": "rates", + "type": "uint256[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCollateralMarkets", + "outputs": [ + { + "internalType": "address[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "poolOfMarket", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "underlyingPrices", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "names", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "symbols", + "type": "string[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "uint256[]", + "name": "totalUnderlyingSupplied", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "ratesPerBlock", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newFunding", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getLeverageRatioAfterFunding", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_supplyAPY", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_supplyAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_targetLeverageRatio", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNetAPY", + "outputs": [ + { + "internalType": "int256", + "name": "netAPY", + "type": "int256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyAPY", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNetApyForPosition", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyAPY", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newFunding", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNetApyForPositionAfterFunding", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyApy", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPositionInfo", + "outputs": [ + { + "internalType": "struct LeveredPositionsLens.PositionInfo", + "name": "info", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "collateralAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowedAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionSupplyAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityValue", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "currentApy", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "debtRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "safetyBuffer", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition[]", + "name": "positions", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "supplyApys", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPositionsInfo", + "outputs": [ + { + "internalType": "struct LeveredPositionsLens.PositionInfo[]", + "name": "infos", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "collateralAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowedAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionSupplyAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityValue", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "currentApy", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "debtRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "safetyBuffer", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "_factory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "_factory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reinitialize" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getBorrowRateAtRatio(address,address,uint256,uint256)": { + "details": "returns the Rate for the chosen borrowable at the specified leverage ratio and supply amount" + }, + "getBorrowableMarketsAndRates(address)": { + "details": "returns lists of the market addresses, names, symbols and the current Rate for each Borrowable asset" + }, + "getCollateralMarkets()": { + "details": "returns lists of the market addresses, names and symbols of the underlying assets of those collateral markets that are whitelisted" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getBorrowRateAtRatio(address,address,uint256,uint256)": { + "notice": "this is a lens fn, it is not intended to be used on-chain" + }, + "getBorrowableMarketsAndRates(address)": { + "notice": "this is a lens fn, it is not intended to be used on-chain" + }, + "getCollateralMarkets()": { + "notice": "this is a lens fn, it is not intended to be used on-chain" + }, + "getNetAPY(uint256,uint256,address,address,uint256)": { + "notice": "this is a lens fn, it is not intended to be used on-chain" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/levered/LeveredPositionsLens.sol": "LeveredPositionsLens" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/IFlashLoanReceiver.sol": { + "keccak256": "0x3db1dbf3e47975f60cccc859740aa84665d9fd683079c7329285008502c454da", + "urls": [ + "bzz-raw://89727af88e6d376eced9a6ea97c3da80d6c801198f133d9d6b887894f7b8ab00", + "dweb:/ipfs/QmVS7Thpbkt3RGi4UsKev94BJdLstHiGHrGk1mPXadSqS2" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/ILeveredPositionFactory.sol": { + "keccak256": "0x422831aefc6bc1edc9864205bf710620d25b9e4d8138bcf5c13020fe3738f103", + "urls": [ + "bzz-raw://d05924628c79254bdeb073a2791e1b82c5cae603015dbeb138f87267fd886c3b", + "dweb:/ipfs/QmbP4oeh1TksPdLMPEM1SzSZaeCF7bCX99ycNuo4ezPPGZ" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/LeveredPosition.sol": { + "keccak256": "0xbdbd1edc4c699e4064067948a093a87cba474b5db011cd7000bbe481d50096a6", + "urls": [ + "bzz-raw://9f8bb1d3c07074f6903786cbf3669fc5a7ce38579cd707d5256deea41c82f91e", + "dweb:/ipfs/QmYo6VqduPYqjuuH3sYKWxscUAjeNa8LSLshrMDTGX9W1F" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionStorage.sol": { + "keccak256": "0xe3342347e2315c9a7a8503ef7ba83390f1cd296318a50952a88d984af940e430", + "urls": [ + "bzz-raw://e6245ac45d4f691c1565e1f7228e475dcfa012ac5394a5b3142e1437efc33ba5", + "dweb:/ipfs/Qme2VMo4kP4DpANSZVrsAYYF8bEq9aySjMveDo1y7iMMC7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionsLens.sol": { + "keccak256": "0x9fdcb20875ed579057cd0628d6bf6201e1fa32777a4abaa921c526c8e0bee353", + "urls": [ + "bzz-raw://6e73cf7e780d8c2cff27e6b6db3f75ba70bdb79584a1d8e1091f3591147d8bce", + "dweb:/ipfs/QmTvwrcJUU7iCDTNzqRrT5MMQop2SHd1cDtbpApBRnBvGs" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheel.sol": { + "keccak256": "0x8d4dc0e54619cbf9d7a503c9664163c55dbfbd43dc4ec6c5156711a5fd6bee34", + "urls": [ + "bzz-raw://90e2282f7bc72e65c084f40eee44e77f5a59a0702b66222595c417d078094cd5", + "dweb:/ipfs/QmY6jo9jnqeQsD8S6vSSWWT7NJdsXpVQZQh6Vaq6ZZo5QA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50612a8a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638f4b1166116100715780638f4b11661461015e578063c03497c01461017e578063c45a01551461019b578063c4d66de8146101cc578063cc3e7804146101e1578063f7e7d1fd146101f457600080fd5b8063012db95c146100b95780631327d7fb146100df5780631a610317146100ff57806360ff773e146101125780636bbdc780146101385780638de1624d1461014b575b600080fd5b6100cc6100c7366004612109565b610207565b6040519081526020015b60405180910390f35b6100f26100ed366004612109565b610396565b6040516100d691906121b3565b6100cc61010d366004612109565b6108ca565b6101256101203660046121c2565b6108df565b6040516100d69796959493929190612320565b6100cc6101463660046123a9565b610f5d565b6100cc6101593660046123ef565b6111ca565b61017161016c36600461248c565b6114e5565b6040516100d691906124f7565b6101866115c7565b6040516100d699989796959493929190612546565b6000546101b4906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100d6565b6101df6101da3660046121c2565b611db2565b005b6100cc6101ef36600461263c565b611ea1565b6101df6102023660046121c2565b611fea565b600080836001600160a01b031663a833cb7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c9190612671565b90508015801561027a575082155b15610289576000915050610390565b6000846001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ed919061268a565b604051633af9e66960e01b81526001600160a01b0387811660048301529190911690633af9e66990602401602060405180830381865afa158015610335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103599190612671565b905061036584836126bd565b61036f85836126bd565b61038190670de0b6b3a76400006126d5565b61038b919061270a565b925050505b92915050565b61039e612090565b6000836001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610402919061268a565b90506000846001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610444573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610468919061268a565b9050806001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc919061268a565b60405163fc57d4df60e01b81526001600160a01b038481166004830152919091169063fc57d4df90602401602060405180830381865afa158015610514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105389190612671565b8352604051633af9e66960e01b81526001600160a01b038681166004830152831690633af9e66990602401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190612671565b604084018190528351670de0b6b3a7640000916105c0916126d5565b6105ca919061270a565b60608401526105d985856108ca565b836101000181815250506000856001600160a01b031663a7e269a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061268a565b9050816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab919061268a565b60405163fc57d4df60e01b81526001600160a01b038381166004830152919091169063fc57d4df90602401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190612671565b60208501526040516305eff7ef60e21b81526001600160a01b0387811660048301528216906317bfdfbc90602401602060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107869190612671565b608085018190526020850151670de0b6b3a7640000916107a5916126d5565b6107af919061270a565b60a0850181905260608501516107c5919061271e565b60e08501526060840151156107ff57606084015160a08501516107f090670de0b6b3a76400006126d5565b6107fa919061270a565b610802565b60005b610120850152835160e085015161082190670de0b6b3a76400006126d5565b61082b919061270a565b60c085015250604051638e8f294b60e01b81526001600160a01b03838116600483015260009190831690638e8f294b906024016040805180830381865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e9190612735565b61014086018190526101208601519092506108ba91508261271e565b6101608501525091949350505050565b60006108d883836000611ea1565b9392505050565b600054604051637a73083360e11b81526001600160a01b038381166004830152606092839283928392839283928392620100009004169063f4e6106690602401600060405180830381865afa15801561093c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096491908101906127ae565b965086516001600160401b0381111561097f5761097f612768565b6040519080825280602002602001820160405280156109a8578160200160208202803683370190505b50955086516001600160401b038111156109c4576109c4612768565b6040519080825280602002602001820160405280156109f757816020015b60608152602001906001900390816109e25790505b50935086516001600160401b03811115610a1357610a13612768565b604051908082528060200260200182016040528015610a4657816020015b6060815260200190600190039081610a315790505b50925086516001600160401b03811115610a6257610a62612768565b604051908082528060200260200182016040528015610a8b578160200160208202803683370190505b50915086516001600160401b03811115610aa757610aa7612768565b604051908082528060200260200182016040528015610ad0578160200160208202803683370190505b50905086516001600160401b03811115610aec57610aec612768565b604051908082528060200260200182016040528015610b15578160200160208202803683370190505b50945060005b8751811015610f51576000888281518110610b3857610b3861285f565b602002602001015190506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba6919061268a565b905080898481518110610bbb57610bbb61285f565b60200260200101906001600160a01b031690816001600160a01b0316815250506000819050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c469190810190612875565b888581518110610c5857610c5861285f565b6020026020010181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ca1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc99190810190612875565b878581518110610cdb57610cdb61285f565b6020026020010181905250826001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d489190612671565b868581518110610d5a57610d5a61285f565b602002602001018181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc891906128ff565b858581518110610dda57610dda61285f565b602002602001019060ff16908160ff1681525050826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e50919061268a565b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb1919061268a565b60405163fc57d4df60e01b81526001600160a01b038581166004830152919091169063fc57d4df90602401602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190612671565b898581518110610f2f57610f2f61285f565b6020026020010181815250505050508080610f4990612922565b915050610b1b565b50919395979092949650565b600080846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061268a565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611028919061268a565b60405163fc57d4df60e01b81526001600160a01b03888116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612671565b60405163fc57d4df60e01b81526001600160a01b038a8116600483015291925060009184169063fc57d4df90602401602060405180830381865afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190612671565b9050600061111e83670de0b6b3a76400006126d5565b8289611132670de0b6b3a76400008b61271e565b61113c91906126d5565b61114691906126d5565b611150919061270a565b60405163cfcd4c0760e01b8152600481018290529091506001600160a01b038a169063cfcd4c0790602401602060405180830381865afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190612671565b9a9950505050505050505050565b60008415806111e15750670de0b6b3a76400008211155b156111ee575060006114dc565b6000846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611252919061268a565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b8919061268a565b60405163fc57d4df60e01b81526001600160a01b03888116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015611304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113289190612671565b90506000670de0b6b3a764000061133f878b6126d5565b611349919061270a565b90506000611357828c6126d5565b90506000670de0b6b3a764000061136e85846126d5565b611378919061270a565b90506000846113878d8661271e565b61139191906126d5565b905060008060029054906101000a90046001600160a01b03166001600160a01b031663a385fb966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b9190612671565b8b6001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146d9190612671565b61147791906126d5565b90506000670de0b6b3a764000061148e84846126d5565b611498919061270a565b905060006114a6828661293d565b90508e6114b3898361297c565b6114c590670de0b6b3a76400006129aa565b6114cf919061297c565b9a50505050505050505050505b95945050505050565b6060836001600160401b038111156114ff576114ff612768565b60405190808252806020026020018201604052801561153857816020015b611525612090565b81526020019060019003908161151d5790505b50905060005b848110156115be5761158e86868381811061155b5761155b61285f565b905060200201602081019061157091906121c2565b8585848181106115825761158261285f565b90506020020135610396565b8282815181106115a0576115a061285f565b602002602001018190525080806115b690612922565b91505061153e565b50949350505050565b6060806060806060806060806060600060029054906101000a90046001600160a01b03166001600160a01b031663a339d7516040518163ffffffff1660e01b8152600401600060405180830381865afa158015611628573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261165091908101906127ae565b985088516001600160401b0381111561166b5761166b612768565b604051908082528060200260200182016040528015611694578160200160208202803683370190505b50975088516001600160401b038111156116b0576116b0612768565b6040519080825280602002602001820160405280156116d9578160200160208202803683370190505b50965088516001600160401b038111156116f5576116f5612768565b60405190808252806020026020018201604052801561171e578160200160208202803683370190505b50955088516001600160401b0381111561173a5761173a612768565b60405190808252806020026020018201604052801561176d57816020015b60608152602001906001900390816117585790505b50945088516001600160401b0381111561178957611789612768565b6040519080825280602002602001820160405280156117bc57816020015b60608152602001906001900390816117a75790505b50935088516001600160401b038111156117d8576117d8612768565b604051908082528060200260200182016040528015611801578160200160208202803683370190505b50915088516001600160401b0381111561181d5761181d612768565b604051908082528060200260200182016040528015611846578160200160208202803683370190505b50925088516001600160401b0381111561186257611862612768565b60405190808252806020026020018201604052801561188b578160200160208202803683370190505b50905060005b8951811015611da65760008a82815181106118ae576118ae61285f565b60200260200101519050806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191a919061268a565b8a838151811061192c5761192c61285f565b60200260200101906001600160a01b031690816001600160a01b03168152505089828151811061195e5761195e61285f565b60200260200101516001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c7919061268a565b60405163fc57d4df60e01b81526001600160a01b038381166004830152919091169063fc57d4df90602401602060405180830381865afa158015611a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a339190612671565b888381518110611a4557611a4561285f565b602002602001018181525050806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab3919061268a565b898381518110611ac557611ac561285f565b60200260200101906001600160a01b031690816001600160a01b0316815250506000898381518110611af957611af961285f565b60200260200101519050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611b41573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b699190810190612875565b888481518110611b7b57611b7b61285f565b6020026020010181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bec9190810190612875565b878481518110611bfe57611bfe61285f565b6020026020010181905250806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6b91906128ff565b868481518110611c7d57611c7d61285f565b602002602001019060ff16908160ff1681525050816001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf39190612671565b858481518110611d0557611d0561285f565b602002602001018181525050816001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d739190612671565b848481518110611d8557611d8561285f565b60200260200101818152505050508080611d9e90612922565b915050611891565b50909192939495969798565b600054610100900460ff1615808015611dd25750600054600160ff909116105b80611dec5750303b158015611dec575060005460ff166001145b611e115760405162461bcd60e51b8152600401611e0890612a2f565b60405180910390fd5b6000805460ff191660011790558015611e34576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611e9d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b6000611fe28383866001600160a01b031663a833cb7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0a9190612671565b611f1491906126bd565b866001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f76919061268a565b876001600160a01b031663a7e269a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd8919061268a565b6101598988610207565b949350505050565b600054600290610100900460ff1615801561200c575060005460ff8083169116105b6120285760405162461bcd60e51b8152600401611e0890612a2f565b6000805461010060ff841661ffff19909216821717610100600160b01b03191661ff0019620100006001600160a01b0387160216179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e94565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461210657600080fd5b50565b6000806040838503121561211c57600080fd5b8235612127816120f1565b946020939093013593505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152506101408082015181840152506101608082015181840152505050565b61018081016103908284612135565b6000602082840312156121d457600080fd5b81356108d8816120f1565b600081518084526020808501945080840160005b838110156122185781516001600160a01b0316875295820195908201906001016121f3565b509495945050505050565b600081518084526020808501945080840160005b8381101561221857815187529582019590820190600101612237565b60005b8381101561226e578181015183820152602001612256565b8381111561227d576000848401525b50505050565b6000815180845260208085019450848260051b860182860160005b858110156122e0578383038952815180518085526122c181888701898501612253565b99860199601f01601f191693909301850192509084019060010161229e565b5090979650505050505050565b600081518084526020808501945080840160005b8381101561221857815160ff1687529582019590820190600101612301565b60e08152600061233360e083018a6121df565b8281036020840152612345818a6121df565b905082810360408401526123598189612223565b9050828103606084015261236d8188612283565b905082810360808401526123818187612283565b905082810360a08401526123958186612223565b905082810360c08401526111bc81856122ed565b600080600080608085870312156123bf57600080fd5b84356123ca816120f1565b935060208501356123da816120f1565b93969395505050506040820135916060013590565b600080600080600060a0868803121561240757600080fd5b85359450602086013593506040860135612420816120f1565b92506060860135612430816120f1565b949793965091946080013592915050565b60008083601f84011261245357600080fd5b5081356001600160401b0381111561246a57600080fd5b6020830191508360208260051b850101111561248557600080fd5b9250929050565b600080600080604085870312156124a257600080fd5b84356001600160401b03808211156124b957600080fd5b6124c588838901612441565b909650945060208701359150808211156124de57600080fd5b506124eb87828801612441565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561253a57612526838551612135565b928401926101809290920191600101612513565b50909695505050505050565b600061012080835261255a8184018d6121df565b9050602083820381850152818c518084528284019150828e01935060005b8181101561259d5784516001600160a01b031683529383019391830191600101612578565b505084810360408601526125b1818d6121df565b9250505082810360608401526125c7818a612223565b905082810360808401526125db8189612283565b905082810360a08401526125ef8188612283565b905082810360c084015261260381876122ed565b905082810360e08401526126178186612223565b905082810361010084015261262c8185612223565b9c9b505050505050505050505050565b60008060006060848603121561265157600080fd5b833561265c816120f1565b95602085013595506040909401359392505050565b60006020828403121561268357600080fd5b5051919050565b60006020828403121561269c57600080fd5b81516108d8816120f1565b634e487b7160e01b600052601160045260246000fd5b600082198211156126d0576126d06126a7565b500190565b60008160001904831182151516156126ef576126ef6126a7565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612719576127196126f4565b500490565b600082821015612730576127306126a7565b500390565b6000806040838503121561274857600080fd5b8251801515811461275857600080fd5b6020939093015192949293505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156127a6576127a6612768565b604052919050565b600060208083850312156127c157600080fd5b82516001600160401b03808211156127d857600080fd5b818501915085601f8301126127ec57600080fd5b8151818111156127fe576127fe612768565b8060051b915061280f84830161277e565b818152918301840191848101908884111561282957600080fd5b938501935b838510156128535784519250612843836120f1565b828252938501939085019061282e565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561288757600080fd5b81516001600160401b038082111561289e57600080fd5b818401915084601f8301126128b257600080fd5b8151818111156128c4576128c4612768565b6128d7601f8201601f191660200161277e565b91508082528560208285010111156128ee57600080fd5b6115be816020840160208601612253565b60006020828403121561291157600080fd5b815160ff811681146108d857600080fd5b6000600019821415612936576129366126a7565b5060010190565b60008083128015600160ff1b85018412161561295b5761295b6126a7565b6001600160ff1b0384018313811615612976576129766126a7565b50500390565b60008261298b5761298b6126f4565b600160ff1b8214600019841416156129a5576129a56126a7565b500590565b60006001600160ff1b03818413828413808216868404861116156129d0576129d06126a7565b600160ff1b60008712828116878305891216156129ef576129ef6126a7565b60008712925087820587128484161615612a0b57612a0b6126a7565b87850587128184161615612a2157612a216126a7565b505050929093029392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "490:8605:148:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638f4b1166116100715780638f4b11661461015e578063c03497c01461017e578063c45a01551461019b578063c4d66de8146101cc578063cc3e7804146101e1578063f7e7d1fd146101f457600080fd5b8063012db95c146100b95780631327d7fb146100df5780631a610317146100ff57806360ff773e146101125780636bbdc780146101385780638de1624d1461014b575b600080fd5b6100cc6100c7366004612109565b610207565b6040519081526020015b60405180910390f35b6100f26100ed366004612109565b610396565b6040516100d691906121b3565b6100cc61010d366004612109565b6108ca565b6101256101203660046121c2565b6108df565b6040516100d69796959493929190612320565b6100cc6101463660046123a9565b610f5d565b6100cc6101593660046123ef565b6111ca565b61017161016c36600461248c565b6114e5565b6040516100d691906124f7565b6101866115c7565b6040516100d699989796959493929190612546565b6000546101b4906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100d6565b6101df6101da3660046121c2565b611db2565b005b6100cc6101ef36600461263c565b611ea1565b6101df6102023660046121c2565b611fea565b600080836001600160a01b031663a833cb7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c9190612671565b90508015801561027a575082155b15610289576000915050610390565b6000846001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ed919061268a565b604051633af9e66960e01b81526001600160a01b0387811660048301529190911690633af9e66990602401602060405180830381865afa158015610335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103599190612671565b905061036584836126bd565b61036f85836126bd565b61038190670de0b6b3a76400006126d5565b61038b919061270a565b925050505b92915050565b61039e612090565b6000836001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610402919061268a565b90506000846001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610444573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610468919061268a565b9050806001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc919061268a565b60405163fc57d4df60e01b81526001600160a01b038481166004830152919091169063fc57d4df90602401602060405180830381865afa158015610514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105389190612671565b8352604051633af9e66960e01b81526001600160a01b038681166004830152831690633af9e66990602401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190612671565b604084018190528351670de0b6b3a7640000916105c0916126d5565b6105ca919061270a565b60608401526105d985856108ca565b836101000181815250506000856001600160a01b031663a7e269a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061268a565b9050816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab919061268a565b60405163fc57d4df60e01b81526001600160a01b038381166004830152919091169063fc57d4df90602401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190612671565b60208501526040516305eff7ef60e21b81526001600160a01b0387811660048301528216906317bfdfbc90602401602060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107869190612671565b608085018190526020850151670de0b6b3a7640000916107a5916126d5565b6107af919061270a565b60a0850181905260608501516107c5919061271e565b60e08501526060840151156107ff57606084015160a08501516107f090670de0b6b3a76400006126d5565b6107fa919061270a565b610802565b60005b610120850152835160e085015161082190670de0b6b3a76400006126d5565b61082b919061270a565b60c085015250604051638e8f294b60e01b81526001600160a01b03838116600483015260009190831690638e8f294b906024016040805180830381865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e9190612735565b61014086018190526101208601519092506108ba91508261271e565b6101608501525091949350505050565b60006108d883836000611ea1565b9392505050565b600054604051637a73083360e11b81526001600160a01b038381166004830152606092839283928392839283928392620100009004169063f4e6106690602401600060405180830381865afa15801561093c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096491908101906127ae565b965086516001600160401b0381111561097f5761097f612768565b6040519080825280602002602001820160405280156109a8578160200160208202803683370190505b50955086516001600160401b038111156109c4576109c4612768565b6040519080825280602002602001820160405280156109f757816020015b60608152602001906001900390816109e25790505b50935086516001600160401b03811115610a1357610a13612768565b604051908082528060200260200182016040528015610a4657816020015b6060815260200190600190039081610a315790505b50925086516001600160401b03811115610a6257610a62612768565b604051908082528060200260200182016040528015610a8b578160200160208202803683370190505b50915086516001600160401b03811115610aa757610aa7612768565b604051908082528060200260200182016040528015610ad0578160200160208202803683370190505b50905086516001600160401b03811115610aec57610aec612768565b604051908082528060200260200182016040528015610b15578160200160208202803683370190505b50945060005b8751811015610f51576000888281518110610b3857610b3861285f565b602002602001015190506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba6919061268a565b905080898481518110610bbb57610bbb61285f565b60200260200101906001600160a01b031690816001600160a01b0316815250506000819050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c469190810190612875565b888581518110610c5857610c5861285f565b6020026020010181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ca1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc99190810190612875565b878581518110610cdb57610cdb61285f565b6020026020010181905250826001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d489190612671565b868581518110610d5a57610d5a61285f565b602002602001018181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc891906128ff565b858581518110610dda57610dda61285f565b602002602001019060ff16908160ff1681525050826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e50919061268a565b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb1919061268a565b60405163fc57d4df60e01b81526001600160a01b038581166004830152919091169063fc57d4df90602401602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d9190612671565b898581518110610f2f57610f2f61285f565b6020026020010181815250505050508080610f4990612922565b915050610b1b565b50919395979092949650565b600080846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061268a565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611028919061268a565b60405163fc57d4df60e01b81526001600160a01b03888116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612671565b60405163fc57d4df60e01b81526001600160a01b038a8116600483015291925060009184169063fc57d4df90602401602060405180830381865afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190612671565b9050600061111e83670de0b6b3a76400006126d5565b8289611132670de0b6b3a76400008b61271e565b61113c91906126d5565b61114691906126d5565b611150919061270a565b60405163cfcd4c0760e01b8152600481018290529091506001600160a01b038a169063cfcd4c0790602401602060405180830381865afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190612671565b9a9950505050505050505050565b60008415806111e15750670de0b6b3a76400008211155b156111ee575060006114dc565b6000846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611252919061268a565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b8919061268a565b60405163fc57d4df60e01b81526001600160a01b03888116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015611304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113289190612671565b90506000670de0b6b3a764000061133f878b6126d5565b611349919061270a565b90506000611357828c6126d5565b90506000670de0b6b3a764000061136e85846126d5565b611378919061270a565b90506000846113878d8661271e565b61139191906126d5565b905060008060029054906101000a90046001600160a01b03166001600160a01b031663a385fb966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b9190612671565b8b6001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146d9190612671565b61147791906126d5565b90506000670de0b6b3a764000061148e84846126d5565b611498919061270a565b905060006114a6828661293d565b90508e6114b3898361297c565b6114c590670de0b6b3a76400006129aa565b6114cf919061297c565b9a50505050505050505050505b95945050505050565b6060836001600160401b038111156114ff576114ff612768565b60405190808252806020026020018201604052801561153857816020015b611525612090565b81526020019060019003908161151d5790505b50905060005b848110156115be5761158e86868381811061155b5761155b61285f565b905060200201602081019061157091906121c2565b8585848181106115825761158261285f565b90506020020135610396565b8282815181106115a0576115a061285f565b602002602001018190525080806115b690612922565b91505061153e565b50949350505050565b6060806060806060806060806060600060029054906101000a90046001600160a01b03166001600160a01b031663a339d7516040518163ffffffff1660e01b8152600401600060405180830381865afa158015611628573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261165091908101906127ae565b985088516001600160401b0381111561166b5761166b612768565b604051908082528060200260200182016040528015611694578160200160208202803683370190505b50975088516001600160401b038111156116b0576116b0612768565b6040519080825280602002602001820160405280156116d9578160200160208202803683370190505b50965088516001600160401b038111156116f5576116f5612768565b60405190808252806020026020018201604052801561171e578160200160208202803683370190505b50955088516001600160401b0381111561173a5761173a612768565b60405190808252806020026020018201604052801561176d57816020015b60608152602001906001900390816117585790505b50945088516001600160401b0381111561178957611789612768565b6040519080825280602002602001820160405280156117bc57816020015b60608152602001906001900390816117a75790505b50935088516001600160401b038111156117d8576117d8612768565b604051908082528060200260200182016040528015611801578160200160208202803683370190505b50915088516001600160401b0381111561181d5761181d612768565b604051908082528060200260200182016040528015611846578160200160208202803683370190505b50925088516001600160401b0381111561186257611862612768565b60405190808252806020026020018201604052801561188b578160200160208202803683370190505b50905060005b8951811015611da65760008a82815181106118ae576118ae61285f565b60200260200101519050806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191a919061268a565b8a838151811061192c5761192c61285f565b60200260200101906001600160a01b031690816001600160a01b03168152505089828151811061195e5761195e61285f565b60200260200101516001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c7919061268a565b60405163fc57d4df60e01b81526001600160a01b038381166004830152919091169063fc57d4df90602401602060405180830381865afa158015611a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a339190612671565b888381518110611a4557611a4561285f565b602002602001018181525050806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab3919061268a565b898381518110611ac557611ac561285f565b60200260200101906001600160a01b031690816001600160a01b0316815250506000898381518110611af957611af961285f565b60200260200101519050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611b41573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b699190810190612875565b888481518110611b7b57611b7b61285f565b6020026020010181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bec9190810190612875565b878481518110611bfe57611bfe61285f565b6020026020010181905250806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6b91906128ff565b868481518110611c7d57611c7d61285f565b602002602001019060ff16908160ff1681525050816001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf39190612671565b858481518110611d0557611d0561285f565b602002602001018181525050816001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d739190612671565b848481518110611d8557611d8561285f565b60200260200101818152505050508080611d9e90612922565b915050611891565b50909192939495969798565b600054610100900460ff1615808015611dd25750600054600160ff909116105b80611dec5750303b158015611dec575060005460ff166001145b611e115760405162461bcd60e51b8152600401611e0890612a2f565b60405180910390fd5b6000805460ff191660011790558015611e34576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611e9d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b6000611fe28383866001600160a01b031663a833cb7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0a9190612671565b611f1491906126bd565b866001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f76919061268a565b876001600160a01b031663a7e269a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd8919061268a565b6101598988610207565b949350505050565b600054600290610100900460ff1615801561200c575060005460ff8083169116105b6120285760405162461bcd60e51b8152600401611e0890612a2f565b6000805461010060ff841661ffff19909216821717610100600160b01b03191661ff0019620100006001600160a01b0387160216179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611e94565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461210657600080fd5b50565b6000806040838503121561211c57600080fd5b8235612127816120f1565b946020939093013593505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152506101408082015181840152506101608082015181840152505050565b61018081016103908284612135565b6000602082840312156121d457600080fd5b81356108d8816120f1565b600081518084526020808501945080840160005b838110156122185781516001600160a01b0316875295820195908201906001016121f3565b509495945050505050565b600081518084526020808501945080840160005b8381101561221857815187529582019590820190600101612237565b60005b8381101561226e578181015183820152602001612256565b8381111561227d576000848401525b50505050565b6000815180845260208085019450848260051b860182860160005b858110156122e0578383038952815180518085526122c181888701898501612253565b99860199601f01601f191693909301850192509084019060010161229e565b5090979650505050505050565b600081518084526020808501945080840160005b8381101561221857815160ff1687529582019590820190600101612301565b60e08152600061233360e083018a6121df565b8281036020840152612345818a6121df565b905082810360408401526123598189612223565b9050828103606084015261236d8188612283565b905082810360808401526123818187612283565b905082810360a08401526123958186612223565b905082810360c08401526111bc81856122ed565b600080600080608085870312156123bf57600080fd5b84356123ca816120f1565b935060208501356123da816120f1565b93969395505050506040820135916060013590565b600080600080600060a0868803121561240757600080fd5b85359450602086013593506040860135612420816120f1565b92506060860135612430816120f1565b949793965091946080013592915050565b60008083601f84011261245357600080fd5b5081356001600160401b0381111561246a57600080fd5b6020830191508360208260051b850101111561248557600080fd5b9250929050565b600080600080604085870312156124a257600080fd5b84356001600160401b03808211156124b957600080fd5b6124c588838901612441565b909650945060208701359150808211156124de57600080fd5b506124eb87828801612441565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561253a57612526838551612135565b928401926101809290920191600101612513565b50909695505050505050565b600061012080835261255a8184018d6121df565b9050602083820381850152818c518084528284019150828e01935060005b8181101561259d5784516001600160a01b031683529383019391830191600101612578565b505084810360408601526125b1818d6121df565b9250505082810360608401526125c7818a612223565b905082810360808401526125db8189612283565b905082810360a08401526125ef8188612283565b905082810360c084015261260381876122ed565b905082810360e08401526126178186612223565b905082810361010084015261262c8185612223565b9c9b505050505050505050505050565b60008060006060848603121561265157600080fd5b833561265c816120f1565b95602085013595506040909401359392505050565b60006020828403121561268357600080fd5b5051919050565b60006020828403121561269c57600080fd5b81516108d8816120f1565b634e487b7160e01b600052601160045260246000fd5b600082198211156126d0576126d06126a7565b500190565b60008160001904831182151516156126ef576126ef6126a7565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612719576127196126f4565b500490565b600082821015612730576127306126a7565b500390565b6000806040838503121561274857600080fd5b8251801515811461275857600080fd5b6020939093015192949293505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156127a6576127a6612768565b604052919050565b600060208083850312156127c157600080fd5b82516001600160401b03808211156127d857600080fd5b818501915085601f8301126127ec57600080fd5b8151818111156127fe576127fe612768565b8060051b915061280f84830161277e565b818152918301840191848101908884111561282957600080fd5b938501935b838510156128535784519250612843836120f1565b828252938501939085019061282e565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561288757600080fd5b81516001600160401b038082111561289e57600080fd5b818401915084601f8301126128b257600080fd5b8151818111156128c4576128c4612768565b6128d7601f8201601f191660200161277e565b91508082528560208285010111156128ee57600080fd5b6115be816020840160208601612253565b60006020828403121561291157600080fd5b815160ff811681146108d857600080fd5b6000600019821415612936576129366126a7565b5060010190565b60008083128015600160ff1b85018412161561295b5761295b6126a7565b6001600160ff1b0384018313811615612976576129766126a7565b50500390565b60008261298b5761298b6126f4565b600160ff1b8214600019841416156129a5576129a56126a7565b500590565b60006001600160ff1b03818413828413808216868404861116156129d0576129d06126a7565b600160ff1b60008712828116878305891216156129ef576129ef6126a7565b60008712925087820587128484161615612a0b57612a0b6126a7565b87850587128184161615612a2157612a216126a7565b505050929093029392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "490:8605:148:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6493:411;;;;;;:::i;:::-;;:::i;:::-;;;675:25:486;;;663:2;648:18;6493:411:148;;;;;;;;7810:1283;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7278:168::-;;;;;;:::i;:::-;;:::i;3533:1219::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;2678:667::-;;;;;;:::i;:::-;;:::i;4828:1319::-;;;;;;:::i;:::-;;:::i;6151:338::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1021:1477::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;541:38::-;;;;;;;;-1:-1:-1;;;;;541:38:148;;;;;;-1:-1:-1;;;;;11890:32:486;;;11872:51;;11860:2;11845:18;541:38:148;11693:236:486;584:104:148;;;;;;:::i;:::-;;:::i;:::-;;6908:366;;;;;;:::i;:::-;;:::i;692:111::-;;;;;;:::i;:::-;;:::i;6493:411::-;6593:7;6608:20;6631:3;-1:-1:-1;;;;;6631:19:148;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6608:44;-1:-1:-1;6662:17:148;;:36;;;;-1:-1:-1;6683:15:148;;6662:36;6658:50;;;6707:1;6700:8;;;;;6658:50;6715:33;6751:3;-1:-1:-1;;;;;6751:20:148;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;-1:-1:-1;;;6751:56:148;;-1:-1:-1;;;;;11890:32:486;;;6751:56:148;;;11872:51:486;6751:42:148;;;;;;;11845:18:486;;6751:56:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6715:92;-1:-1:-1;6873:25:148;6888:10;6873:12;:25;:::i;:::-;6822:38;6850:10;6822:25;:38;:::i;:::-;6821:47;;6864:4;6821:47;:::i;:::-;6820:79;;;;:::i;:::-;6813:86;;;;6493:411;;;;;:::o;7810:1283::-;7896:24;;:::i;:::-;7928;7955:3;-1:-1:-1;;;;;7955:20:148;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7928:49;;7983:21;8007:3;-1:-1:-1;;;;;8007:8:148;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7983:34;;8051:4;-1:-1:-1;;;;;8051:11:148;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;-1:-1:-1;;;8051:50:148;;-1:-1:-1;;;;;11890:32:486;;;8051:50:148;;;11872:51:486;8051:32:148;;;;;;;11845:18:486;;8051:50:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8023:78;;8143:50;;-1:-1:-1;;;8143:50:148;;-1:-1:-1;;;;;11890:32:486;;;8143:50:148;;;11872:51:486;8143:36:148;;;;;11845:18:486;;8143:50:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8115:25;;;:78;;;8223:25;;8280:4;;8223:53;;;:::i;:::-;8222:62;;;;:::i;:::-;8201:18;;;:83;8310:36;8331:3;8336:9;8310:20;:36::i;:::-;8292:4;:15;;:54;;;;;8367:20;8390:3;-1:-1:-1;;;;;8390:16:148;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8367:41;;8442:4;-1:-1:-1;;;;;8442:11:148;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;-1:-1:-1;;;8442:46:148;;-1:-1:-1;;;;;11890:32:486;;;8442:46:148;;;11872:51:486;8442:32:148;;;;;;;11845:18:486;;8442:46:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8416:23;;;:72;8514:47;;-1:-1:-1;;;8514:47:148;;-1:-1:-1;;;;;11890:32:486;;;8514:47:148;;;11872:51:486;8514:33:148;;;;;11845:18:486;;8514:47:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8496:15;;;:65;;;8587:23;;;;8632:4;;8587:41;;;:::i;:::-;8586:50;;;;:::i;:::-;8569:14;;;:67;;;8663:18;;;;:35;;8569:67;8663:35;:::i;:::-;8644:16;;;:54;8723:18;;;;:23;:74;;8779:18;;;;8754:14;;;;:21;;8771:4;8754:21;:::i;:::-;8753:44;;;;:::i;:::-;8723:74;;;8749:1;8723:74;8706:14;;;:91;8853:25;;8826:16;;;;:23;;8845:4;8826:23;:::i;:::-;8825:53;;;;:::i;:::-;8805:17;;;:73;-1:-1:-1;8930:39:148;;-1:-1:-1;;;8930:39:148;;-1:-1:-1;;;;;11890:32:486;;;8930:39:148;;;11872:51:486;8902:24:148;;8930:12;;;;;;11845:18:486;;8930:39:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8977:25;;;:44;;;9068:14;;;;8899:70;;-1:-1:-1;9049:33:148;;-1:-1:-1;8899:70:148;9049:33;:::i;:::-;9029:17;;;:53;-1:-1:-1;9029:4:148;;7810:1283;-1:-1:-1;;;;7810:1283:148:o;7278:168::-;7369:6;7390:51;7423:3;7428:9;7439:1;7390:32;:51::i;:::-;7383:58;7278:168;-1:-1:-1;;;7278:168:148:o;3533:1219::-;3888:7;;:59;;-1:-1:-1;;;3888:59:148;;-1:-1:-1;;;;;11890:32:486;;;3888:59:148;;;11872:51:486;3640:24:148;;;;;;;;;;;;;;3888:7;;;;;:40;;11845:18:486;;3888:59:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3888:59:148;;;;;;;;;;;;:::i;:::-;3878:69;;3981:7;:14;-1:-1:-1;;;;;3967:29:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3967:29:148;;3953:43;;4023:7;:14;-1:-1:-1;;;;;4010:28:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4002:36;;4067:7;:14;-1:-1:-1;;;;;4054:28:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4044:38;;4110:7;:14;-1:-1:-1;;;;;4096:29:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4096:29:148;;4088:37;;4154:7;:14;-1:-1:-1;;;;;4142:27:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4142:27:148;;4131:38;;4209:7;:14;-1:-1:-1;;;;;4195:29:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4195:29:148;;4175:49;;4235:9;4230:518;4254:7;:14;4250:1;:18;4230:518;;;4283:14;4308:7;4316:1;4308:10;;;;;;;;:::i;:::-;;;;;;;4283:36;;4327:25;4355:6;-1:-1:-1;;;;;4355:17:148;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4327:47;;4399:17;4382:11;4394:1;4382:14;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;4382:34:148;;;-1:-1:-1;;;;;4382:34:148;;;;;4424:27;4471:17;4424:65;;4508:10;-1:-1:-1;;;;;4508:15:148;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4508:17:148;;;;;;;;;;;;:::i;:::-;4497:5;4503:1;4497:8;;;;;;;;:::i;:::-;;;;;;:28;;;;4546:10;-1:-1:-1;;;;;4546:17:148;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4546:19:148;;;;;;;;;;;;:::i;:::-;4533:7;4541:1;4533:10;;;;;;;;:::i;:::-;;;;;;:32;;;;4584:6;-1:-1:-1;;;;;4584:25:148;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4573:5;4579:1;4573:8;;;;;;;;:::i;:::-;;;;;;:38;;;;;4633:10;-1:-1:-1;;;;;4633:19:148;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4619:8;4628:1;4619:11;;;;;;;;:::i;:::-;;;;;;:35;;;;;;;;;;;4685:6;-1:-1:-1;;;;;4685:18:148;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4685:27:148;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;-1:-1:-1;;;4685:56:148;;-1:-1:-1;;;;;11890:32:486;;;4685:56:148;;;11872:51:486;4685:48:148;;;;;;;11845:18:486;;4685:56:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4662:17;4680:1;4662:20;;;;;;;;:::i;:::-;;;;;;:79;;;;;4275:473;;;4270:3;;;;;:::i;:::-;;;;4230:518;;;;3533:1219;;;;;;;;;:::o;2678:667::-;2854:7;2869:21;2910:13;-1:-1:-1;;;;;2910:25:148;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2869:69;;2944:22;2969:4;-1:-1:-1;;;;;2969:11:148;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3015:40;;-1:-1:-1;;;3015:40:148;;-1:-1:-1;;;;;11890:32:486;;;3015:40:148;;;11872:51:486;2944:38:148;;-1:-1:-1;2988:24:148;;3015:25;;;;;11845:18:486;;3015:40:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3092:44;;-1:-1:-1;;;3092:44:148;;-1:-1:-1;;;;;11890:32:486;;;3092:44:148;;;11872:51:486;2988:67:148;;-1:-1:-1;3061:28:148;;3092:25;;;;;11845:18:486;;3092:44:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3061:75;-1:-1:-1;3143:20:148;3246:23;:16;3265:4;3246:23;:::i;:::-;3215:20;3199:13;3168:27;3191:4;3168:20;:27;:::i;:::-;3167:45;;;;:::i;:::-;:68;;;;:::i;:::-;3166:104;;;;:::i;:::-;3283:57;;-1:-1:-1;;;3283:57:148;;;;;675:25:486;;;3143:127:148;;-1:-1:-1;;;;;;3283:43:148;;;;;648:18:486;;3283:57:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3276:64;2678:667;-1:-1:-1;;;;;;;;;;2678:667:148:o;4828:1319::-;5015:13;5040:18;;;:50;;;5086:4;5062:20;:28;;5040:50;5036:64;;;-1:-1:-1;5099:1:148;5092:8;;5036:64;5107:21;5148:17;-1:-1:-1;;;;;5148:29:148;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5107:73;;5186:22;5211:4;-1:-1:-1;;;;;5211:11:148;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5337:44;;-1:-1:-1;;;5337:44:148;;-1:-1:-1;;;;;11890:32:486;;;5337:44:148;;;11872:51:486;5186:38:148;;-1:-1:-1;5306:28:148;;5337:25;;;;;11845:18:486;;5337:44:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5306:75;-1:-1:-1;5451:23:148;5518:4;5478:36;5494:20;5478:13;:36;:::i;:::-;5477:45;;;;:::i;:::-;5451:71;-1:-1:-1;5528:34:148;5565:28;5451:71;5565:10;:28;:::i;:::-;5528:65;-1:-1:-1;5599:23:148;5686:4;5633:49;5662:20;5528:65;5633:49;:::i;:::-;5632:58;;;;:::i;:::-;5599:92;-1:-1:-1;5698:27:148;5764:20;5729:31;5747:13;5729:15;:31;:::i;:::-;5728:56;;;;:::i;:::-;5698:86;;5790:19;5849:7;;;;;;;;;-1:-1:-1;;;;;5849:7:148;-1:-1:-1;;;;;5849:21:148;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5812:13;-1:-1:-1;;;;;5812:32:148;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;:::-;5790:82;-1:-1:-1;5878:32:148;5958:4;5921:33;5935:19;5790:82;5921:33;:::i;:::-;5920:42;;;;:::i;:::-;5878:85;-1:-1:-1;5970:25:148;5998:44;5878:85;5998:16;:44;:::i;:::-;5970:72;-1:-1:-1;6128:13:148;6060:49;6088:20;5970:72;6060:49;:::i;:::-;6059:58;;6113:4;6059:58;:::i;:::-;6058:84;;;;:::i;:::-;6049:93;;5030:1117;;;;;;;;;;4828:1319;;;;;;;;:::o;6151:338::-;6281:27;6345:9;-1:-1:-1;;;;;6326:36:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6318:44;;6373:9;6368:117;6388:20;;;6368:117;;;6434:44;6450:9;;6460:1;6450:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6464:10;;6475:1;6464:13;;;;;;;:::i;:::-;;;;;;;6434:15;:44::i;:::-;6423:5;6429:1;6423:8;;;;;;;;:::i;:::-;;;;;;:55;;;;6410:3;;;;;:::i;:::-;;;;6368:117;;;;6151:338;;;;;;:::o;1021:1477::-;1095:24;1127:38;1173:28;1209:33;1250:21;1279:23;1310;1341:40;1389:30;1444:7;;;;;;;;;-1:-1:-1;;;;;1444:7:148;-1:-1:-1;;;;;1444:39:148;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1444:41:148;;;;;;;;;;;;:::i;:::-;1434:51;;1529:7;:14;-1:-1:-1;;;;;1506:38:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1506:38:148;;1491:53;;1578:7;:14;-1:-1:-1;;;;;1564:29:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1564:29:148;;1550:43;;1632:7;:14;-1:-1:-1;;;;;1618:29:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1618:29:148;;1599:48;;1674:7;:14;-1:-1:-1;;;;;1661:28:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1653:36;;1718:7;:14;-1:-1:-1;;;;;1705:28:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1695:38;;1779:7;:14;-1:-1:-1;;;;;1765:29:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1765:29:148;;1739:55;;1823:7;:14;-1:-1:-1;;;;;1811:27:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1811:27:148;;1800:38;;1874:7;:14;-1:-1:-1;;;;;1860:29:148;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:29:148;;1844:45;;1900:9;1895:599;1919:7;:14;1915:1;:18;1895:599;;;1948:14;1973:7;1981:1;1973:10;;;;;;;;:::i;:::-;;;;;;;1948:36;;2010:6;-1:-1:-1;;;;;2010:18:148;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1992:12;2005:1;1992:15;;;;;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;1992:38:148;;;-1:-1:-1;;;;;1992:38:148;;;;;2076:12;2089:1;2076:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;2076:22:148;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2060:68;;-1:-1:-1;;;2060:68:148;;-1:-1:-1;;;;;11890:32:486;;;2060:68:148;;;11872:51:486;2060:60:148;;;;;;;11845:18:486;;2060:68:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2038:16;2055:1;2038:19;;;;;;;;:::i;:::-;;;;;;:90;;;;;2153:6;-1:-1:-1;;;;;2153:17:148;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2136:11;2148:1;2136:14;;;;;;;;:::i;:::-;;;;;;:36;-1:-1:-1;;;;;2136:36:148;;;-1:-1:-1;;;;;2136:36:148;;;;;2180:27;2227:11;2239:1;2227:14;;;;;;;;:::i;:::-;;;;;;;2180:62;;2261:10;-1:-1:-1;;;;;2261:15:148;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2261:17:148;;;;;;;;;;;;:::i;:::-;2250:5;2256:1;2250:8;;;;;;;;:::i;:::-;;;;;;:28;;;;2299:10;-1:-1:-1;;;;;2299:17:148;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2299:19:148;;;;;;;;;;;;:::i;:::-;2286:7;2294:1;2286:10;;;;;;;;:::i;:::-;;;;;;:32;;;;2340:10;-1:-1:-1;;;;;2340:19:148;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2326:8;2335:1;2326:11;;;;;;;;:::i;:::-;;;;;;:35;;;;;;;;;;;2398:6;-1:-1:-1;;;;;2398:33:148;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2369:23;2393:1;2369:26;;;;;;;;:::i;:::-;;;;;;:64;;;;;2460:6;-1:-1:-1;;;;;2460:25:148;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2441:13;2455:1;2441:16;;;;;;;;:::i;:::-;;;;;;:46;;;;;1940:554;;1935:3;;;;;:::i;:::-;;;;1895:599;;;;1021:1477;;;;;;;;;:::o;584:104::-;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;;;;;;:::i;:::-;;;;;;;;;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;665:7:148::1;:18:::0;;-1:-1:-1;;;;;;665:18:148::1;::::0;-1:-1:-1;;;;;665:18:148;::::1;;;::::0;;3636:99:439;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;20211:36:486;;3710:14:439;;20199:2:486;20184:18;3710:14:439;;;;;;;;3636:99;3258:483;584:104:148;:::o;6908:366::-;7047:6;7074:195;7093:9;7136:10;7112:3;-1:-1:-1;;;;;7112:19:148;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;;:::i;:::-;7156:3;-1:-1:-1;;;;;7156:20:148;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7188:3;-1:-1:-1;;;;;7188:16:148;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7216:45;7245:3;7250:10;7216:28;:45::i;7074:195::-;7061:208;6908:366;-1:-1:-1;;;;6908:366:148:o;692:111::-;4871:13:439;;771:1:148;;4871:13:439;;;;;4870:14;:40;;;;-1:-1:-1;4888:12:439;;:22;;;;:12;;:22;4870:40;4862:99;;;;-1:-1:-1;;;4862:99:439;;;;;;;:::i;:::-;4971:12;:22;;;;;;-1:-1:-1;;5003:20:439;;;;;;-1:-1:-1;;;;;;5044:21:439;-1:-1:-1;;780:18:148;-1:-1:-1;;;;;780:18:148;::::1;;5044:21:439::0;;;;;5080:20;;20211:36:486;;;5080:20:439;;20199:2:486;20184:18;5080:20:439;20059:194:486;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:148:486:-;-1:-1:-1;;;;;106:31:486;;96:42;;86:70;;152:1;149;142:12;86:70;14:148;:::o;167:357::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;376:9;363:23;395:48;437:5;395:48;:::i;:::-;462:5;514:2;499:18;;;;486:32;;-1:-1:-1;;;167:357:486:o;711:797::-;795:5;789:12;784:3;777:25;851:4;844:5;840:16;834:23;827:4;822:3;818:14;811:47;907:4;900:5;896:16;890:23;883:4;878:3;874:14;867:47;963:4;956:5;952:16;946:23;939:4;934:3;930:14;923:47;1019:4;1012:5;1008:16;1002:23;995:4;990:3;986:14;979:47;1075:4;1068:5;1064:16;1058:23;1051:4;1046:3;1042:14;1035:47;1131:4;1124:5;1120:16;1114:23;1107:4;1102:3;1098:14;1091:47;1187:4;1180:5;1176:16;1170:23;1163:4;1158:3;1154:14;1147:47;1213:6;1266:2;1259:5;1255:14;1249:21;1244:2;1239:3;1235:12;1228:43;;1290:6;1343:2;1336:5;1332:14;1326:21;1321:2;1316:3;1312:12;1305:43;;1367:6;1420:2;1413:5;1409:14;1403:21;1398:2;1393:3;1389:12;1382:43;;1444:6;1497:2;1490:5;1486:14;1480:21;1475:2;1470:3;1466:12;1459:43;;711:797;;:::o;1513:264::-;1709:3;1694:19;;1722:49;1698:9;1753:6;1722:49;:::i;1962:281::-;2038:6;2091:2;2079:9;2070:7;2066:23;2062:32;2059:52;;;2107:1;2104;2097:12;2059:52;2146:9;2133:23;2165:48;2207:5;2165:48;:::i;2248:461::-;2301:3;2339:5;2333:12;2366:6;2361:3;2354:19;2392:4;2421:2;2416:3;2412:12;2405:19;;2458:2;2451:5;2447:14;2479:1;2489:195;2503:6;2500:1;2497:13;2489:195;;;2568:13;;-1:-1:-1;;;;;2564:39:486;2552:52;;2624:12;;;;2659:15;;;;2600:1;2518:9;2489:195;;;-1:-1:-1;2700:3:486;;2248:461;-1:-1:-1;;;;;2248:461:486:o;2714:435::-;2767:3;2805:5;2799:12;2832:6;2827:3;2820:19;2858:4;2887:2;2882:3;2878:12;2871:19;;2924:2;2917:5;2913:14;2945:1;2955:169;2969:6;2966:1;2963:13;2955:169;;;3030:13;;3018:26;;3064:12;;;;3099:15;;;;2991:1;2984:9;2955:169;;3154:258;3226:1;3236:113;3250:6;3247:1;3244:13;3236:113;;;3326:11;;;3320:18;3307:11;;;3300:39;3272:2;3265:10;3236:113;;;3367:6;3364:1;3361:13;3358:48;;;3402:1;3393:6;3388:3;3384:16;3377:27;3358:48;;3154:258;;;:::o;3417:761::-;3469:3;3507:5;3501:12;3534:6;3529:3;3522:19;3560:4;3589:2;3584:3;3580:12;3573:19;;3614:3;3654:6;3651:1;3647:14;3642:3;3638:24;3696:2;3689:5;3685:14;3717:1;3727:425;3741:6;3738:1;3735:13;3727:425;;;3812:5;3806:4;3802:16;3797:3;3790:29;3848:6;3842:13;3890:2;3884:9;3919:8;3913:4;3906:22;3941:59;3991:8;3986:2;3980:4;3976:13;3971:2;3967;3963:11;3941:59;:::i;:::-;4130:12;;;;4062:2;4039:17;-1:-1:-1;;4035:31:486;4025:42;;;;4021:51;;;-1:-1:-1;4095:15:486;;;;3763:1;3756:9;3727:425;;;-1:-1:-1;4168:4:486;;3417:761;-1:-1:-1;;;;;;;3417:761:486:o;4183:444::-;4234:3;4272:5;4266:12;4299:6;4294:3;4287:19;4325:4;4354:2;4349:3;4345:12;4338:19;;4391:2;4384:5;4380:14;4412:1;4422:180;4436:6;4433:1;4430:13;4422:180;;;4501:13;;4516:4;4497:24;4485:37;;4542:12;;;;4577:15;;;;4458:1;4451:9;4422:180;;4632:1522;5315:3;5304:9;5297:22;5278:4;5342:57;5394:3;5383:9;5379:19;5371:6;5342:57;:::i;:::-;5447:9;5439:6;5435:22;5430:2;5419:9;5415:18;5408:50;5481:44;5518:6;5510;5481:44;:::i;:::-;5467:58;;5573:9;5565:6;5561:22;5556:2;5545:9;5541:18;5534:50;5607:44;5644:6;5636;5607:44;:::i;:::-;5593:58;;5699:9;5691:6;5687:22;5682:2;5671:9;5667:18;5660:50;5733:43;5769:6;5761;5733:43;:::i;:::-;5719:57;;5825:9;5817:6;5813:22;5807:3;5796:9;5792:19;5785:51;5859:43;5895:6;5887;5859:43;:::i;:::-;5845:57;;5951:9;5943:6;5939:22;5933:3;5922:9;5918:19;5911:51;5985:44;6022:6;6014;5985:44;:::i;:::-;5971:58;;6078:9;6070:6;6066:22;6060:3;6049:9;6045:19;6038:51;6106:42;6141:6;6133;6106:42;:::i;6159:593::-;6279:6;6287;6295;6303;6356:3;6344:9;6335:7;6331:23;6327:33;6324:53;;;6373:1;6370;6363:12;6324:53;6412:9;6399:23;6431:48;6473:5;6431:48;:::i;:::-;6498:5;-1:-1:-1;6555:2:486;6540:18;;6527:32;6568:50;6527:32;6568:50;:::i;:::-;6159:593;;6637:7;;-1:-1:-1;;;;6691:2:486;6676:18;;6663:32;;6742:2;6727:18;6714:32;;6159:593::o;6757:662::-;6886:6;6894;6902;6910;6918;6971:3;6959:9;6950:7;6946:23;6942:33;6939:53;;;6988:1;6985;6978:12;6939:53;7024:9;7011:23;7001:33;;7081:2;7070:9;7066:18;7053:32;7043:42;;7135:2;7124:9;7120:18;7107:32;7148:48;7190:5;7148:48;:::i;:::-;7215:5;-1:-1:-1;7272:2:486;7257:18;;7244:32;7285:50;7244:32;7285:50;:::i;:::-;6757:662;;;;-1:-1:-1;6757:662:486;;7408:3;7393:19;7380:33;;6757:662;-1:-1:-1;;6757:662:486:o;7424:384::-;7504:8;7514:6;7568:3;7561:4;7553:6;7549:17;7545:27;7535:55;;7586:1;7583;7576:12;7535:55;-1:-1:-1;7609:20:486;;-1:-1:-1;;;;;7641:30:486;;7638:50;;;7684:1;7681;7674:12;7638:50;7721:4;7713:6;7709:17;7697:29;;7781:3;7774:4;7764:6;7761:1;7757:14;7749:6;7745:27;7741:38;7738:47;7735:67;;;7798:1;7795;7788:12;7735:67;7424:384;;;;;:::o;7813:832::-;7960:6;7968;7976;7984;8037:2;8025:9;8016:7;8012:23;8008:32;8005:52;;;8053:1;8050;8043:12;8005:52;8093:9;8080:23;-1:-1:-1;;;;;8163:2:486;8155:6;8152:14;8149:34;;;8179:1;8176;8169:12;8149:34;8218:87;8297:7;8288:6;8277:9;8273:22;8218:87;:::i;:::-;8324:8;;-1:-1:-1;8192:113:486;-1:-1:-1;8412:2:486;8397:18;;8384:32;;-1:-1:-1;8428:16:486;;;8425:36;;;8457:1;8454;8447:12;8425:36;;8496:89;8577:7;8566:8;8555:9;8551:24;8496:89;:::i;:::-;7813:832;;;;-1:-1:-1;8604:8:486;-1:-1:-1;;;;7813:832:486:o;8650:722::-;8883:2;8935:21;;;9005:13;;8908:18;;;9027:22;;;8854:4;;8883:2;9106:15;;;;9080:2;9065:18;;;8854:4;9149:197;9163:6;9160:1;9157:13;9149:197;;;9212:50;9258:3;9249:6;9243:13;9212:50;:::i;:::-;9321:15;;;;9291:6;9282:16;;;;;9185:1;9178:9;9149:197;;;-1:-1:-1;9363:3:486;;8650:722;-1:-1:-1;;;;;;8650:722:486:o;9377:2311::-;10205:4;10234:3;10264:2;10253:9;10246:21;10290:56;10342:2;10331:9;10327:18;10319:6;10290:56;:::i;:::-;10276:70;;10365:2;10415:9;10407:6;10403:22;10398:2;10387:9;10383:18;10376:50;10446:6;10481;10475:13;10512:6;10504;10497:22;10547:2;10539:6;10535:15;10528:22;;10585:2;10577:6;10573:15;10559:29;;10606:1;10616:195;10630:6;10627:1;10624:13;10616:195;;;10695:13;;-1:-1:-1;;;;;10691:39:486;10679:52;;10786:15;;;;10751:12;;;;10727:1;10645:9;10616:195;;;10620:3;;10856:9;10851:3;10847:19;10842:2;10831:9;10827:18;10820:47;10890:41;10927:3;10919:6;10890:41;:::i;:::-;10876:55;;;;10979:9;10971:6;10967:22;10962:2;10951:9;10947:18;10940:50;11013:44;11050:6;11042;11013:44;:::i;:::-;10999:58;;11106:9;11098:6;11094:22;11088:3;11077:9;11073:19;11066:51;11140:43;11176:6;11168;11140:43;:::i;:::-;11126:57;;11232:9;11224:6;11220:22;11214:3;11203:9;11199:19;11192:51;11266:43;11302:6;11294;11266:43;:::i;:::-;11252:57;;11358:9;11350:6;11346:22;11340:3;11329:9;11325:19;11318:51;11392:42;11427:6;11419;11392:42;:::i;:::-;11378:56;;11483:9;11475:6;11471:22;11465:3;11454:9;11450:19;11443:51;11517:44;11554:6;11546;11517:44;:::i;:::-;11503:58;;11610:9;11602:6;11598:22;11592:3;11581:9;11577:19;11570:51;11638:44;11675:6;11667;11638:44;:::i;:::-;11630:52;9377:2311;-1:-1:-1;;;;;;;;;;;;9377:2311:486:o;12236:425::-;12338:6;12346;12354;12407:2;12395:9;12386:7;12382:23;12378:32;12375:52;;;12423:1;12420;12413:12;12375:52;12462:9;12449:23;12481:48;12523:5;12481:48;:::i;:::-;12548:5;12600:2;12585:18;;12572:32;;-1:-1:-1;12651:2:486;12636:18;;;12623:32;;12236:425;-1:-1:-1;;;12236:425:486:o;12666:184::-;12736:6;12789:2;12777:9;12768:7;12764:23;12760:32;12757:52;;;12805:1;12802;12795:12;12757:52;-1:-1:-1;12828:16:486;;12666:184;-1:-1:-1;12666:184:486:o;12855:285::-;12942:6;12995:2;12983:9;12974:7;12970:23;12966:32;12963:52;;;13011:1;13008;13001:12;12963:52;13043:9;13037:16;13062:48;13104:5;13062:48;:::i;13353:127::-;13414:10;13409:3;13405:20;13402:1;13395:31;13445:4;13442:1;13435:15;13469:4;13466:1;13459:15;13485:128;13525:3;13556:1;13552:6;13549:1;13546:13;13543:39;;;13562:18;;:::i;:::-;-1:-1:-1;13598:9:486;;13485:128::o;13618:168::-;13658:7;13724:1;13720;13716:6;13712:14;13709:1;13706:21;13701:1;13694:9;13687:17;13683:45;13680:71;;;13731:18;;:::i;:::-;-1:-1:-1;13771:9:486;;13618:168::o;13791:127::-;13852:10;13847:3;13843:20;13840:1;13833:31;13883:4;13880:1;13873:15;13907:4;13904:1;13897:15;13923:120;13963:1;13989;13979:35;;13994:18;;:::i;:::-;-1:-1:-1;14028:9:486;;13923:120::o;14870:125::-;14910:4;14938:1;14935;14932:8;14929:34;;;14943:18;;:::i;:::-;-1:-1:-1;14980:9:486;;14870:125::o;15000:338::-;15076:6;15084;15137:2;15125:9;15116:7;15112:23;15108:32;15105:52;;;15153:1;15150;15143:12;15105:52;15185:9;15179:16;15238:5;15231:13;15224:21;15217:5;15214:32;15204:60;;15260:1;15257;15250:12;15204:60;15328:2;15313:18;;;;15307:25;15283:5;;15307:25;;-1:-1:-1;;;15000:338:486:o;15343:127::-;15404:10;15399:3;15395:20;15392:1;15385:31;15435:4;15432:1;15425:15;15459:4;15456:1;15449:15;15475:275;15546:2;15540:9;15611:2;15592:13;;-1:-1:-1;;15588:27:486;15576:40;;-1:-1:-1;;;;;15631:34:486;;15667:22;;;15628:62;15625:88;;;15693:18;;:::i;:::-;15729:2;15722:22;15475:275;;-1:-1:-1;15475:275:486:o;15755:1028::-;15850:6;15881:2;15924;15912:9;15903:7;15899:23;15895:32;15892:52;;;15940:1;15937;15930:12;15892:52;15973:9;15967:16;-1:-1:-1;;;;;16043:2:486;16035:6;16032:14;16029:34;;;16059:1;16056;16049:12;16029:34;16097:6;16086:9;16082:22;16072:32;;16142:7;16135:4;16131:2;16127:13;16123:27;16113:55;;16164:1;16161;16154:12;16113:55;16193:2;16187:9;16215:2;16211;16208:10;16205:36;;;16221:18;;:::i;:::-;16267:2;16264:1;16260:10;16250:20;;16290:28;16314:2;16310;16306:11;16290:28;:::i;:::-;16352:15;;;16422:11;;;16418:20;;;16383:12;;;;16450:19;;;16447:39;;;16482:1;16479;16472:12;16447:39;16506:11;;;;16526:227;16542:6;16537:3;16534:15;16526:227;;;16615:3;16609:10;16596:23;;16632:48;16674:5;16632:48;:::i;:::-;16693:18;;;16559:12;;;;16731;;;;16526:227;;;16772:5;15755:1028;-1:-1:-1;;;;;;;;15755:1028:486:o;16788:127::-;16849:10;16844:3;16840:20;16837:1;16830:31;16880:4;16877:1;16870:15;16904:4;16901:1;16894:15;17193:706;17273:6;17326:2;17314:9;17305:7;17301:23;17297:32;17294:52;;;17342:1;17339;17332:12;17294:52;17375:9;17369:16;-1:-1:-1;;;;;17445:2:486;17437:6;17434:14;17431:34;;;17461:1;17458;17451:12;17431:34;17499:6;17488:9;17484:22;17474:32;;17544:7;17537:4;17533:2;17529:13;17525:27;17515:55;;17566:1;17563;17556:12;17515:55;17595:2;17589:9;17617:2;17613;17610:10;17607:36;;;17623:18;;:::i;:::-;17665:53;17708:2;17689:13;;-1:-1:-1;;17685:27:486;17714:2;17681:36;17665:53;:::i;:::-;17652:66;;17741:2;17734:5;17727:17;17781:7;17776:2;17771;17767;17763:11;17759:20;17756:33;17753:53;;;17802:1;17799;17792:12;17753:53;17815:54;17866:2;17861;17854:5;17850:14;17845:2;17841;17837:11;17815:54;:::i;17904:273::-;17972:6;18025:2;18013:9;18004:7;18000:23;17996:32;17993:52;;;18041:1;18038;18031:12;17993:52;18073:9;18067:16;18123:4;18116:5;18112:16;18105:5;18102:27;18092:55;;18143:1;18140;18133:12;18182:135;18221:3;-1:-1:-1;;18242:17:486;;18239:43;;;18262:18;;:::i;:::-;-1:-1:-1;18309:1:486;18298:13;;18182:135::o;18322:267::-;18361:4;18390:9;;;18415:10;;-1:-1:-1;;;18434:19:486;;18427:27;;18411:44;18408:70;;;18458:18;;:::i;:::-;-1:-1:-1;;;;;18505:27:486;;18498:35;;18490:44;;18487:70;;;18537:18;;:::i;:::-;-1:-1:-1;;18574:9:486;;18322:267::o;18594:193::-;18633:1;18659;18649:35;;18664:18;;:::i;:::-;-1:-1:-1;;;18700:18:486;;-1:-1:-1;;18720:13:486;;18696:38;18693:64;;;18737:18;;:::i;:::-;-1:-1:-1;18771:10:486;;18594:193::o;18792:553::-;18831:7;-1:-1:-1;;;;;18901:9:486;;;18929;;;18954:11;;;18973:10;;;18967:17;;18950:35;18947:61;;;18988:18;;:::i;:::-;-1:-1:-1;;;19064:1:486;19057:9;;19082:11;;;19102;;;19095:19;;19078:37;19075:63;;;19118:18;;:::i;:::-;19164:1;19161;19157:9;19147:19;;19211:1;19207:2;19202:11;19199:1;19195:19;19190:2;19186;19182:11;19178:37;19175:63;;;19218:18;;:::i;:::-;19283:1;19279:2;19274:11;19271:1;19267:19;19262:2;19258;19254:11;19250:37;19247:63;;;19290:18;;:::i;:::-;-1:-1:-1;;;19330:9:486;;;;;18792:553;-1:-1:-1;;;18792:553:486:o;19644:410::-;19846:2;19828:21;;;19885:2;19865:18;;;19858:30;19924:34;19919:2;19904:18;;19897:62;-1:-1:-1;;;19990:2:486;19975:18;;19968:44;20044:3;20029:19;;19644:410::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "factory()": "c45a0155", + "getBorrowRateAtRatio(address,address,uint256,uint256)": "6bbdc780", + "getBorrowableMarketsAndRates(address)": "60ff773e", + "getCollateralMarkets()": "c03497c0", + "getLeverageRatioAfterFunding(address,uint256)": "012db95c", + "getNetAPY(uint256,uint256,address,address,uint256)": "8de1624d", + "getNetApyForPosition(address,uint256)": "1a610317", + "getNetApyForPositionAfterFunding(address,uint256,uint256)": "cc3e7804", + "getPositionInfo(address,uint256)": "1327d7fb", + "getPositionsInfo(address[],uint256[])": "8f4b1166", + "initialize(address)": "c4d66de8", + "reinitialize(address)": "f7e7d1fd" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LeveredPositionsLens_Proxy.json b/packages/sdk/deployments/mode/LeveredPositionsLens_Proxy.json new file mode 100644 index 0000000000..914e5e797f --- /dev/null +++ b/packages/sdk/deployments/mode/LeveredPositionsLens_Proxy.json @@ -0,0 +1,247 @@ +{ + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "transactionIndex": 1, + "gasUsed": "746637", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000004000000080000000000000800000000000000000000000000000000400000000020000000000000800000000000000000020000000000000000000040000000000000400000000000000000000000000000004000000000000000000000000000000000020000000000000000000", + "blockHash": "0xd07d3f8efe08d1680df2605212228ba3ccef7ade250303f7f0e62f86c12cffda", + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097670, + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000d9a5677594694819f69d0907c3094eab480f3a28" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xd07d3f8efe08d1680df2605212228ba3ccef7ade250303f7f0e62f86c12cffda" + }, + { + "transactionIndex": 1, + "blockNumber": 2097670, + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 1, + "blockHash": "0xd07d3f8efe08d1680df2605212228ba3ccef7ade250303f7f0e62f86c12cffda" + }, + { + "transactionIndex": 1, + "blockNumber": 2097670, + "transactionHash": "0xb6be3f2ad94375b627260c4a93aaef4895fb8249552f1730dccfa9f0c3a96ec6", + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 2, + "blockHash": "0xd07d3f8efe08d1680df2605212228ba3ccef7ade250303f7f0e62f86c12cffda" + } + ], + "blockNumber": 2097670, + "cumulativeGasUsed": "797138", + "status": 1, + "byzantium": true + }, + "args": [ + "0xD9a5677594694819F69D0907C3094EAb480F3a28", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xc4d66de80000000000000000000000009b506a03bbff2a842866b10bc6732da72640cd45" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LiquidatorsRegistry.json b/packages/sdk/deployments/mode/LiquidatorsRegistry.json new file mode 100644 index 0000000000..0f462b98d3 --- /dev/null +++ b/packages/sdk/deployments/mode/LiquidatorsRegistry.json @@ -0,0 +1,1170 @@ +{ + "address": "0xc71B968C6C23e2723Bae32957D815C9bE3ca1b34", + "abi": [ + { + "inputs": [ + { + "internalType": "contract AddressesProvider", + "name": "_ap", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "_currentImpl", + "type": "address" + } + ], + "name": "FunctionAlreadyAdded", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "FunctionNotFound", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "name": "_listExtensions", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "name": "_registerExtension", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ap", + "outputs": [ + { + "internalType": "contract AddressesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "asExtension", + "outputs": [ + { + "internalType": "contract LiquidatorsRegistryExtension", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "customUniV3Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "defaultOutputToken", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "redemptionStrategiesByName", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "redemptionStrategiesByTokens", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "uniswapV3Fees", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x854a90f1aa715d8085484fa3de0c3b38f86d894ac22950c924f56e74ffba91ca", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xc71B968C6C23e2723Bae32957D815C9bE3ca1b34", + "transactionIndex": 1, + "gasUsed": "983496", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000002000000000000000000000000000000000000000000000", + "blockHash": "0xbb2e9270f5170501035f23caa4ad0bade83c77ef3d89e3c5672c950811c344e6", + "transactionHash": "0x854a90f1aa715d8085484fa3de0c3b38f86d894ac22950c924f56e74ffba91ca", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097631, + "transactionHash": "0x854a90f1aa715d8085484fa3de0c3b38f86d894ac22950c924f56e74ffba91ca", + "address": "0xc71B968C6C23e2723Bae32957D815C9bE3ca1b34", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xbb2e9270f5170501035f23caa4ad0bade83c77ef3d89e3c5672c950811c344e6" + } + ], + "blockNumber": 2097631, + "cumulativeGasUsed": "1030409", + "status": 1, + "byzantium": true + }, + "args": [ + "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115" + ], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract AddressesProvider", + "name": "_ap", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "_currentImpl", + "type": "address" + } + ], + "type": "error", + "name": "FunctionAlreadyAdded" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "type": "error", + "name": "FunctionNotFound" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_listExtensions", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_registerExtension" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ap", + "outputs": [ + { + "internalType": "contract AddressesProvider", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "asExtension", + "outputs": [ + { + "internalType": "contract LiquidatorsRegistryExtension", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "customUniV3Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "defaultOutputToken", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByName", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByTokens", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapV3Fees", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_registerExtension(address,address)": { + "details": "register a logic extension", + "params": { + "extensionToAdd": "the extension whose functions are to be added", + "extensionToReplace": "the extension whose functions are to be removed/replaced" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/liquidators/registry/LiquidatorsRegistry.sol": "LiquidatorsRegistry" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/bomb/IXBomb.sol": { + "keccak256": "0x7bab8191e350a68203996c0d99a5c075307ad421c98142072f9b5312534bff9b", + "urls": [ + "bzz-raw://70ada9803810fff6a8d907a50da72dc95eb75267060b5a71c899cd244d970638", + "dweb:/ipfs/QmcMaYsCbFhoKJLGza4F9hy86cvEhjq492Y65pVzZB8jUj" + ], + "license": null + }, + "contracts/external/curve/ICurvePool.sol": { + "keccak256": "0x41770e1ed75224a030ca961ee216ecfae2d16968234f7fab4b7427aa575b9acc", + "urls": [ + "bzz-raw://238efef35bb6b8d38b6fd6cb0985d936daf20bdac4ec9ab041fc2c5939635fcc", + "dweb:/ipfs/QmRhzTppsXSYGc36rMPT31eVVehkfpECbdBoKq2Xvq1ofi" + ], + "license": "UNLICENSED" + }, + "contracts/external/curve/ICurveV2Pool.sol": { + "keccak256": "0x8450c23787d2b4823367dbff5580f2e55a36ad7fd57a4561d3361612f37a1d98", + "urls": [ + "bzz-raw://5d06b0a68ee8b32c86077bf4cb1944dc6b1d841df030199223c2434456d7fe78", + "dweb:/ipfs/QmZRKiwjT2QsXM9w5qLEY92sWMFF7HNP9LXCFAYqtzyvxS" + ], + "license": "UNLICENSED" + }, + "contracts/external/saddle/ISwap.sol": { + "keccak256": "0x18a574d7aff6a6ebd2c086820f98c476b3a4324fe5f735732e71c7d306bf9f70", + "urls": [ + "bzz-raw://fda761e2e52dac4d8d9a403d84abff870918e47b2d744f20802c60e086ccc42b", + "dweb:/ipfs/QmeMbmEXfeej6XRunwdadqJC4ESSFjgxcLRdh8H9ZN2jQU" + ], + "license": "MIT" + }, + "contracts/external/solidly/IPair.sol": { + "keccak256": "0xd13d4e85d4d16d46d2df3f1a8f5f1bcc6762f9d8ae0aa807847ea644ce0d0f72", + "urls": [ + "bzz-raw://e3d9cafc90f8849b3051628a3d6f74c688854889805bf1fa119e578875c48fb3", + "dweb:/ipfs/QmWRurHXNAVpCcWJqZkx9tN5qgfDaqGEPqQGLmTzXmJApT" + ], + "license": "MIT" + }, + "contracts/external/solidly/IRouter.sol": { + "keccak256": "0x1b0243564ad8f92731f75038da17d97be2c2d8bebd5c6fa3a565d5d367909260", + "urls": [ + "bzz-raw://a47f4e14934e1452b5370e4267e43b4e6f98fd7a0d78bb79df04bf3ecd5d1204", + "dweb:/ipfs/QmWPVmf51r3ZjNGphbz2ws6qJNkXubZVXG2ybqtfkyf4b4" + ], + "license": null + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AddressesProvider.sol": { + "keccak256": "0xf48e9e8b2150408c1c6b68dd957226c342ba47396da792fdaa0922f539a7e163", + "urls": [ + "bzz-raw://43c0a6c40861da4c19b67da9faee7df21572020e2d863611080a9181acc3ba3a", + "dweb:/ipfs/QmQpPDVAYTba8R9N1fGggzkG7JhUFVbAhxdfNw9xofVi4m" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/XBombLiquidatorFunder.sol": { + "keccak256": "0x5d7004618ff58b831b7cdab4c1bb5d1997c94e9255915e4bbc58d11e257f2934", + "urls": [ + "bzz-raw://4414cbcb281990689913d23d01e09ff3b0f8b320d831e149be0796cee76b2d20", + "dweb:/ipfs/QmSYguBZYx3XkEBCXiiZ1QASpH598jVYoF6P5GcHMdDDBz" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/LiquidatorsRegistry.sol": { + "keccak256": "0x64c7d8af207804ab1a36867c88c3a5298ea69ce28ccba1dc6b92b254dd29bfe7", + "urls": [ + "bzz-raw://ddfb3a9c23ec000aa65429ec6ddee4b9df5772d92794c6e9a8b14baffe73a254", + "dweb:/ipfs/QmZJ5Eaby1eQ3YeUDVDWzuYPz38t8WDMizfFdDbWpK16Cp" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/registry/LiquidatorsRegistryExtension.sol": { + "keccak256": "0xa10c9d271ea0cab4b495b6a9736ba15375c9ecff2d52ac18e969feb3912f7a06", + "urls": [ + "bzz-raw://debf7bcabb356e16e523d87d88296112af5e7622d44011673483a555ef7dde13", + "dweb:/ipfs/QmScYXtibdfsiKMyZh7VpZx1mZpbegqzDN8k9LgpYqKArC" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/registry/LiquidatorsRegistryStorage.sol": { + "keccak256": "0x95840e79c504ab6ee1d0cf9ff5fcec2424a64dc6ed57f0bf4831f65c89fc9109", + "urls": [ + "bzz-raw://29825087d3eeaca7516168043f1b046b280816195ed31f13cbdb7444ecb3b012", + "dweb:/ipfs/QmVa9kZx9gRvvUr8RbLRZKWseEMntoQ2CZmQ3TraSF9pa1" + ], + "license": "GPL-3.0" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x9807f66d6f8aa8005c3e4da70b7dc64d16daeccd02bc865a49d809e0094a81a2", + "urls": [ + "bzz-raw://12d8bf913ca8d8051c62a803204ed899e011efeda842e90639f3c8e5fe0270cf", + "dweb:/ipfs/Qmd8bXgWwamyWgk4AGFQE4N6JGMtXBw9mDqAYH27sVPLKY" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/CurveLpTokenPriceOracleNoRegistry.sol": { + "keccak256": "0x49016dd76e69d5c874f0888e743560fe0a6e71eac40ba0e009d2bd31e4255baa", + "urls": [ + "bzz-raw://ae88e6c1e7ec2bd8615d2277c4f9ad5a036d28631be8abe8bf7e450b678a37c2", + "dweb:/ipfs/QmRPBcV1koBcUqBJRP7wCgC6iVZyu8sS7ahqYj547mEpy2" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/CurveV2LpTokenPriceOracleNoRegistry.sol": { + "keccak256": "0x70596141564721af07d04f869b602d8f3a96282009e64002dbd0f2bb73609e87", + "urls": [ + "bzz-raw://1b6dac6960db01feac138ac194355a6c030dc1ef5dba8cd3ff0b8efa14f6e6e3", + "dweb:/ipfs/QmddVZpSKHL5StzrE1RQ1YDQzK7bNAQNGEGmvxu3RnuXcH" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/SaddleLpPriceOracle.sol": { + "keccak256": "0x074f866fc724084ddf4ccf41f0f2f02abc98aa3453251fd898208adf108dd5ed", + "urls": [ + "bzz-raw://b867f7e510ee9edfa756b373f12a9479b988b648891e0929a5cc8f220b507406", + "dweb:/ipfs/QmbnvVtbAQ6CFoY7n4eQRhMFYzkARGaZDme46LBuq74WeV" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506040516110f53803806110f583398101604081905261002f916100d4565b6100383361005d565b600280546001600160a01b0319166001600160a01b0392909216919091179055610104565b600180546001600160a01b031916905561008181610084602090811b61048f17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100e657600080fd5b81516001600160a01b03811681146100fd57600080fd5b9392505050565b610fe2806101136000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638db87c271161008c578063dc54bc8111610066578063dc54bc81146102b1578063dee7fe48146102b7578063e30c3978146102eb578063f2fde38b146102fc576100ea565b80638db87c2714610220578063a700f9e414610249578063c8ff6fee1461027d576100ea565b8063715018a6116100c8578063715018a6146101ea57806379ba5097146101f457806389cd9855146101fc5780638da5cb5b1461020f576100ea565b8063398cd955146101615780633c4f743c146101aa5780636333d001146101d5575b60006101016000356001600160e01b03191661030f565b90506001600160a01b03811661013d57604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e80801561015c573d6000f35b3d6000fd5b61019161016f366004610ca3565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b6002546101bd906001600160a01b031681565b6040516001600160a01b0390911681526020016101a1565b6101dd61032f565b6040516101a19190610cdc565b6101f261033e565b005b6101f261038e565b6101f261020a366004610ca3565b610408565b6000546001600160a01b03166101bd565b6101bd61022e366004610d29565b6007602052600090815260409020546001600160a01b031681565b6101bd610257366004610ca3565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6101bd61028b366004610ca3565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b306101bd565b6101bd6102c5366004610d94565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6001546001600160a01b03166101bd565b6101f261030a366004610d29565b61041e565b600061032982600080516020610fb68339815191526104df565b92915050565b6060610339610585565b905090565b6103466105f7565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f77656400006044820152606401610134565b60015433906001600160a01b031681146103fc5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610134565b61040581610653565b50565b6104106105f7565b61041a828261066c565b5050565b6104266105f7565b600180546001600160a01b0383166001600160a01b031990911681179091556104576000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8054600090815b8181101561057a57846001600160e01b03191684600001828154811061050e5761050e610e29565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156105685783600001818154811061054957610549610e29565b6000918252602090912001546001600160a01b03169250610329915050565b8061057281610e55565b9150506104e6565b506000949350505050565b6060600080516020610fb68339815191526001018054806020026020016040519081016040528092919081815260200182805480156105ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105cf575b5050505050905090565b6000546001600160a01b031633146106515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610134565b565b600180546001600160a01b03191690556104058161048f565b6001600160a01b03811615610684576106848161068d565b61041a826107c2565b600080516020610fb68339815191526106a5826108ba565b60005b600182015460ff821610156107bd57826001600160a01b0316826001018260ff16815481106106d9576106d9610e29565b6000918252602090912001546001600160a01b031614156107ab5760018083018054909161070691610e70565b8154811061071657610716610e29565b6000918252602090912001546001830180546001600160a01b039092169160ff841690811061074757610747610e29565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061078857610788610e87565b600082815260209020810160001990810180546001600160a01b03191690550190555b806107b581610e9d565b9150506106a8565b505050565b600080516020610fb683398151915260005b600182015460ff8216101561087a57826001600160a01b0316826001018260ff168154811061080557610805610e29565b6000918252602090912001546001600160a01b031614156108685760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c72656164792061646465640000000000000000006044820152606401610134565b8061087281610e9d565b9150506107d4565b5061088482610a7f565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109229190810190610ebd565b9050600080516020610fb683398151915260005b82518161ffff161015610a79576000838261ffff168151811061095b5761095b610e29565b6020026020010151905061096f81846104df565b6001600160a01b0316856001600160a01b03161461098f5761098f610f7d565b600061099b8285610c06565b845490915084906109ae90600190610e70565b815481106109be576109be610e29565b90600052602060002001846000018261ffff16815481106109e1576109e1610e29565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080610a4257610a42610e87565b600082815260209020810160001990810180546001600160c01b031916905501905550819050610a7181610f93565b915050610936565b50505050565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610abf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ae79190810190610ebd565b600080516020610fb683398151915280549192509060005b8351811015610bff576000848281518110610b1c57610b1c610e29565b602002602001015190506000610b3282866104df565b90506001600160a01b03811615610b7757604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b0382166024820152604401610134565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b0319909216939092169290921791909117905583610be781610f93565b94505050508080610bf790610e55565b915050610aff565b5050505050565b8054600090815b8161ffff168161ffff161015610c8257846001600160e01b031916846000018261ffff1681548110610c4157610c41610e29565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610c705791506103299050565b80610c7a81610f93565b915050610c0d565b5061ffff949350505050565b6001600160a01b038116811461040557600080fd5b60008060408385031215610cb657600080fd5b8235610cc181610c8e565b91506020830135610cd181610c8e565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610d1d5783516001600160a01b031683529284019291840191600101610cf8565b50909695505050505050565b600060208284031215610d3b57600080fd5b8135610d4681610c8e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8c57610d8c610d4d565b604052919050565b60006020808385031215610da757600080fd5b823567ffffffffffffffff80821115610dbf57600080fd5b818501915085601f830112610dd357600080fd5b813581811115610de557610de5610d4d565b610df7601f8201601f19168501610d63565b91508082528684828501011115610e0d57600080fd5b8084840185840137600090820190930192909252509392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610e6957610e69610e3f565b5060010190565b600082821015610e8257610e82610e3f565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff811415610eb457610eb4610e3f565b60010192915050565b60006020808385031215610ed057600080fd5b825167ffffffffffffffff80821115610ee857600080fd5b818501915085601f830112610efc57600080fd5b815181811115610f0e57610f0e610d4d565b8060051b9150610f1f848301610d63565b8181529183018401918481019088841115610f3957600080fd5b938501935b83851015610f7157845192506001600160e01b031983168314610f615760008081fd5b8282529385019390850190610f3e565b98975050505050505050565b634e487b7160e01b600052600160045260246000fd5b600061ffff80831681811415610fab57610fab610e3f565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000a", + "sourceMap": "194:765:229:-:0;;;323:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:452;719:10:466;936:18:452;:32::i;:::-;378:2:229::1;:8:::0;;-1:-1:-1;;;;;;378:8:229::1;-1:-1:-1::0;;;;;378:8:229;;;::::1;::::0;;;::::1;::::0;;194:765;;1496:153:453;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:317:486:-;111:6;164:2;152:9;143:7;139:23;135:32;132:52;;;180:1;177;170:12;132:52;206:16;;-1:-1:-1;;;;;251:31:486;;241:42;;231:70;;297:1;294;287:12;231:70;320:5;14:317;-1:-1:-1;;;14:317:486:o;:::-;194:765:229;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638db87c271161008c578063dc54bc8111610066578063dc54bc81146102b1578063dee7fe48146102b7578063e30c3978146102eb578063f2fde38b146102fc576100ea565b80638db87c2714610220578063a700f9e414610249578063c8ff6fee1461027d576100ea565b8063715018a6116100c8578063715018a6146101ea57806379ba5097146101f457806389cd9855146101fc5780638da5cb5b1461020f576100ea565b8063398cd955146101615780633c4f743c146101aa5780636333d001146101d5575b60006101016000356001600160e01b03191661030f565b90506001600160a01b03811661013d57604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e80801561015c573d6000f35b3d6000fd5b61019161016f366004610ca3565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b6002546101bd906001600160a01b031681565b6040516001600160a01b0390911681526020016101a1565b6101dd61032f565b6040516101a19190610cdc565b6101f261033e565b005b6101f261038e565b6101f261020a366004610ca3565b610408565b6000546001600160a01b03166101bd565b6101bd61022e366004610d29565b6007602052600090815260409020546001600160a01b031681565b6101bd610257366004610ca3565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6101bd61028b366004610ca3565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b306101bd565b6101bd6102c5366004610d94565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6001546001600160a01b03166101bd565b6101f261030a366004610d29565b61041e565b600061032982600080516020610fb68339815191526104df565b92915050565b6060610339610585565b905090565b6103466105f7565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f77656400006044820152606401610134565b60015433906001600160a01b031681146103fc5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610134565b61040581610653565b50565b6104106105f7565b61041a828261066c565b5050565b6104266105f7565b600180546001600160a01b0383166001600160a01b031990911681179091556104576000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8054600090815b8181101561057a57846001600160e01b03191684600001828154811061050e5761050e610e29565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156105685783600001818154811061054957610549610e29565b6000918252602090912001546001600160a01b03169250610329915050565b8061057281610e55565b9150506104e6565b506000949350505050565b6060600080516020610fb68339815191526001018054806020026020016040519081016040528092919081815260200182805480156105ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105cf575b5050505050905090565b6000546001600160a01b031633146106515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610134565b565b600180546001600160a01b03191690556104058161048f565b6001600160a01b03811615610684576106848161068d565b61041a826107c2565b600080516020610fb68339815191526106a5826108ba565b60005b600182015460ff821610156107bd57826001600160a01b0316826001018260ff16815481106106d9576106d9610e29565b6000918252602090912001546001600160a01b031614156107ab5760018083018054909161070691610e70565b8154811061071657610716610e29565b6000918252602090912001546001830180546001600160a01b039092169160ff841690811061074757610747610e29565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061078857610788610e87565b600082815260209020810160001990810180546001600160a01b03191690550190555b806107b581610e9d565b9150506106a8565b505050565b600080516020610fb683398151915260005b600182015460ff8216101561087a57826001600160a01b0316826001018260ff168154811061080557610805610e29565b6000918252602090912001546001600160a01b031614156108685760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c72656164792061646465640000000000000000006044820152606401610134565b8061087281610e9d565b9150506107d4565b5061088482610a7f565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109229190810190610ebd565b9050600080516020610fb683398151915260005b82518161ffff161015610a79576000838261ffff168151811061095b5761095b610e29565b6020026020010151905061096f81846104df565b6001600160a01b0316856001600160a01b03161461098f5761098f610f7d565b600061099b8285610c06565b845490915084906109ae90600190610e70565b815481106109be576109be610e29565b90600052602060002001846000018261ffff16815481106109e1576109e1610e29565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080610a4257610a42610e87565b600082815260209020810160001990810180546001600160c01b031916905501905550819050610a7181610f93565b915050610936565b50505050565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610abf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ae79190810190610ebd565b600080516020610fb683398151915280549192509060005b8351811015610bff576000848281518110610b1c57610b1c610e29565b602002602001015190506000610b3282866104df565b90506001600160a01b03811615610b7757604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b0382166024820152604401610134565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b0319909216939092169290921791909117905583610be781610f93565b94505050508080610bf790610e55565b915050610aff565b5050505050565b8054600090815b8161ffff168161ffff161015610c8257846001600160e01b031916846000018261ffff1681548110610c4157610c41610e29565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610c705791506103299050565b80610c7a81610f93565b915050610c0d565b5061ffff949350505050565b6001600160a01b038116811461040557600080fd5b60008060408385031215610cb657600080fd5b8235610cc181610c8e565b91506020830135610cd181610c8e565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610d1d5783516001600160a01b031683529284019291840191600101610cf8565b50909695505050505050565b600060208284031215610d3b57600080fd5b8135610d4681610c8e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8c57610d8c610d4d565b604052919050565b60006020808385031215610da757600080fd5b823567ffffffffffffffff80821115610dbf57600080fd5b818501915085601f830112610dd357600080fd5b813581811115610de557610de5610d4d565b610df7601f8201601f19168501610d63565b91508082528684828501011115610e0d57600080fd5b8084840185840137600090820190930192909252509392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610e6957610e69610e3f565b5060010190565b600082821015610e8257610e82610e3f565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff811415610eb457610eb4610e3f565b60010192915050565b60006020808385031215610ed057600080fd5b825167ffffffffffffffff80821115610ee857600080fd5b818501915085601f830112610efc57600080fd5b815181811115610f0e57610f0e610d4d565b8060051b9150610f1f848301610d63565b8181529183018401918481019088841115610f3957600080fd5b938501935b83851015610f7157845192506001600160e01b031983168314610f615760008081fd5b8282529385019390850190610f3e565b98975050505050505050565b634e487b7160e01b600052600160045260246000fd5b600061ffff80831681811415610fab57610fab610e3f565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000a", + "sourceMap": "194:765:229:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1275:17:129;1295:43;1330:7;;-1:-1:-1;;;;;;1330:7:129;1295:34;:43::i;:::-;1275:63;-1:-1:-1;;;;;;1348:23:129;;1344:61;;1380:25;;-1:-1:-1;;;1380:25:129;;-1:-1:-1;;;;;;1397:7:129;;;1380:25;;;158:52:486;131:18;;1380:25:129;;;;;;;;1344:61;1586:14;1583:1;1580;1567:34;1726:1;1723;1707:14;1704:1;1693:9;1686:5;1673:55;1786:16;1783:1;1780;1765:38;1878:6;1891:52;;;;1978:16;1975:1;1968:27;1891:52;1918:16;1915:1;1908:27;1164:87:232;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1037:8:486;1025:21;;;1007:40;;995:2;980:18;1164:87:232;;;;;;;;450:27;;;;;-1:-1:-1;;;;;450:27:232;;;;;;-1:-1:-1;;;;;1249:32:486;;;1231:51;;1219:2;1204:18;450:27:232;1058:230:486;1134:111:129;;;:::i;:::-;;;;;;;:::i;174:106:133:-;;;:::i;:::-;;1729:206:453;;;:::i;605:213:229:-;;;;;;:::i;:::-;;:::i;1201:85:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;1201:85;;735:73:232;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;735:73:232;;;616:115;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;616:115:232;;;1255:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1255:92:232;;;822:135:229;946:4;822:135;;540:72:232;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:72:232;;;842:99:453;921:13;;-1:-1:-1;;;;;921:13:453;842:99;;1134:178;;;;;;:::i;:::-;;:::i;2384:147:129:-;2455:7;2477:49;2501:6;-1:-1:-1;;;;;;;;;;;2477:23:129;:49::i;:::-;2470:56;2384:147;-1:-1:-1;;2384:147:129:o;1134:111::-;1182:16;1213:27;:25;:27::i;:::-;1206:34;;1134:111;:::o;174:106:133:-;1094:13:452;:11;:13::i;:::-;235:40:133::1;::::0;-1:-1:-1;;;235:40:133;;5319:2:486;235:40:133::1;::::0;::::1;5301:21:486::0;5358:2;5338:18;;;5331:30;5397:32;5377:18;;;5370:60;5447:18;;235:40:133::1;5117:354:486::0;1729:206:453;921:13;;719:10:466;;-1:-1:-1;;;;;921:13:453;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:453;;5678:2:486;1814:78:453;;;5660:21:486;5717:2;5697:18;;;5690:30;5756:34;5736:18;;;5729:62;-1:-1:-1;;;5807:18:486;;;5800:39;5856:19;;1814:78:453;5476:405:486;1814:78:453;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;605:213:229:-;1094:13:452;:11;:13::i;:::-;749:64:229::1;778:14;794:18;749:28;:64::i;:::-;605:213:::0;;:::o;1134:178:453:-;1094:13:452;:11;:13::i;:::-;1223::453::1;:24:::0;;-1:-1:-1;;;;;1223:24:453;::::1;-1:-1:-1::0;;;;;;1223:24:453;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::452::0;1273:6;-1:-1:-1;;;;;1273:6:452;;1201:85;1287:7:453::1;-1:-1:-1::0;;;;;1262:43:453::1;;;;;;;;;;;1134:178:::0;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;5191:309:129:-;5321:19;;5289:7;;;5346:126;5370:6;5366:1;:10;5346:126;;;5423:8;-1:-1:-1;;;;;5395:36:129;;:2;:12;;5408:1;5395:15;;;;;;;;:::i;:::-;;;;;;;;;;:24;-1:-1:-1;;;5395:24:129;;;;-1:-1:-1;;;;;;5395:36:129;;5391:74;;;5440:2;:12;;5453:1;5440:15;;;;;;;;:::i;:::-;;;;;;;;;;:25;-1:-1:-1;;;;;5440:25:129;;-1:-1:-1;5433:32:129;;-1:-1:-1;;5433:32:129;5391:74;5378:3;;;;:::i;:::-;;;;5346:126;;;-1:-1:-1;5493:1:129;;5191:309;-1:-1:-1;;;;5191:309:129:o;2714:112::-;2763:16;-1:-1:-1;;;;;;;;;;;2794:27:129;;2787:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2787:34:129;;;;;;;;;;;;;;;;;;;;;;;2714:112;:::o;1359:130:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;719:10:466;1422:23:452;1414:68;;;;-1:-1:-1;;;1414:68:452;;6492:2:486;1414:68:452;;;6474:21:486;;;6511:18;;;6504:30;6570:34;6550:18;;;6543:62;6622:18;;1414:68:452;6290:356:486;1414:68:452;1359:130::o;1496:153:453:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;:34::i;2830:247:129:-;-1:-1:-1;;;;;2946:41:129;;;2942:97;;2997:35;3013:18;2997:15;:35::i;:::-;3044:28;3057:14;3044:12;:28::i;3081:430::-;-1:-1:-1;;;;;;;;;;;3253:35:129;3278:9;3253:24;:35::i;:::-;3299:7;3294:213;3316:13;;;:20;3312:24;;;;3294:213;;;3383:9;-1:-1:-1;;;;;3355:38:129;:2;:13;;3369:1;3355:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3355:16:129;:38;3351:150;;;3424:13;;;;3438:20;;3424:13;;3438:24;;;:::i;:::-;3424:39;;;;;;;;:::i;:::-;;;;;;;;;;;;3405:13;;:16;;-1:-1:-1;;;;;3424:39:129;;;;3405:16;;;;;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1;;;;;3405:58:129;;;;;-1:-1:-1;;;;;3405:58:129;;;;;;3473:2;:13;;:19;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;3473:19:129;;;;;-1:-1:-1;;;;;;3473:19:129;;;;;;3351:150;3338:3;;;;:::i;:::-;;;;3294:213;;;;3143:368;3081:430;:::o;3515:337::-;-1:-1:-1;;;;;;;;;;;3580:23:129;3628:138;3650:13;;;:20;3646:24;;;;3628:138;;;3721:9;-1:-1:-1;;;;;3693:38:129;:2;:13;;3707:1;3693:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3693:16:129;:38;;3685:74;;;;-1:-1:-1;;;3685:74:129;;7295:2:486;3685:74:129;;;7277:21:486;7334:2;7314:18;;;7307:30;7373:25;7353:18;;;7346:53;7416:18;;3685:74:129;7093:347:486;3685:74:129;3672:3;;;;:::i;:::-;;;;3628:138;;;;3771:32;3793:9;3771:21;:32::i;:::-;3809:13;;;;:38;;;;;;;-1:-1:-1;3809:38:129;;;;;;;;;-1:-1:-1;;;;;;3809:38:129;-1:-1:-1;;;;;3809:38:129;;;;;;;;;;3515:337::o;3856:672::-;3933:27;3963:9;-1:-1:-1;;;;;3963:32:129;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3963:34:129;;;;;;;;;;;;:::i;:::-;3933:64;-1:-1:-1;;;;;;;;;;;;4003:23:129;4051:473;4074:11;:18;4070:1;:22;;;4051:473;;;4107:23;4133:11;4145:1;4133:14;;;;;;;;;;:::i;:::-;;;;;;;4107:40;;4209:45;4233:16;4251:2;4209:23;:45::i;:::-;-1:-1:-1;;;;;4187:67:129;4195:9;-1:-1:-1;;;;;4187:67:129;;4180:75;;;;:::i;:::-;4356:18;4377:41;4397:16;4415:2;4377:19;:41::i;:::-;4467:19;;4356:62;;-1:-1:-1;4454:2:129;;4467:23;;4489:1;;4467:23;:::i;:::-;4454:37;;;;;;;;:::i;:::-;;;;;;;;4426:2;:12;;4439:11;4426:25;;;;;;;;;;:::i;:::-;;;;;;;;;:65;;:25;;:65;;-1:-1:-1;;;;;4426:65:129;;;-1:-1:-1;;;;;;4426:65:129;;;;;;;;-1:-1:-1;;;;;;4426:65:129;;;;;;-1:-1:-1;;;4426:65:129;;;;;;;;;;;;4499:18;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;4499:18:129;;;;;-1:-1:-1;;;;;;4499:18:129;;;;;;-1:-1:-1;4094:3:129;;-1:-1:-1;4094:3:129;;;:::i;:::-;;;;4051:473;;;;3927:601;;3856:672;:::o;4532:655::-;4606:24;4633:9;-1:-1:-1;;;;;4633:32:129;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4633:34:129;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;4752:19:129;;4606:61;;-1:-1:-1;2182:47:129;4673:23;4778:405;4828:8;:15;4811:14;:32;4778:405;;;4871:15;4889:8;4898:14;4889:24;;;;;;;;:::i;:::-;;;;;;;4871:42;;4921:25;4949:37;4973:8;4983:2;4949:23;:37::i;:::-;4921:65;-1:-1:-1;;;;;;4998:31:129;;;4994:93;;5038:49;;-1:-1:-1;;;5038:49:129;;-1:-1:-1;;;;;;9094:33:486;;5038:49:129;;;9076:52:486;-1:-1:-1;;;;;9164:32:486;;9144:18;;;9137:60;9049:18;;5038:49:129;8904:299:486;4994:93:129;5113:38;;;;;;;;;-1:-1:-1;;;;;5113:38:129;;;;;-1:-1:-1;;;;;;5113:38:129;;;;;;;;;5095:57;;;;;;;:12;:57;;;;;;;;;;;;;;;;;-1:-1:-1;;;5095:57:129;-1:-1:-1;;;;;;5095:57:129;;;;;;;;;;;;;;;;;5160:16;;;;:::i;:::-;;;;4863:320;;4845:16;;;;;:::i;:::-;;;;4778:405;;;;4600:587;;;4532:655;:::o;5504:292::-;5635:19;;5598:6;;;5661:101;5684:6;5680:10;;:1;:10;;;5661:101;;;5737:8;-1:-1:-1;;;;;5709:36:129;;:2;:12;;5722:1;5709:15;;;;;;;;;;:::i;:::-;;;;;;;;;;:24;-1:-1:-1;;;5709:24:129;;;;-1:-1:-1;;;;;;5709:36:129;;5705:50;;;5754:1;-1:-1:-1;5747:8:129;;-1:-1:-1;5747:8:129;5705:50;5692:3;;;;:::i;:::-;;;;5661:101;;;-1:-1:-1;5775:16:129;;5504:292;-1:-1:-1;;;;5504:292:129:o;221:150:486:-;-1:-1:-1;;;;;315:31:486;;305:42;;295:70;;361:1;358;351:12;376:482;500:6;508;561:2;549:9;540:7;536:23;532:32;529:52;;;577:1;574;567:12;529:52;616:9;603:23;635:50;679:5;635:50;:::i;:::-;704:5;-1:-1:-1;761:2:486;746:18;;733:32;774:52;733:32;774:52;:::i;:::-;845:7;835:17;;;376:482;;;;;:::o;1293:658::-;1464:2;1516:21;;;1586:13;;1489:18;;;1608:22;;;1435:4;;1464:2;1687:15;;;;1661:2;1646:18;;;1435:4;1730:195;1744:6;1741:1;1738:13;1730:195;;;1809:13;;-1:-1:-1;;;;;1805:39:486;1793:52;;1900:15;;;;1865:12;;;;1841:1;1759:9;1730:195;;;-1:-1:-1;1942:3:486;;1293:658;-1:-1:-1;;;;;;1293:658:486:o;2647:294::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:50;2905:5;2861:50;:::i;:::-;2930:5;2647:294;-1:-1:-1;;;2647:294:486:o;3665:127::-;3726:10;3721:3;3717:20;3714:1;3707:31;3757:4;3754:1;3747:15;3781:4;3778:1;3771:15;3797:275;3868:2;3862:9;3933:2;3914:13;;-1:-1:-1;;3910:27:486;3898:40;;3968:18;3953:34;;3989:22;;;3950:62;3947:88;;;4015:18;;:::i;:::-;4051:2;4044:22;3797:275;;-1:-1:-1;3797:275:486:o;4077:764::-;4146:6;4177:2;4220;4208:9;4199:7;4195:23;4191:32;4188:52;;;4236:1;4233;4226:12;4188:52;4276:9;4263:23;4305:18;4346:2;4338:6;4335:14;4332:34;;;4362:1;4359;4352:12;4332:34;4400:6;4389:9;4385:22;4375:32;;4445:7;4438:4;4434:2;4430:13;4426:27;4416:55;;4467:1;4464;4457:12;4416:55;4503:2;4490:16;4525:2;4521;4518:10;4515:36;;;4531:18;;:::i;:::-;4573:53;4616:2;4597:13;;-1:-1:-1;;4593:27:486;4589:36;;4573:53;:::i;:::-;4560:66;;4649:2;4642:5;4635:17;4689:7;4684:2;4679;4675;4671:11;4667:20;4664:33;4661:53;;;4710:1;4707;4700:12;4661:53;4765:2;4760;4756;4752:11;4747:2;4740:5;4736:14;4723:45;4809:1;4788:14;;;4784:23;;;4777:34;;;;-1:-1:-1;4792:5:486;4077:764;-1:-1:-1;;;4077:764:486:o;5886:127::-;5947:10;5942:3;5938:20;5935:1;5928:31;5978:4;5975:1;5968:15;6002:4;5999:1;5992:15;6018:127;6079:10;6074:3;6070:20;6067:1;6060:31;6110:4;6107:1;6100:15;6134:4;6131:1;6124:15;6150:135;6189:3;-1:-1:-1;;6210:17:486;;6207:43;;;6230:18;;:::i;:::-;-1:-1:-1;6277:1:486;6266:13;;6150:135::o;6651:125::-;6691:4;6719:1;6716;6713:8;6710:34;;;6724:18;;:::i;:::-;-1:-1:-1;6761:9:486;;6651:125::o;6781:127::-;6842:10;6837:3;6833:20;6830:1;6823:31;6873:4;6870:1;6863:15;6897:4;6894:1;6887:15;6913:175;6950:3;6994:4;6987:5;6983:16;7023:4;7014:7;7011:17;7008:43;;;7031:18;;:::i;:::-;7080:1;7067:15;;6913:175;-1:-1:-1;;6913:175:486:o;7445:1120::-;7539:6;7570:2;7613;7601:9;7592:7;7588:23;7584:32;7581:52;;;7629:1;7626;7619:12;7581:52;7662:9;7656:16;7691:18;7732:2;7724:6;7721:14;7718:34;;;7748:1;7745;7738:12;7718:34;7786:6;7775:9;7771:22;7761:32;;7831:7;7824:4;7820:2;7816:13;7812:27;7802:55;;7853:1;7850;7843:12;7802:55;7882:2;7876:9;7904:2;7900;7897:10;7894:36;;;7910:18;;:::i;:::-;7956:2;7953:1;7949:10;7939:20;;7979:28;8003:2;7999;7995:11;7979:28;:::i;:::-;8041:15;;;8111:11;;;8107:20;;;8072:12;;;;8139:19;;;8136:39;;;8171:1;8168;8161:12;8136:39;8195:11;;;;8215:320;8231:6;8226:3;8223:15;8215:320;;;8298:10;;;-1:-1:-1;;;;;;;8341:32:486;;8331:43;;8321:141;;8416:1;8445:2;8441;8434:14;8321:141;8475:18;;;8248:12;;;;8513;;;;8215:320;;;8554:5;7445:1120;-1:-1:-1;;;;;;;;7445:1120:486:o;8570:127::-;8631:10;8626:3;8622:20;8619:1;8612:31;8662:4;8659:1;8652:15;8686:4;8683:1;8676:15;8702:197;8740:3;8768:6;8809:2;8802:5;8798:14;8836:2;8827:7;8824:15;8821:41;;;8842:18;;:::i;:::-;8891:1;8878:15;;8702:197;-1:-1:-1;;;8702:197:486:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_listExtensions()": "6333d001", + "_registerExtension(address,address)": "89cd9855", + "acceptOwnership()": "79ba5097", + "ap()": "3c4f743c", + "asExtension()": "dc54bc81", + "customUniV3Router(address,address)": "c8ff6fee", + "defaultOutputToken(address)": "8db87c27", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "redemptionStrategiesByName(string)": "dee7fe48", + "redemptionStrategiesByTokens(address,address)": "a700f9e4", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b", + "uniswapV3Fees(address,address)": "398cd955" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LiquidatorsRegistryExtension.json b/packages/sdk/deployments/mode/LiquidatorsRegistryExtension.json new file mode 100644 index 0000000000..e8e654c8d2 --- /dev/null +++ b/packages/sdk/deployments/mode/LiquidatorsRegistryExtension.json @@ -0,0 +1,1480 @@ +{ + "address": "0xdd7F712Af76074993F05C0d544331792997Bd39b", + "abi": [ + { + "inputs": [], + "name": "NoRedemptionPath", + "type": "error" + }, + { + "inputs": [], + "name": "OutputTokenMismatch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC20Upgradeable", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20Upgradeable", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "prevValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "SlippageUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "MAX_SLIPPAGE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "name": "amountOutAndSlippageOfSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ap", + "outputs": [ + { + "internalType": "contract AddressesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "customUniV3Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "defaultOutputToken", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllRedemptionStrategies", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "name": "getInputTokensByOutputToken", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "name": "getRedemptionStrategies", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategiesData", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "name": "getRedemptionStrategy", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "name": "getSlippage", + "outputs": [ + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "redemptionStrategiesByName", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "redemptionStrategiesByTokens", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "uniswapV3Fees", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x52ef47aeb7b7a44fab748cf6fe258cf99942f7a885acfc73633e540af9a5f66a", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xdd7F712Af76074993F05C0d544331792997Bd39b", + "transactionIndex": 1, + "gasUsed": "4421597", + "logsBloom": "0x00000000000000000000000000008000000000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000000000000000000", + "blockHash": "0x7ea389d42404862d51d3da68f6bbfcfa3bacb1c3a12f235ad18e5177614e2e30", + "transactionHash": "0x52ef47aeb7b7a44fab748cf6fe258cf99942f7a885acfc73633e540af9a5f66a", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097634, + "transactionHash": "0x52ef47aeb7b7a44fab748cf6fe258cf99942f7a885acfc73633e540af9a5f66a", + "address": "0xdd7F712Af76074993F05C0d544331792997Bd39b", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x7ea389d42404862d51d3da68f6bbfcfa3bacb1c3a12f235ad18e5177614e2e30" + } + ], + "blockNumber": 2097634, + "cumulativeGasUsed": "4472098", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "type": "error", + "name": "NoRedemptionPath" + }, + { + "inputs": [], + "type": "error", + "name": "OutputTokenMismatch" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "prevValue", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newValue", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "SlippageUpdated", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "MAX_SLIPPAGE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "amountOutAndSlippageOfSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ap", + "outputs": [ + { + "internalType": "contract AddressesProvider", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "customUniV3Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "defaultOutputToken", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllRedemptionStrategies", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getInputTokensByOutputToken", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRedemptionStrategies", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategiesData", + "type": "bytes[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRedemptionStrategy", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSlippage", + "outputs": [ + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByName", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByTokens", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapV3Fees", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/liquidators/registry/LiquidatorsRegistryExtension.sol": "LiquidatorsRegistryExtension" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/bomb/IXBomb.sol": { + "keccak256": "0x7bab8191e350a68203996c0d99a5c075307ad421c98142072f9b5312534bff9b", + "urls": [ + "bzz-raw://70ada9803810fff6a8d907a50da72dc95eb75267060b5a71c899cd244d970638", + "dweb:/ipfs/QmcMaYsCbFhoKJLGza4F9hy86cvEhjq492Y65pVzZB8jUj" + ], + "license": null + }, + "contracts/external/curve/ICurvePool.sol": { + "keccak256": "0x41770e1ed75224a030ca961ee216ecfae2d16968234f7fab4b7427aa575b9acc", + "urls": [ + "bzz-raw://238efef35bb6b8d38b6fd6cb0985d936daf20bdac4ec9ab041fc2c5939635fcc", + "dweb:/ipfs/QmRhzTppsXSYGc36rMPT31eVVehkfpECbdBoKq2Xvq1ofi" + ], + "license": "UNLICENSED" + }, + "contracts/external/curve/ICurveV2Pool.sol": { + "keccak256": "0x8450c23787d2b4823367dbff5580f2e55a36ad7fd57a4561d3361612f37a1d98", + "urls": [ + "bzz-raw://5d06b0a68ee8b32c86077bf4cb1944dc6b1d841df030199223c2434456d7fe78", + "dweb:/ipfs/QmZRKiwjT2QsXM9w5qLEY92sWMFF7HNP9LXCFAYqtzyvxS" + ], + "license": "UNLICENSED" + }, + "contracts/external/saddle/ISwap.sol": { + "keccak256": "0x18a574d7aff6a6ebd2c086820f98c476b3a4324fe5f735732e71c7d306bf9f70", + "urls": [ + "bzz-raw://fda761e2e52dac4d8d9a403d84abff870918e47b2d744f20802c60e086ccc42b", + "dweb:/ipfs/QmeMbmEXfeej6XRunwdadqJC4ESSFjgxcLRdh8H9ZN2jQU" + ], + "license": "MIT" + }, + "contracts/external/solidly/IPair.sol": { + "keccak256": "0xd13d4e85d4d16d46d2df3f1a8f5f1bcc6762f9d8ae0aa807847ea644ce0d0f72", + "urls": [ + "bzz-raw://e3d9cafc90f8849b3051628a3d6f74c688854889805bf1fa119e578875c48fb3", + "dweb:/ipfs/QmWRurHXNAVpCcWJqZkx9tN5qgfDaqGEPqQGLmTzXmJApT" + ], + "license": "MIT" + }, + "contracts/external/solidly/IRouter.sol": { + "keccak256": "0x1b0243564ad8f92731f75038da17d97be2c2d8bebd5c6fa3a565d5d367909260", + "urls": [ + "bzz-raw://a47f4e14934e1452b5370e4267e43b4e6f98fd7a0d78bb79df04bf3ecd5d1204", + "dweb:/ipfs/QmWPVmf51r3ZjNGphbz2ws6qJNkXubZVXG2ybqtfkyf4b4" + ], + "license": null + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AddressesProvider.sol": { + "keccak256": "0xf48e9e8b2150408c1c6b68dd957226c342ba47396da792fdaa0922f539a7e163", + "urls": [ + "bzz-raw://43c0a6c40861da4c19b67da9faee7df21572020e2d863611080a9181acc3ba3a", + "dweb:/ipfs/QmQpPDVAYTba8R9N1fGggzkG7JhUFVbAhxdfNw9xofVi4m" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/XBombLiquidatorFunder.sol": { + "keccak256": "0x5d7004618ff58b831b7cdab4c1bb5d1997c94e9255915e4bbc58d11e257f2934", + "urls": [ + "bzz-raw://4414cbcb281990689913d23d01e09ff3b0f8b320d831e149be0796cee76b2d20", + "dweb:/ipfs/QmSYguBZYx3XkEBCXiiZ1QASpH598jVYoF6P5GcHMdDDBz" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/LiquidatorsRegistryExtension.sol": { + "keccak256": "0xa10c9d271ea0cab4b495b6a9736ba15375c9ecff2d52ac18e969feb3912f7a06", + "urls": [ + "bzz-raw://debf7bcabb356e16e523d87d88296112af5e7622d44011673483a555ef7dde13", + "dweb:/ipfs/QmScYXtibdfsiKMyZh7VpZx1mZpbegqzDN8k9LgpYqKArC" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/registry/LiquidatorsRegistryStorage.sol": { + "keccak256": "0x95840e79c504ab6ee1d0cf9ff5fcec2424a64dc6ed57f0bf4831f65c89fc9109", + "urls": [ + "bzz-raw://29825087d3eeaca7516168043f1b046b280816195ed31f13cbdb7444ecb3b012", + "dweb:/ipfs/QmVa9kZx9gRvvUr8RbLRZKWseEMntoQ2CZmQ3TraSF9pa1" + ], + "license": "GPL-3.0" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x9807f66d6f8aa8005c3e4da70b7dc64d16daeccd02bc865a49d809e0094a81a2", + "urls": [ + "bzz-raw://12d8bf913ca8d8051c62a803204ed899e011efeda842e90639f3c8e5fe0270cf", + "dweb:/ipfs/Qmd8bXgWwamyWgk4AGFQE4N6JGMtXBw9mDqAYH27sVPLKY" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/CurveLpTokenPriceOracleNoRegistry.sol": { + "keccak256": "0x49016dd76e69d5c874f0888e743560fe0a6e71eac40ba0e009d2bd31e4255baa", + "urls": [ + "bzz-raw://ae88e6c1e7ec2bd8615d2277c4f9ad5a036d28631be8abe8bf7e450b678a37c2", + "dweb:/ipfs/QmRPBcV1koBcUqBJRP7wCgC6iVZyu8sS7ahqYj547mEpy2" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/CurveV2LpTokenPriceOracleNoRegistry.sol": { + "keccak256": "0x70596141564721af07d04f869b602d8f3a96282009e64002dbd0f2bb73609e87", + "urls": [ + "bzz-raw://1b6dac6960db01feac138ac194355a6c030dc1ef5dba8cd3ff0b8efa14f6e6e3", + "dweb:/ipfs/QmddVZpSKHL5StzrE1RQ1YDQzK7bNAQNGEGmvxu3RnuXcH" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/SaddleLpPriceOracle.sol": { + "keccak256": "0x074f866fc724084ddf4ccf41f0f2f02abc98aa3453251fd898208adf108dd5ed", + "urls": [ + "bzz-raw://b867f7e510ee9edfa756b373f12a9479b988b648891e0929a5cc8f220b507406", + "dweb:/ipfs/QmbnvVtbAQ6CFoY7n4eQRhMFYzkARGaZDme46LBuq74WeV" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040523480156200001157600080fd5b506200001d3362000023565b6200009d565b600180546001600160a01b03191690556200004a816200004d602090811b620014d317901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b614e8080620000ad6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a6fdd2bb116100ad578063e30c397811610071578063e30c39781461031f578063ed287f3f14610330578063f2fde38b14610351578063f560cebd14610364578063f97595181461038c57600080fd5b8063a6fdd2bb1461025a578063a700f9e414610262578063b6b928fd14610296578063c8ff6fee146102b7578063dee7fe48146102eb57600080fd5b8063715018a6116100f4578063715018a6146101f957806379ba50971461020357806389f8132e1461020b5780638da5cb5b146102205780638db87c271461023157600080fd5b80632f53ef2b14610131578063398cd955146101575780633c4f743c1461019b578063403de57f146101c65780636d069a67146101e6575b600080fd5b61014461013f366004614426565b610395565b6040519081526020015b60405180910390f35b610187610165366004614426565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff909116815260200161014e565b6002546101ae906001600160a01b031681565b6040516001600160a01b03909116815260200161014e565b6101d96101d436600461445f565b6103cb565b60405161014e91906144c0565b6101446101f43660046144d3565b6103ef565b61020161042d565b005b610201610482565b6102136104fc565b60405161014e9190614515565b6000546001600160a01b03166101ae565b6101ae61023f36600461445f565b6007602052600090815260409020546001600160a01b031681565b6101d961073d565b6101ae610270366004614426565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6102a96102a4366004614426565b61074e565b60405161014e9291906145bb565b6101ae6102c5366004614426565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b6101ae6102f936600461464f565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6001546001600160a01b03166101ae565b61034361033e366004614426565b610dce565b60405161014e9291906146e4565b61020161035f36600461445f565b611147565b6103776103723660046144d3565b6111b8565b6040805192835260208301919091520161014e565b61014461038481565b6001600160a01b038083166000908152600b6020908152604080832093851683529290522054806103c557506103845b92915050565b6001600160a01b03811660009081526008602052604090206060906103c590611523565b60006104066001600160a01b038516333086611530565b61041084836115a1565b90506104266001600160a01b0383163383611763565b9392505050565b610435611798565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b031681146104f05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610479565b6104f9816117f4565b50565b604080516007808252610100820190925260609190600090826020820160e08036833701905050905063ed287f3f60e01b816105378461479b565b93508360ff168151811061054d5761054d6147b8565b6001600160e01b03199092166020928302919091019091015263b6b928fd60e01b816105788461479b565b93508360ff168151811061058e5761058e6147b8565b6001600160e01b03199092166020928302919091019091015263403de57f60e01b816105b98461479b565b93508360ff16815181106105cf576105cf6147b8565b6001600160e01b031990921660209283029190910190910152636d069a6760e01b816105fa8461479b565b93508360ff1681518110610610576106106147b8565b6001600160e01b03199092166020928302919091019091015263a6fdd2bb60e01b8161063b8461479b565b93508360ff1681518110610651576106516147b8565b6001600160e01b03199092166020928302919091019091015263f560cebd60e01b8161067c8461479b565b93508360ff1681518110610692576106926147b8565b6001600160e01b031990921660209283029190910190910152632f53ef2b60e01b816106bd8461479b565b93508360ff16815181106106d3576106d36147b8565b6001600160e01b03199092166020928302919091019091015260ff8216156103c55760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610479565b60606107496003611523565b905090565b6001600160a01b0380831660009081526006602090815260408083208585168452825291829020548251808401909352601583527429b7b634b2363ca9bbb0b82634b8bab4b230ba37b960591b91830191909152909116906060906107b490839061180d565b156107ca576107c38484611857565b9050610dc7565b610809826040518060400160405280601881526020017f536f6c69646c794c70546f6b656e4c697175696461746f72000000000000000081525061180d565b15610818576107c38484611d28565b610857826040518060400160405280601981526020017f556e697377617056324c697175696461746f7246756e6465720000000000000081525061180d565b15610866576107c38484611f33565b6108a5826040518060400160405280601981526020017f556e697377617056334c697175696461746f7246756e6465720000000000000081525061180d565b156108b4576107c38484611fdb565b6108eb826040518060400160405280601581526020017420b633b2b13930a9bbb0b82634b8bab4b230ba37b960591b81525061180d565b156108fa576107c38484612126565b610939826040518060400160405280601d81526020017f47616d6d61416c67656272614c70546f6b656e4c697175696461746f7200000081525061180d565b15610948576107c384846121f3565b610987826040518060400160405280601f81526020017f47616d6d61556e697377617056334c70546f6b656e4c697175696461746f720081525061180d565b15610996576107c38484612252565b6109ce82604051806040016040528060168152602001752130b630b731b2b929bbb0b82634b8bab4b230ba37b960511b81525061180d565b156109dd576107c384846122b5565b610a1c826040518060400160405280601881526020017f556e69737761704c70546f6b656e4c697175696461746f72000000000000000081525061180d565b80610a585750610a58826040518060400160405280601481526020017323b2b630ba37a3aab734a634b8bab4b230ba37b960611b81525061180d565b15610a67576107c384846123c1565b610aa6826040518060400160405280601781526020017f536164646c654c70546f6b656e4c697175696461746f7200000000000000000081525061180d565b15610ab5576107c38484612687565b610af4826040518060400160405280602081526020017f43757276654c70546f6b656e4c697175696461746f724e6f526567697374727981525061180d565b15610b03576107c38484612866565b610b38826040518060400160405280601381526020017221bab93b32a9bbb0b82634b8bab4b230ba37b960691b81525061180d565b15610b47576107c38484612a4a565b610b7c826040518060400160405280601381526020017221bab93b32a6382a37b5b2b72bb930b83832b960691b81525061180d565b15610b8b576107c38484612c37565b610bc382604051806040016040528060168152602001752530b93b34b9a634b8bab4b230ba37b9233ab73232b960511b81525061180d565b15610bd2576107c38484612cde565b610c0982604051806040016040528060158152602001742c2137b6b12634b8bab4b230ba37b9233ab73232b960591b81525061180d565b15610c18576107c38484612e76565b610c57826040518060400160405280601981526020017f42616c616e6365724c70546f6b656e4c697175696461746f720000000000000081525061180d565b15610c66576107c38484613045565b610c9b826040518060400160405280601381526020017220b0bb32aa37b5b2b72634b8bab4b230ba37b960691b81525061180d565b15610caa576107c38484613045565b610ce9826040518060400160405280601a81526020017f47616d6d61416c67656272614c70546f6b656e5772617070657200000000000081525061180d565b15610cf8576107c38484613061565b610d37826040518060400160405280601c81526020017f47616d6d61556e697377617056334c70546f6b656e577261707065720000000081525061180d565b15610d46576107c384846131b8565b610d7d826040518060400160405280601581526020017429b7b634b2363ca6382a37b5b2b72bb930b83832b960591b81525061180d565b15610d8c576107c384846132bc565b60405162461bcd60e51b815260206004820152601060248201526f6e6f207374726174656779206461746160801b6044820152606401610479565b9250929050565b60408051600a80825261016082019092526060918291859185916000916020820161014080368337505060408051600a80825261016082019092529293506000929150602082015b6060815260200190600190039081610e1657505060408051600a808252610160820190925291925060009190602082016101408036833701905050905060005b846001600160a01b0316866001600160a01b031614610ff5576001600160a01b03808716600090815260066020908152604080832089851684529091528120549091168015610ea757869150610ec5565b6001600160a01b038089166000908152600760205260409020541691505b60005b8451811015610f1b57848181518110610ee357610ee36147b8565b60200260200101516001600160a01b0316836001600160a01b03161415610f0957610f1b565b80610f13816147ce565b915050610ec8565b50600080610f298a8561074e565b90925090506001600160a01b038216610f455750505050610ff5565b81888681518110610f5857610f586147b8565b60200260200101906001600160a01b031690816001600160a01b03168152505080878681518110610f8b57610f8b6147b8565b602002602001018190525083868681518110610fa957610fa96147b8565b60200260200101906001600160a01b031690816001600160a01b0316815250508399508480610fd7906147ce565b95505084600a1415610fec5750505050610ff5565b50505050610e56565b8067ffffffffffffffff81111561100e5761100e6145df565b604051908082528060200260200182016040528015611037578160200160208202803683370190505b5097508067ffffffffffffffff811115611053576110536145df565b60405190808252806020026020018201604052801561108657816020015b60608152602001906001900390816110715790505b50965060005b818160ff16101561113957848160ff16815181106110ac576110ac6147b8565b6020026020010151898260ff16815181106110c9576110c96147b8565b60200260200101906001600160a01b031690816001600160a01b031681525050838160ff16815181106110fe576110fe6147b8565b6020026020010151888260ff168151811061111b5761111b6147b8565b60200260200101819052508080611131906147e9565b91505061108c565b505050505050509250929050565b61114f611798565b600180546001600160a01b0383166001600160a01b031990911681179091556111806000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080836111cb575060009050806114cb565b6111d68585856103ef565b9150816111e8575060009050806114cb565b60025460405163bf40fac160e01b81526020600482015260116024820152704d617374657250726963654f7261636c6560781b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112779190614809565b6040516315d5220f60e31b81526001600160a01b03888116600483015291925060009183169063aea9107890602401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190614826565b6040516315d5220f60e31b81526001600160a01b03878116600483015291925060009184169063aea9107890602401602060405180830381865afa158015611333573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113579190614826565b90506000611365838a6138ba565b61136f908961483f565b9050600061137d83896138ba565b611387908861483f565b9050818110156113b5578161139c828261485e565b6113a89061271061483f565b6113b29190614875565b95505b6113c0600187614897565b6001600160a01b03808c166000908152600b60209081526040808320938d168352929052205490965080158061142757506001600160a01b03808c166000908152600c60209081526040808320938d168352929052205461138890611425904261485e565b115b156114c457886001600160a01b03168b6001600160a01b03167f5d4661f2f390321d7ed6695cf1f19cd360bafab39b6dc6e06e5b48f1653486a1838a60405161147a929190918252602082015260400190565b60405180910390a36001600160a01b03808c166000818152600b60209081526040808320948e168084529482528083208c9055928252600c81528282209382529290925290204290555b5050505050505b935093915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006104268361397a565b6040516001600160a01b038085166024830152831660448201526064810182905261159b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526139d6565b50505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160e9190614826565b905060008061161d8686610dce565b9150915081516000141561164457604051631aa27a4d60e21b815260040160405180910390fd5b858360005b84518110156116bc576000858281518110611666576116666147b8565b602002602001015190506000858381518110611684576116846147b8565b6020026020010151905060008061169d87878686613aa8565b90975095508493506116b492508391506147ce9050565b915050611649565b50866001600160a01b0316826001600160a01b0316146116ef5760405163fdbb00c560e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190614826565b98975050505050505050565b6040516001600160a01b03831660248201526044810182905261179390849063a9059cbb60e01b90606401611564565b505050565b6000546001600160a01b031633146117f25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610479565b565b600180546001600160a01b03191690556104f9816114d3565b60006001600160a01b03831615801590610426575060058260405161183291906148af565b908152604051908190036020019020546001600160a01b038481169116149392505050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac19061188b906004016148cb565b602060405180830381865afa1580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cc9190614809565b60405163260f701f60e11b815290915083906000906001600160a01b03841690634c1ee03e90611904908990869086906004016148f8565b602060405180830381865afa158015611921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119459190614809565b90506000836001600160a01b0316634c1ee03e888560016040518463ffffffff1660e01b815260040161197a939291906148f8565b602060405180830381865afa158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190614809565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192509085169063e5e31b1390602401602060405180830381865afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a29919061491c565b80611a99575060405163e5e31b1360e01b81526001600160a01b03838116600483015285169063e5e31b1390602401602060405180830381865afa158015611a75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a99919061491c565b611af15760405162461bcd60e51b8152602060048201526024808201527f496e76616c696420536f6c69646c794c697175696461746f722073776170207060448201526330ba341760e11b6064820152608401610479565b60405163e5e31b1360e01b81526001600160a01b0382811660048301526000919086169063e5e31b1390602401602060405180830381865afa158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f919061491c565b611b6b57506000611cf7565b60405163e5e31b1360e01b81526001600160a01b03848116600483015286169063e5e31b1390602401602060405180830381865afa158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd5919061491c565b611be157506001611cf7565b600080866001600160a01b0316635e60dab58b8860016040518463ffffffff1660e01b8152600401611c15939291906148f8565b6040805180830381865afa158015611c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c55919061493e565b91509150600080886001600160a01b0316635e60dab58d8a60006040518463ffffffff1660e01b8152600401611c8d939291906148f8565b6040805180830381865afa158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd919061493e565b915091508184118015611cdf57508083115b15611ced5760019450611cf2565b600094505b505050505b848782604051602001611d0c939291906148f8565b6040516020818303038152906040529550505050505092915050565b60606000839050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d919190614809565b6001600160a01b0316836001600160a01b03161480611e225750806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0d9190614809565b6001600160a01b0316836001600160a01b0316145b611e8d5760405162461bcd60e51b815260206004820152603660248201527f4f757470757420746f6b656e20646f6573206e6f74206d6174636820656974686044820152756572206f6620746865207061697220746f6b656e732160501b6064820152608401610479565b60025460405163bf40fac160e01b81526001600160a01b039091169063bf40fac190611ebb906004016148cb565b602060405180830381865afa158015611ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efc9190614809565b604080516001600160a01b039283166020820152918516908201526060015b60405160208183030381529060405291505092915050565b604080516002808252606080830184529260009291906020830190803683370190505090508381600081518110611f6c57611f6c6147b8565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611fa057611fa06147b8565b60200260200101906001600160a01b031690816001600160a01b031681525050611fc984613b29565b81604051602001611f1b929190614962565b6001600160a01b038083166000908152600d602090815260408083209385168352929052205460609062ffffff168061203b57506001600160a01b038083166000908152600d602090815260408083209387168352929052205462ffffff165b60006120478585613bb9565b60025460405163bf40fac160e01b815260206004820152600660248201526528bab7ba32b960d11b604482015291925086918691859185916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190614809565b604080516001600160a01b0396871660208201529486169085015262ffffff9092166060840152831660808301529190911660a082015260c0016040516020818303038152906040529250505092915050565b60025460405163bf40fac160e01b815260206004820152601360248201527220a623a2a12920afa9aba0a82fa927aaaa22a960691b604482015260609183916001600160a01b039091169063bf40fac1906064015b602060405180830381865afa158015612198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bc9190614809565b604080516001600160a01b03938416602082015292909116908201526060015b604051602081830303815290604052905092915050565b60025460405163bf40fac160e01b815260206004820152601960248201527823a0a6a6a0afa0a623a2a12920afa9aba0a82fa927aaaa22a960391b604482015260609183916001600160a01b039091169063bf40fac19060640161217b565b60025460405163bf40fac160e01b815260206004820152601c60248201527f47414d4d415f554e49535741505f56335f535741505f524f5554455200000000604482015260609183916001600160a01b039091169063bf40fac19060640161217b565b60025460405163959fc09760e01b81526001600160a01b038481166004830152838116602483015260609260009291169063959fc09790604401602060405180830381865afa15801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190614809565b90506001600160a01b03811661239c5760405162461bcd60e51b815260206004820152602b60248201527f4e6f2062616c616e63657220706f6f6c20666f756e6420666f7220746865206760448201526a6976656e20746f6b656e7360a81b6064820152608401610479565b604080516001600160a01b038086166020830152831691810191909152606001611f1b565b606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242c9190614809565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124929190614809565b90506001600160a01b0385811681841681149183161481806124b15750805b61251b5760405162461bcd60e51b815260206004820152603560248201527f4f757470757420746f6b656e20646f6573206e6f74206d6174636820656974686044820152746572206f6620746865207061697220746f6b656e7360581b6064820152608401610479565b60608083156125bb576040805160008152600260208201818152608083018452919450909184810190803683370190505090508481600081518110612562576125626147b8565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110612596576125966147b8565b60200260200101906001600160a01b031690816001600160a01b03168152505061264c565b5060408051600081526002602082018181526080830184529192838101908036833701905050915085826000815181106125f7576125f76147b8565b60200260200101906001600160a01b031690816001600160a01b031681525050848260018151811061262b5761262b6147b8565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6126558a613b29565b8282604051602001612669939291906149be565b60405160208183030381529060405297505050505050505092915050565b60025460405163bf40fac160e01b8152602060048201526013602482015272536164646c654c7050726963654f7261636c6560681b60448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156126f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271d9190614809565b60405163195b70b960e21b81526001600160a01b03868116600483015291925060009183169063656dc2e490602401600060405180830381865afa158015612769573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127919190810190614a22565b60025460405163bf40fac160e01b81529192506000916001600160a01b039091169063bf40fac1906127c590600401614ab6565b602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190614809565b905060006128148387613cbe565b9050806001600160a01b0381161580612849575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316145b156128515750815b818584604051602001611d0c93929190614ad6565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac19061289a90600401614af9565b602060405180830381865afa1580156128b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128db9190614809565b60405163988b1fa760e01b81526001600160a01b03868116600483015291925060009183169063988b1fa790602401602060405180830381865afa158015612927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294b9190614809565b9050600061295882613fd9565b905060006129668287613cbe565b60025460405163bf40fac160e01b815291925082916000916001600160a01b03169063bf40fac19061299a90600401614ab6565b602060405180830381865afa1580156129b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129db9190614809565b90506001600160a01b0383161580612a0f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038416145b15612a18578091505b828187604051602001612a2d93929190614ad6565b604051602081830303815290604052965050505050505092915050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac190612a7e90600401614af9565b602060405180830381865afa158015612a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abf9190614809565b60025460405163bf40fac160e01b815260206004820152602360248201527f437572766556324c70546f6b656e50726963654f7261636c654e6f526567697360448201526274727960e81b60648201529192506000916001600160a01b039091169063bf40fac190608401602060405180830381865afa158015612b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6b9190614809565b60025460405163bf40fac160e01b81529192506000916001600160a01b039091169063bf40fac190612b9f90600401614ab6565b602060405180830381865afa158015612bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be09190614809565b604080516001600160a01b038087166020830152808616928201929092528189166060820152818816608082015290821660a082015290915060c0015b604051602081830303815290604052935050505092915050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac190612c6b90600401614af9565b602060405180830381865afa158015612c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cac9190614809565b60405163988b1fa760e01b81526001600160a01b0385811660048301529192509082169063988b1fa790602401611ebb565b60606000600260009054906101000a90046001600160a01b03166001600160a01b03166377d792196040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d9190810190614b3a565b905060005b8151811015612e6e576000828281518110612d7f57612d7f6147b8565b60200260200101519050856001600160a01b031681600001516001600160a01b03161415612deb57805160408083015160609384015182516001600160a01b03948516602082015293909116838301528284015280518083039093018352608090910190529250612e6e565b856001600160a01b031681602001516001600160a01b03161415612e5b57806020015181604001518260600151604051602001612e49939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405160208183030381529060405293505b5080612e66816147ce565b915050612d62565b505092915050565b60604660381415612eda5760405173af16cb45b8149da403af41c63abfebfbcd16264b9073522348779dcb2911539e76a1042aa922f9c47ee390612ec290869084908490602001614ad6565b604051602081830303815290604052925050506103c5565b73e45589fbad3a1fb90f5b2a8a3e8958a8bab5f768734f1885d25ef219d3d4fa064809d6d4985fab9a0b738870f7102f1dcb1c35b01af10f1baf1b00ad6805733d312b224dec414fe865e1e9bfc13e2a86947d19738146293bf5225b471625372e985fdb7165c35fe26001600160a01b038816851415612fc2576000846001600160a01b0316886001600160a01b03161415612f77575081612f94565b836001600160a01b0316886001600160a01b03161415612f945750805b8081898a604051602001612fab9493929190614c14565b60405160208183030381529060405296505061303a565b836001600160a01b0316886001600160a01b031614156130095787828987604051602001612ff39493929190614c14565b604051602081830303815290604052955061303a565b826001600160a01b0316886001600160a01b0316141561303a5787818987604051602001611d0c9493929190614c14565b505050505092915050565b604080516001600160a01b0383166020820152606091016121dc565b60025460405163bf40fac160e01b815260206004820152601960248201527823a0a6a6a0afa0a623a2a12920afa9aba0a82fa927aaaa22a960391b60448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156130d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fd9190614809565b60025460405163bf40fac160e01b815260206004820152601760248201527f47414d4d415f414c47454252415f554e495f50524f585900000000000000000060448201529192506000916001600160a01b039091169063bf40fac1906064015b602060405180830381865afa15801561317a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319e9190614809565b6040519091508490612c1d90849084908490602001614ad6565b60025460405163bf40fac160e01b815260206004820152601c60248201527f47414d4d415f554e49535741505f56335f535741505f524f555445520000000060448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132589190614809565b60025460405163bf40fac160e01b815260206004820152601a60248201527f47414d4d415f554e49535741505f56335f554e495f50524f585900000000000060448201529192506000916001600160a01b039091169063bf40fac19060640161315d565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac1906132f0906004016148cb565b602060405180830381865afa15801561330d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133319190614809565b6040805160018082528183019092529192508491600091816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161334d57505060408051600180825281830190925291925060009190602082015b60408051606081018252600080825260208083018290529282015282526000199092019101816133945790505090506000876001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561340d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134319190614809565b6001600160a01b03161490506000886001600160a01b0316856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ab9190614809565b6001600160a01b031614905081806134c05750805b61350c5760405162461bcd60e51b815260206004820152601b60248201527f21696e70757420746f6b656e206e6f7420756e6465726c79696e6700000000006044820152606401610479565b846001600160a01b03166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561354a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356e919061491c565b84600081518110613581576135816147b8565b60200260200101516040019015159081151581525050846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f99190614809565b8460008151811061360c5761360c6147b8565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190614809565b846000815181106136a5576136a56147b8565b6020026020010151602001906001600160a01b031690816001600160a01b031681525050846001600160a01b03166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372b919061491c565b8360008151811061373e5761373e6147b8565b60200260200101516040019015159081151581525050846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b69190614809565b836000815181106137c9576137c96147b8565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561382b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384f9190614809565b83600081518110613862576138626147b8565b6020026020010151602001906001600160a01b031690816001600160a01b03168152505050508383838360405160200161389f9493929190614c93565b60405160208183030381529060405294505050505092915050565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391f9190614cd1565b60ff16905060128111156139525761393860128261485e565b61394390600a614dd8565b61394d9085614875565b613972565b61395d81601261485e565b61396890600a614dd8565b613972908561483f565b949350505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156139ca57602002820191906000526020600020905b8154815260200190600101908083116139b6575b50505050509050919050565b6000613a2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661415f9092919063ffffffff16565b8051909150156117935780806020019051810190613a49919061491c565b6117935760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610479565b6000806000613b05856310badf4e60e01b898988604051602401613ace93929190614de4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261416e565b905080806020019051810190613b1b9190614e0b565b925092505094509492505050565b60025460405163bf40fac160e01b815260206004820152601260248201527124aab734b9bbb0b82b192937baba32b9181960711b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613b95573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c59190614809565b6001600160a01b038083166000908152600e60209081526040808320858516845290915281205490911680613c1257506001600160a01b038083166000908152600e602090815260408083208785168452909152902054165b6001600160a01b03811615613c285790506103c5565b60025460405163bf40fac160e01b81526020600482015260116024820152702aa724a9aba0a82fab19afa927aaaa22a960791b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015613c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb69190614809565b9150506103c5565b6000805b8351811015613d1957826001600160a01b0316848281518110613ce757613ce76147b8565b60200260200101516001600160a01b03161415613d0757829150506103c5565b80613d11816147ce565b915050613cc2565b5060025460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac190613d4990600401614ab6565b602060405180830381865afa158015613d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8a9190614809565b905060005b8451811015613de557816001600160a01b0316858281518110613db457613db46147b8565b60200260200101516001600160a01b03161415613dd3575090506103c5565b80613ddd816147ce565b915050613d8f565b5060025460405163bf40fac160e01b815260206004820152600b60248201526a39ba30b13632aa37b5b2b760a91b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6f9190614809565b905060005b8551811015613ecc57816001600160a01b0316868281518110613e9957613e996147b8565b60200260200101516001600160a01b03161415613eba575091506103c59050565b80613ec4816147ce565b915050613e74565b5060025460405163bf40fac160e01b81526020600482015260096024820152683ba12a21aa37b5b2b760b91b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f549190614809565b905060005b8651811015613fb257816001600160a01b0316878281518110613f7e57613f7e6147b8565b60200260200101516001600160a01b03161415613fa0575092506103c5915050565b80613faa816147ce565b915050613f59565b5085600081518110613fc657613fc66147b8565b6020026020010151935050505092915050565b606060005b60405163c661065760e01b815260ff821660048201526001600160a01b0384169063c661065790602401602060405180830381865afa925050508015614041575060408051601f3d908101601f1916820190925261403e91810190614809565b60015b61404a5761405d565b5080614055816147e9565b915050613fde565b8060ff1667ffffffffffffffff811115614079576140796145df565b6040519080825280602002602001820160405280156140a2578160200160208202803683370190505b50915060005b8160ff168110156141585760405163c661065760e01b8152600481018290526001600160a01b0385169063c661065790602401602060405180830381865afa1580156140f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411c9190614809565b83828151811061412e5761412e6147b8565b6001600160a01b039092166020928302919091019091015280614150816147ce565b9150506140a8565b5050919050565b60606139728484600085614262565b60606001600160a01b0383163b6141d65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610479565b600080846001600160a01b0316846040516141f191906148af565b600060405180830381855af49150503d806000811461422c576040519150601f19603f3d011682016040523d82523d6000602084013e614231565b606091505b50915091506142598282604051806060016040528060278152602001614e4d6027913961433d565b95945050505050565b6060824710156142c35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610479565b600080866001600160a01b031685876040516142df91906148af565b60006040518083038185875af1925050503d806000811461431c576040519150601f19603f3d011682016040523d82523d6000602084013e614321565b606091505b509150915061433287838387614376565b979650505050505050565b6060831561434c575081610426565b82511561435c5782518084602001fd5b8160405162461bcd60e51b81526004016104799190614e39565b606083156143e25782516143db576001600160a01b0385163b6143db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610479565b5081613972565b61397283838151156143f75781518083602001fd5b8060405162461bcd60e51b81526004016104799190614e39565b6001600160a01b03811681146104f957600080fd5b6000806040838503121561443957600080fd5b823561444481614411565b9150602083013561445481614411565b809150509250929050565b60006020828403121561447157600080fd5b813561042681614411565b600081518084526020808501945080840160005b838110156144b55781516001600160a01b031687529582019590820190600101614490565b509495945050505050565b602081526000610426602083018461447c565b6000806000606084860312156144e857600080fd5b83356144f381614411565b925060208401359150604084013561450a81614411565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156145575783516001600160e01b03191683529284019291840191600101614531565b50909695505050505050565b60005b8381101561457e578181015183820152602001614566565b8381111561159b5750506000910152565b600081518084526145a7816020860160208601614563565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082018190526000906139729083018461458f565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715614618576146186145df565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614647576146476145df565b604052919050565b6000602080838503121561466257600080fd5b823567ffffffffffffffff8082111561467a57600080fd5b818501915085601f83011261468e57600080fd5b8135818111156146a0576146a06145df565b6146b2601f8201601f1916850161461e565b915080825286848285010111156146c857600080fd5b8084840185840137600090820190930192909252509392505050565b604080825283519082018190526000906020906060840190828701845b828110156147265781516001600160a01b031684529284019290840190600101614701565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561477657601f1986840301855261476483835161458f565b94870194925090860190600101614748565b50909998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b600060ff8216806147ae576147ae614785565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156147e2576147e2614785565b5060010190565b600060ff821660ff81141561480057614800614785565b60010192915050565b60006020828403121561481b57600080fd5b815161042681614411565b60006020828403121561483857600080fd5b5051919050565b600081600019048311821515161561485957614859614785565b500290565b60008282101561487057614870614785565b500390565b60008261489257634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156148aa576148aa614785565b500190565b600082516148c1818460208701614563565b9190910192915050565b60208082526013908201527229a7a624a2262cafa9aba0a82fa927aaaa22a960691b604082015260600190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b60006020828403121561492e57600080fd5b8151801515811461042657600080fd5b6000806040838503121561495157600080fd5b505080516020909101519092909150565b6001600160a01b038381168252604060208084018290528451918401829052600092858201929091906060860190855b818110156149b0578551851683529483019491830191600101614992565b509098975050505050505050565b6001600160a01b03841681526060602082018190526000906149e29083018561447c565b82810360408401526149f4818561447c565b9695505050505050565b600067ffffffffffffffff821115614a1857614a186145df565b5060051b60200190565b60006020808385031215614a3557600080fd5b825167ffffffffffffffff811115614a4c57600080fd5b8301601f81018513614a5d57600080fd5b8051614a70614a6b826149fe565b61461e565b81815260059190911b82018301908381019087831115614a8f57600080fd5b928401925b82841015614332578351614aa781614411565b82529284019290840190614a94565b6020808252600690820152653bba37b5b2b760d11b604082015260600190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60208082526021908201527f43757276654c70546f6b656e50726963654f7261636c654e6f526567697374726040820152607960f81b606082015260800190565b60006020808385031215614b4d57600080fd5b825167ffffffffffffffff811115614b6457600080fd5b8301601f81018513614b7557600080fd5b8051614b83614a6b826149fe565b81815260079190911b82018301908381019087831115614ba257600080fd5b928401925b828410156143325760808489031215614bc05760008081fd5b614bc86145f5565b8451614bd381614411565b815284860151614be281614411565b81870152604085810151614bf581614411565b9082015260608581015190820152825260809093019290840190614ba7565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b600081518084526020808501945080840160005b838110156144b557815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101614c53565b6001600160a01b03858116825284166020820152608060408201819052600090614cbf90830185614c3f565b82810360608401526143328185614c3f565b600060208284031215614ce357600080fd5b815160ff8116811461042657600080fd5b600181815b80851115614d2f578160001904821115614d1557614d15614785565b80851615614d2257918102915b93841c9390800290614cf9565b509250929050565b600082614d46575060016103c5565b81614d53575060006103c5565b8160018114614d695760028114614d7357614d8f565b60019150506103c5565b60ff841115614d8457614d84614785565b50506001821b6103c5565b5060208310610133831016604e8410600b8410161715614db2575081810a6103c5565b614dbc8383614cf4565b8060001904821115614dd057614dd0614785565b029392505050565b60006104268383614d37565b60018060a01b0384168152826020820152606060408201526000614259606083018461458f565b60008060408385031215614e1e57600080fd5b8251614e2981614411565b6020939093015192949293505050565b602081526000610426602083018461458f56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000a", + "sourceMap": "1211:27129:230:-:0;;;;;;;;;;;;-1:-1:-1;936:32:452;719:10:466;936:18:452;:32::i;:::-;1211:27129:230;;1496:153:453;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1211:27129:230:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a6fdd2bb116100ad578063e30c397811610071578063e30c39781461031f578063ed287f3f14610330578063f2fde38b14610351578063f560cebd14610364578063f97595181461038c57600080fd5b8063a6fdd2bb1461025a578063a700f9e414610262578063b6b928fd14610296578063c8ff6fee146102b7578063dee7fe48146102eb57600080fd5b8063715018a6116100f4578063715018a6146101f957806379ba50971461020357806389f8132e1461020b5780638da5cb5b146102205780638db87c271461023157600080fd5b80632f53ef2b14610131578063398cd955146101575780633c4f743c1461019b578063403de57f146101c65780636d069a67146101e6575b600080fd5b61014461013f366004614426565b610395565b6040519081526020015b60405180910390f35b610187610165366004614426565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff909116815260200161014e565b6002546101ae906001600160a01b031681565b6040516001600160a01b03909116815260200161014e565b6101d96101d436600461445f565b6103cb565b60405161014e91906144c0565b6101446101f43660046144d3565b6103ef565b61020161042d565b005b610201610482565b6102136104fc565b60405161014e9190614515565b6000546001600160a01b03166101ae565b6101ae61023f36600461445f565b6007602052600090815260409020546001600160a01b031681565b6101d961073d565b6101ae610270366004614426565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6102a96102a4366004614426565b61074e565b60405161014e9291906145bb565b6101ae6102c5366004614426565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b6101ae6102f936600461464f565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6001546001600160a01b03166101ae565b61034361033e366004614426565b610dce565b60405161014e9291906146e4565b61020161035f36600461445f565b611147565b6103776103723660046144d3565b6111b8565b6040805192835260208301919091520161014e565b61014461038481565b6001600160a01b038083166000908152600b6020908152604080832093851683529290522054806103c557506103845b92915050565b6001600160a01b03811660009081526008602052604090206060906103c590611523565b60006104066001600160a01b038516333086611530565b61041084836115a1565b90506104266001600160a01b0383163383611763565b9392505050565b610435611798565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b031681146104f05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610479565b6104f9816117f4565b50565b604080516007808252610100820190925260609190600090826020820160e08036833701905050905063ed287f3f60e01b816105378461479b565b93508360ff168151811061054d5761054d6147b8565b6001600160e01b03199092166020928302919091019091015263b6b928fd60e01b816105788461479b565b93508360ff168151811061058e5761058e6147b8565b6001600160e01b03199092166020928302919091019091015263403de57f60e01b816105b98461479b565b93508360ff16815181106105cf576105cf6147b8565b6001600160e01b031990921660209283029190910190910152636d069a6760e01b816105fa8461479b565b93508360ff1681518110610610576106106147b8565b6001600160e01b03199092166020928302919091019091015263a6fdd2bb60e01b8161063b8461479b565b93508360ff1681518110610651576106516147b8565b6001600160e01b03199092166020928302919091019091015263f560cebd60e01b8161067c8461479b565b93508360ff1681518110610692576106926147b8565b6001600160e01b031990921660209283029190910190910152632f53ef2b60e01b816106bd8461479b565b93508360ff16815181106106d3576106d36147b8565b6001600160e01b03199092166020928302919091019091015260ff8216156103c55760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610479565b60606107496003611523565b905090565b6001600160a01b0380831660009081526006602090815260408083208585168452825291829020548251808401909352601583527429b7b634b2363ca9bbb0b82634b8bab4b230ba37b960591b91830191909152909116906060906107b490839061180d565b156107ca576107c38484611857565b9050610dc7565b610809826040518060400160405280601881526020017f536f6c69646c794c70546f6b656e4c697175696461746f72000000000000000081525061180d565b15610818576107c38484611d28565b610857826040518060400160405280601981526020017f556e697377617056324c697175696461746f7246756e6465720000000000000081525061180d565b15610866576107c38484611f33565b6108a5826040518060400160405280601981526020017f556e697377617056334c697175696461746f7246756e6465720000000000000081525061180d565b156108b4576107c38484611fdb565b6108eb826040518060400160405280601581526020017420b633b2b13930a9bbb0b82634b8bab4b230ba37b960591b81525061180d565b156108fa576107c38484612126565b610939826040518060400160405280601d81526020017f47616d6d61416c67656272614c70546f6b656e4c697175696461746f7200000081525061180d565b15610948576107c384846121f3565b610987826040518060400160405280601f81526020017f47616d6d61556e697377617056334c70546f6b656e4c697175696461746f720081525061180d565b15610996576107c38484612252565b6109ce82604051806040016040528060168152602001752130b630b731b2b929bbb0b82634b8bab4b230ba37b960511b81525061180d565b156109dd576107c384846122b5565b610a1c826040518060400160405280601881526020017f556e69737761704c70546f6b656e4c697175696461746f72000000000000000081525061180d565b80610a585750610a58826040518060400160405280601481526020017323b2b630ba37a3aab734a634b8bab4b230ba37b960611b81525061180d565b15610a67576107c384846123c1565b610aa6826040518060400160405280601781526020017f536164646c654c70546f6b656e4c697175696461746f7200000000000000000081525061180d565b15610ab5576107c38484612687565b610af4826040518060400160405280602081526020017f43757276654c70546f6b656e4c697175696461746f724e6f526567697374727981525061180d565b15610b03576107c38484612866565b610b38826040518060400160405280601381526020017221bab93b32a9bbb0b82634b8bab4b230ba37b960691b81525061180d565b15610b47576107c38484612a4a565b610b7c826040518060400160405280601381526020017221bab93b32a6382a37b5b2b72bb930b83832b960691b81525061180d565b15610b8b576107c38484612c37565b610bc382604051806040016040528060168152602001752530b93b34b9a634b8bab4b230ba37b9233ab73232b960511b81525061180d565b15610bd2576107c38484612cde565b610c0982604051806040016040528060158152602001742c2137b6b12634b8bab4b230ba37b9233ab73232b960591b81525061180d565b15610c18576107c38484612e76565b610c57826040518060400160405280601981526020017f42616c616e6365724c70546f6b656e4c697175696461746f720000000000000081525061180d565b15610c66576107c38484613045565b610c9b826040518060400160405280601381526020017220b0bb32aa37b5b2b72634b8bab4b230ba37b960691b81525061180d565b15610caa576107c38484613045565b610ce9826040518060400160405280601a81526020017f47616d6d61416c67656272614c70546f6b656e5772617070657200000000000081525061180d565b15610cf8576107c38484613061565b610d37826040518060400160405280601c81526020017f47616d6d61556e697377617056334c70546f6b656e577261707065720000000081525061180d565b15610d46576107c384846131b8565b610d7d826040518060400160405280601581526020017429b7b634b2363ca6382a37b5b2b72bb930b83832b960591b81525061180d565b15610d8c576107c384846132bc565b60405162461bcd60e51b815260206004820152601060248201526f6e6f207374726174656779206461746160801b6044820152606401610479565b9250929050565b60408051600a80825261016082019092526060918291859185916000916020820161014080368337505060408051600a80825261016082019092529293506000929150602082015b6060815260200190600190039081610e1657505060408051600a808252610160820190925291925060009190602082016101408036833701905050905060005b846001600160a01b0316866001600160a01b031614610ff5576001600160a01b03808716600090815260066020908152604080832089851684529091528120549091168015610ea757869150610ec5565b6001600160a01b038089166000908152600760205260409020541691505b60005b8451811015610f1b57848181518110610ee357610ee36147b8565b60200260200101516001600160a01b0316836001600160a01b03161415610f0957610f1b565b80610f13816147ce565b915050610ec8565b50600080610f298a8561074e565b90925090506001600160a01b038216610f455750505050610ff5565b81888681518110610f5857610f586147b8565b60200260200101906001600160a01b031690816001600160a01b03168152505080878681518110610f8b57610f8b6147b8565b602002602001018190525083868681518110610fa957610fa96147b8565b60200260200101906001600160a01b031690816001600160a01b0316815250508399508480610fd7906147ce565b95505084600a1415610fec5750505050610ff5565b50505050610e56565b8067ffffffffffffffff81111561100e5761100e6145df565b604051908082528060200260200182016040528015611037578160200160208202803683370190505b5097508067ffffffffffffffff811115611053576110536145df565b60405190808252806020026020018201604052801561108657816020015b60608152602001906001900390816110715790505b50965060005b818160ff16101561113957848160ff16815181106110ac576110ac6147b8565b6020026020010151898260ff16815181106110c9576110c96147b8565b60200260200101906001600160a01b031690816001600160a01b031681525050838160ff16815181106110fe576110fe6147b8565b6020026020010151888260ff168151811061111b5761111b6147b8565b60200260200101819052508080611131906147e9565b91505061108c565b505050505050509250929050565b61114f611798565b600180546001600160a01b0383166001600160a01b031990911681179091556111806000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080836111cb575060009050806114cb565b6111d68585856103ef565b9150816111e8575060009050806114cb565b60025460405163bf40fac160e01b81526020600482015260116024820152704d617374657250726963654f7261636c6560781b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015611253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112779190614809565b6040516315d5220f60e31b81526001600160a01b03888116600483015291925060009183169063aea9107890602401602060405180830381865afa1580156112c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e79190614826565b6040516315d5220f60e31b81526001600160a01b03878116600483015291925060009184169063aea9107890602401602060405180830381865afa158015611333573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113579190614826565b90506000611365838a6138ba565b61136f908961483f565b9050600061137d83896138ba565b611387908861483f565b9050818110156113b5578161139c828261485e565b6113a89061271061483f565b6113b29190614875565b95505b6113c0600187614897565b6001600160a01b03808c166000908152600b60209081526040808320938d168352929052205490965080158061142757506001600160a01b03808c166000908152600c60209081526040808320938d168352929052205461138890611425904261485e565b115b156114c457886001600160a01b03168b6001600160a01b03167f5d4661f2f390321d7ed6695cf1f19cd360bafab39b6dc6e06e5b48f1653486a1838a60405161147a929190918252602082015260400190565b60405180910390a36001600160a01b03808c166000818152600b60209081526040808320948e168084529482528083208c9055928252600c81528282209382529290925290204290555b5050505050505b935093915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006104268361397a565b6040516001600160a01b038085166024830152831660448201526064810182905261159b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526139d6565b50505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160e9190614826565b905060008061161d8686610dce565b9150915081516000141561164457604051631aa27a4d60e21b815260040160405180910390fd5b858360005b84518110156116bc576000858281518110611666576116666147b8565b602002602001015190506000858381518110611684576116846147b8565b6020026020010151905060008061169d87878686613aa8565b90975095508493506116b492508391506147ce9050565b915050611649565b50866001600160a01b0316826001600160a01b0316146116ef5760405163fdbb00c560e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190614826565b98975050505050505050565b6040516001600160a01b03831660248201526044810182905261179390849063a9059cbb60e01b90606401611564565b505050565b6000546001600160a01b031633146117f25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610479565b565b600180546001600160a01b03191690556104f9816114d3565b60006001600160a01b03831615801590610426575060058260405161183291906148af565b908152604051908190036020019020546001600160a01b038481169116149392505050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac19061188b906004016148cb565b602060405180830381865afa1580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cc9190614809565b60405163260f701f60e11b815290915083906000906001600160a01b03841690634c1ee03e90611904908990869086906004016148f8565b602060405180830381865afa158015611921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119459190614809565b90506000836001600160a01b0316634c1ee03e888560016040518463ffffffff1660e01b815260040161197a939291906148f8565b602060405180830381865afa158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190614809565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192509085169063e5e31b1390602401602060405180830381865afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a29919061491c565b80611a99575060405163e5e31b1360e01b81526001600160a01b03838116600483015285169063e5e31b1390602401602060405180830381865afa158015611a75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a99919061491c565b611af15760405162461bcd60e51b8152602060048201526024808201527f496e76616c696420536f6c69646c794c697175696461746f722073776170207060448201526330ba341760e11b6064820152608401610479565b60405163e5e31b1360e01b81526001600160a01b0382811660048301526000919086169063e5e31b1390602401602060405180830381865afa158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f919061491c565b611b6b57506000611cf7565b60405163e5e31b1360e01b81526001600160a01b03848116600483015286169063e5e31b1390602401602060405180830381865afa158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd5919061491c565b611be157506001611cf7565b600080866001600160a01b0316635e60dab58b8860016040518463ffffffff1660e01b8152600401611c15939291906148f8565b6040805180830381865afa158015611c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c55919061493e565b91509150600080886001600160a01b0316635e60dab58d8a60006040518463ffffffff1660e01b8152600401611c8d939291906148f8565b6040805180830381865afa158015611ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccd919061493e565b915091508184118015611cdf57508083115b15611ced5760019450611cf2565b600094505b505050505b848782604051602001611d0c939291906148f8565b6040516020818303038152906040529550505050505092915050565b60606000839050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d919190614809565b6001600160a01b0316836001600160a01b03161480611e225750806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0d9190614809565b6001600160a01b0316836001600160a01b0316145b611e8d5760405162461bcd60e51b815260206004820152603660248201527f4f757470757420746f6b656e20646f6573206e6f74206d6174636820656974686044820152756572206f6620746865207061697220746f6b656e732160501b6064820152608401610479565b60025460405163bf40fac160e01b81526001600160a01b039091169063bf40fac190611ebb906004016148cb565b602060405180830381865afa158015611ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efc9190614809565b604080516001600160a01b039283166020820152918516908201526060015b60405160208183030381529060405291505092915050565b604080516002808252606080830184529260009291906020830190803683370190505090508381600081518110611f6c57611f6c6147b8565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611fa057611fa06147b8565b60200260200101906001600160a01b031690816001600160a01b031681525050611fc984613b29565b81604051602001611f1b929190614962565b6001600160a01b038083166000908152600d602090815260408083209385168352929052205460609062ffffff168061203b57506001600160a01b038083166000908152600d602090815260408083209387168352929052205462ffffff165b60006120478585613bb9565b60025460405163bf40fac160e01b815260206004820152600660248201526528bab7ba32b960d11b604482015291925086918691859185916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190614809565b604080516001600160a01b0396871660208201529486169085015262ffffff9092166060840152831660808301529190911660a082015260c0016040516020818303038152906040529250505092915050565b60025460405163bf40fac160e01b815260206004820152601360248201527220a623a2a12920afa9aba0a82fa927aaaa22a960691b604482015260609183916001600160a01b039091169063bf40fac1906064015b602060405180830381865afa158015612198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bc9190614809565b604080516001600160a01b03938416602082015292909116908201526060015b604051602081830303815290604052905092915050565b60025460405163bf40fac160e01b815260206004820152601960248201527823a0a6a6a0afa0a623a2a12920afa9aba0a82fa927aaaa22a960391b604482015260609183916001600160a01b039091169063bf40fac19060640161217b565b60025460405163bf40fac160e01b815260206004820152601c60248201527f47414d4d415f554e49535741505f56335f535741505f524f5554455200000000604482015260609183916001600160a01b039091169063bf40fac19060640161217b565b60025460405163959fc09760e01b81526001600160a01b038481166004830152838116602483015260609260009291169063959fc09790604401602060405180830381865afa15801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190614809565b90506001600160a01b03811661239c5760405162461bcd60e51b815260206004820152602b60248201527f4e6f2062616c616e63657220706f6f6c20666f756e6420666f7220746865206760448201526a6976656e20746f6b656e7360a81b6064820152608401610479565b604080516001600160a01b038086166020830152831691810191909152606001611f1b565b606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242c9190614809565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124929190614809565b90506001600160a01b0385811681841681149183161481806124b15750805b61251b5760405162461bcd60e51b815260206004820152603560248201527f4f757470757420746f6b656e20646f6573206e6f74206d6174636820656974686044820152746572206f6620746865207061697220746f6b656e7360581b6064820152608401610479565b60608083156125bb576040805160008152600260208201818152608083018452919450909184810190803683370190505090508481600081518110612562576125626147b8565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110612596576125966147b8565b60200260200101906001600160a01b031690816001600160a01b03168152505061264c565b5060408051600081526002602082018181526080830184529192838101908036833701905050915085826000815181106125f7576125f76147b8565b60200260200101906001600160a01b031690816001600160a01b031681525050848260018151811061262b5761262b6147b8565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6126558a613b29565b8282604051602001612669939291906149be565b60405160208183030381529060405297505050505050505092915050565b60025460405163bf40fac160e01b8152602060048201526013602482015272536164646c654c7050726963654f7261636c6560681b60448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156126f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271d9190614809565b60405163195b70b960e21b81526001600160a01b03868116600483015291925060009183169063656dc2e490602401600060405180830381865afa158015612769573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127919190810190614a22565b60025460405163bf40fac160e01b81529192506000916001600160a01b039091169063bf40fac1906127c590600401614ab6565b602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190614809565b905060006128148387613cbe565b9050806001600160a01b0381161580612849575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316145b156128515750815b818584604051602001611d0c93929190614ad6565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac19061289a90600401614af9565b602060405180830381865afa1580156128b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128db9190614809565b60405163988b1fa760e01b81526001600160a01b03868116600483015291925060009183169063988b1fa790602401602060405180830381865afa158015612927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294b9190614809565b9050600061295882613fd9565b905060006129668287613cbe565b60025460405163bf40fac160e01b815291925082916000916001600160a01b03169063bf40fac19061299a90600401614ab6565b602060405180830381865afa1580156129b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129db9190614809565b90506001600160a01b0383161580612a0f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038416145b15612a18578091505b828187604051602001612a2d93929190614ad6565b604051602081830303815290604052965050505050505092915050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac190612a7e90600401614af9565b602060405180830381865afa158015612a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abf9190614809565b60025460405163bf40fac160e01b815260206004820152602360248201527f437572766556324c70546f6b656e50726963654f7261636c654e6f526567697360448201526274727960e81b60648201529192506000916001600160a01b039091169063bf40fac190608401602060405180830381865afa158015612b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6b9190614809565b60025460405163bf40fac160e01b81529192506000916001600160a01b039091169063bf40fac190612b9f90600401614ab6565b602060405180830381865afa158015612bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be09190614809565b604080516001600160a01b038087166020830152808616928201929092528189166060820152818816608082015290821660a082015290915060c0015b604051602081830303815290604052935050505092915050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac190612c6b90600401614af9565b602060405180830381865afa158015612c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cac9190614809565b60405163988b1fa760e01b81526001600160a01b0385811660048301529192509082169063988b1fa790602401611ebb565b60606000600260009054906101000a90046001600160a01b03166001600160a01b03166377d792196040518163ffffffff1660e01b8152600401600060405180830381865afa158015612d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d5d9190810190614b3a565b905060005b8151811015612e6e576000828281518110612d7f57612d7f6147b8565b60200260200101519050856001600160a01b031681600001516001600160a01b03161415612deb57805160408083015160609384015182516001600160a01b03948516602082015293909116838301528284015280518083039093018352608090910190529250612e6e565b856001600160a01b031681602001516001600160a01b03161415612e5b57806020015181604001518260600151604051602001612e49939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405160208183030381529060405293505b5080612e66816147ce565b915050612d62565b505092915050565b60604660381415612eda5760405173af16cb45b8149da403af41c63abfebfbcd16264b9073522348779dcb2911539e76a1042aa922f9c47ee390612ec290869084908490602001614ad6565b604051602081830303815290604052925050506103c5565b73e45589fbad3a1fb90f5b2a8a3e8958a8bab5f768734f1885d25ef219d3d4fa064809d6d4985fab9a0b738870f7102f1dcb1c35b01af10f1baf1b00ad6805733d312b224dec414fe865e1e9bfc13e2a86947d19738146293bf5225b471625372e985fdb7165c35fe26001600160a01b038816851415612fc2576000846001600160a01b0316886001600160a01b03161415612f77575081612f94565b836001600160a01b0316886001600160a01b03161415612f945750805b8081898a604051602001612fab9493929190614c14565b60405160208183030381529060405296505061303a565b836001600160a01b0316886001600160a01b031614156130095787828987604051602001612ff39493929190614c14565b604051602081830303815290604052955061303a565b826001600160a01b0316886001600160a01b0316141561303a5787818987604051602001611d0c9493929190614c14565b505050505092915050565b604080516001600160a01b0383166020820152606091016121dc565b60025460405163bf40fac160e01b815260206004820152601960248201527823a0a6a6a0afa0a623a2a12920afa9aba0a82fa927aaaa22a960391b60448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156130d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fd9190614809565b60025460405163bf40fac160e01b815260206004820152601760248201527f47414d4d415f414c47454252415f554e495f50524f585900000000000000000060448201529192506000916001600160a01b039091169063bf40fac1906064015b602060405180830381865afa15801561317a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319e9190614809565b6040519091508490612c1d90849084908490602001614ad6565b60025460405163bf40fac160e01b815260206004820152601c60248201527f47414d4d415f554e49535741505f56335f535741505f524f555445520000000060448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132589190614809565b60025460405163bf40fac160e01b815260206004820152601a60248201527f47414d4d415f554e49535741505f56335f554e495f50524f585900000000000060448201529192506000916001600160a01b039091169063bf40fac19060640161315d565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac1906132f0906004016148cb565b602060405180830381865afa15801561330d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133319190614809565b6040805160018082528183019092529192508491600091816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161334d57505060408051600180825281830190925291925060009190602082015b60408051606081018252600080825260208083018290529282015282526000199092019101816133945790505090506000876001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561340d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134319190614809565b6001600160a01b03161490506000886001600160a01b0316856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ab9190614809565b6001600160a01b031614905081806134c05750805b61350c5760405162461bcd60e51b815260206004820152601b60248201527f21696e70757420746f6b656e206e6f7420756e6465726c79696e6700000000006044820152606401610479565b846001600160a01b03166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561354a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356e919061491c565b84600081518110613581576135816147b8565b60200260200101516040019015159081151581525050846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f99190614809565b8460008151811061360c5761360c6147b8565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190614809565b846000815181106136a5576136a56147b8565b6020026020010151602001906001600160a01b031690816001600160a01b031681525050846001600160a01b03166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372b919061491c565b8360008151811061373e5761373e6147b8565b60200260200101516040019015159081151581525050846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b69190614809565b836000815181106137c9576137c96147b8565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561382b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384f9190614809565b83600081518110613862576138626147b8565b6020026020010151602001906001600160a01b031690816001600160a01b03168152505050508383838360405160200161389f9493929190614c93565b60405160208183030381529060405294505050505092915050565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391f9190614cd1565b60ff16905060128111156139525761393860128261485e565b61394390600a614dd8565b61394d9085614875565b613972565b61395d81601261485e565b61396890600a614dd8565b613972908561483f565b949350505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156139ca57602002820191906000526020600020905b8154815260200190600101908083116139b6575b50505050509050919050565b6000613a2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661415f9092919063ffffffff16565b8051909150156117935780806020019051810190613a49919061491c565b6117935760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610479565b6000806000613b05856310badf4e60e01b898988604051602401613ace93929190614de4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261416e565b905080806020019051810190613b1b9190614e0b565b925092505094509492505050565b60025460405163bf40fac160e01b815260206004820152601260248201527124aab734b9bbb0b82b192937baba32b9181960711b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613b95573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c59190614809565b6001600160a01b038083166000908152600e60209081526040808320858516845290915281205490911680613c1257506001600160a01b038083166000908152600e602090815260408083208785168452909152902054165b6001600160a01b03811615613c285790506103c5565b60025460405163bf40fac160e01b81526020600482015260116024820152702aa724a9aba0a82fab19afa927aaaa22a960791b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015613c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb69190614809565b9150506103c5565b6000805b8351811015613d1957826001600160a01b0316848281518110613ce757613ce76147b8565b60200260200101516001600160a01b03161415613d0757829150506103c5565b80613d11816147ce565b915050613cc2565b5060025460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac190613d4990600401614ab6565b602060405180830381865afa158015613d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8a9190614809565b905060005b8451811015613de557816001600160a01b0316858281518110613db457613db46147b8565b60200260200101516001600160a01b03161415613dd3575090506103c5565b80613ddd816147ce565b915050613d8f565b5060025460405163bf40fac160e01b815260206004820152600b60248201526a39ba30b13632aa37b5b2b760a91b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6f9190614809565b905060005b8551811015613ecc57816001600160a01b0316868281518110613e9957613e996147b8565b60200260200101516001600160a01b03161415613eba575091506103c59050565b80613ec4816147ce565b915050613e74565b5060025460405163bf40fac160e01b81526020600482015260096024820152683ba12a21aa37b5b2b760b91b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f549190614809565b905060005b8651811015613fb257816001600160a01b0316878281518110613f7e57613f7e6147b8565b60200260200101516001600160a01b03161415613fa0575092506103c5915050565b80613faa816147ce565b915050613f59565b5085600081518110613fc657613fc66147b8565b6020026020010151935050505092915050565b606060005b60405163c661065760e01b815260ff821660048201526001600160a01b0384169063c661065790602401602060405180830381865afa925050508015614041575060408051601f3d908101601f1916820190925261403e91810190614809565b60015b61404a5761405d565b5080614055816147e9565b915050613fde565b8060ff1667ffffffffffffffff811115614079576140796145df565b6040519080825280602002602001820160405280156140a2578160200160208202803683370190505b50915060005b8160ff168110156141585760405163c661065760e01b8152600481018290526001600160a01b0385169063c661065790602401602060405180830381865afa1580156140f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411c9190614809565b83828151811061412e5761412e6147b8565b6001600160a01b039092166020928302919091019091015280614150816147ce565b9150506140a8565b5050919050565b60606139728484600085614262565b60606001600160a01b0383163b6141d65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610479565b600080846001600160a01b0316846040516141f191906148af565b600060405180830381855af49150503d806000811461422c576040519150601f19603f3d011682016040523d82523d6000602084013e614231565b606091505b50915091506142598282604051806060016040528060278152602001614e4d6027913961433d565b95945050505050565b6060824710156142c35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610479565b600080866001600160a01b031685876040516142df91906148af565b60006040518083038185875af1925050503d806000811461431c576040519150601f19603f3d011682016040523d82523d6000602084013e614321565b606091505b509150915061433287838387614376565b979650505050505050565b6060831561434c575081610426565b82511561435c5782518084602001fd5b8160405162461bcd60e51b81526004016104799190614e39565b606083156143e25782516143db576001600160a01b0385163b6143db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610479565b5081613972565b61397283838151156143f75781518083602001fd5b8060405162461bcd60e51b81526004016104799190614e39565b6001600160a01b03811681146104f957600080fd5b6000806040838503121561443957600080fd5b823561444481614411565b9150602083013561445481614411565b809150509250929050565b60006020828403121561447157600080fd5b813561042681614411565b600081518084526020808501945080840160005b838110156144b55781516001600160a01b031687529582019590820190600101614490565b509495945050505050565b602081526000610426602083018461447c565b6000806000606084860312156144e857600080fd5b83356144f381614411565b925060208401359150604084013561450a81614411565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156145575783516001600160e01b03191683529284019291840191600101614531565b50909695505050505050565b60005b8381101561457e578181015183820152602001614566565b8381111561159b5750506000910152565b600081518084526145a7816020860160208601614563565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082018190526000906139729083018461458f565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715614618576146186145df565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614647576146476145df565b604052919050565b6000602080838503121561466257600080fd5b823567ffffffffffffffff8082111561467a57600080fd5b818501915085601f83011261468e57600080fd5b8135818111156146a0576146a06145df565b6146b2601f8201601f1916850161461e565b915080825286848285010111156146c857600080fd5b8084840185840137600090820190930192909252509392505050565b604080825283519082018190526000906020906060840190828701845b828110156147265781516001600160a01b031684529284019290840190600101614701565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561477657601f1986840301855261476483835161458f565b94870194925090860190600101614748565b50909998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b600060ff8216806147ae576147ae614785565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156147e2576147e2614785565b5060010190565b600060ff821660ff81141561480057614800614785565b60010192915050565b60006020828403121561481b57600080fd5b815161042681614411565b60006020828403121561483857600080fd5b5051919050565b600081600019048311821515161561485957614859614785565b500290565b60008282101561487057614870614785565b500390565b60008261489257634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156148aa576148aa614785565b500190565b600082516148c1818460208701614563565b9190910192915050565b60208082526013908201527229a7a624a2262cafa9aba0a82fa927aaaa22a960691b604082015260600190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b60006020828403121561492e57600080fd5b8151801515811461042657600080fd5b6000806040838503121561495157600080fd5b505080516020909101519092909150565b6001600160a01b038381168252604060208084018290528451918401829052600092858201929091906060860190855b818110156149b0578551851683529483019491830191600101614992565b509098975050505050505050565b6001600160a01b03841681526060602082018190526000906149e29083018561447c565b82810360408401526149f4818561447c565b9695505050505050565b600067ffffffffffffffff821115614a1857614a186145df565b5060051b60200190565b60006020808385031215614a3557600080fd5b825167ffffffffffffffff811115614a4c57600080fd5b8301601f81018513614a5d57600080fd5b8051614a70614a6b826149fe565b61461e565b81815260059190911b82018301908381019087831115614a8f57600080fd5b928401925b82841015614332578351614aa781614411565b82529284019290840190614a94565b6020808252600690820152653bba37b5b2b760d11b604082015260600190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60208082526021908201527f43757276654c70546f6b656e50726963654f7261636c654e6f526567697374726040820152607960f81b606082015260800190565b60006020808385031215614b4d57600080fd5b825167ffffffffffffffff811115614b6457600080fd5b8301601f81018513614b7557600080fd5b8051614b83614a6b826149fe565b81815260079190911b82018301908381019087831115614ba257600080fd5b928401925b828410156143325760808489031215614bc05760008081fd5b614bc86145f5565b8451614bd381614411565b815284860151614be281614411565b81870152604085810151614bf581614411565b9082015260608581015190820152825260809093019290840190614ba7565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b600081518084526020808501945080840160005b838110156144b557815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101614c53565b6001600160a01b03858116825284166020820152608060408201819052600090614cbf90830185614c3f565b82810360608401526143328185614c3f565b600060208284031215614ce357600080fd5b815160ff8116811461042657600080fd5b600181815b80851115614d2f578160001904821115614d1557614d15614785565b80851615614d2257918102915b93841c9390800290614cf9565b509250929050565b600082614d46575060016103c5565b81614d53575060006103c5565b8160018114614d695760028114614d7357614d8f565b60019150506103c5565b60ff841115614d8457614d84614785565b50506001821b6103c5565b5060208310610133831016604e8410600b8410161715614db2575081810a6103c5565b614dbc8383614cf4565b8060001904821115614dd057614dd0614785565b029392505050565b60006104268383614d37565b60018060a01b0384168152826020820152606060408201526000614259606083018461458f565b60008060408385031215614e1e57600080fd5b8251614e2981614411565b6020939093015192949293505050565b602081526000610426602083018461458f56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000a", + "sourceMap": "1211:27129:230:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2514:290;;;;;;:::i;:::-;;:::i;:::-;;;802:25:486;;;790:2;775:18;2514:290:230;;;;;;;;1164:87:232;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1012:8:486;1000:21;;;982:40;;970:2;955:18;1164:87:232;838:190:486;450:27:232;;;;;-1:-1:-1;;;;;450:27:232;;;;;;-1:-1:-1;;;;;1224:32:486;;;1206:51;;1194:2;1179:18;450:27:232;1033:230:486;7446:173:230;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4742:342::-;;;;;;:::i;:::-;;:::i;174:106:133:-;;;:::i;:::-;;1729:206:453;;;:::i;1742:768:230:-;;;:::i;:::-;;;;;;;:::i;1201:85:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;1201:85;;735:73:232;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;735:73:232;;;2808:124:230;;;:::i;616:115:232:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;616:115:232;;;9397:3334:230;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1255:92:232:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1255:92:232;;;540:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:72:232;;;842:99:453;921:13;;-1:-1:-1;;;;;921:13:453;842:99;;7623:1770:230;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1134:178:453:-;;;;;;:::i;:::-;;:::i;2936:1395:230:-;;;;;;:::i;:::-;;:::i;:::-;;;;8322:25:486;;;8378:2;8363:18;;8356:34;;;;8295:18;2936:1395:230;8148:248:486;1689:42:230;;1728:3;1689:42;;2514:290;-1:-1:-1;;;;;2668:30:230;;;2631:16;2668:30;;;:18;:30;;;;;;;;:43;;;;;;;;;;2765:13;2761:38;;-1:-1:-1;1728:3:230;2761:38;2514:290;;;;:::o;7446:173::-;-1:-1:-1;;;;;7568:37:230;;;;;;:24;:37;;;;;7537:16;;7568:46;;:44;:46::i;4742:342::-;4870:20;4898:67;-1:-1:-1;;;;;4898:27:230;;4926:10;4946:4;4953:11;4898:27;:67::i;:::-;4986:37;4999:10;5011:11;4986:12;:37::i;:::-;4971:52;-1:-1:-1;5029:50:230;-1:-1:-1;;;;;5029:24:230;;5054:10;4971:52;5029:24;:50::i;:::-;4742:342;;;;;:::o;174:106:133:-;1094:13:452;:11;:13::i;:::-;235:40:133::1;::::0;-1:-1:-1;;;235:40:133;;8603:2:486;235:40:133::1;::::0;::::1;8585:21:486::0;8642:2;8622:18;;;8615:30;8681:32;8661:18;;;8654:60;8731:18;;235:40:133::1;;;;;;;;1729:206:453::0;921:13;;719:10:466;;-1:-1:-1;;;;;921:13:453;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:453;;8962:2:486;1814:78:453;;;8944:21:486;9001:2;8981:18;;;8974:30;9040:34;9020:18;;;9013:62;-1:-1:-1;;;9091:18:486;;;9084:39;9140:19;;1814:78:453;8760:405:486;1814:78:453;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;1742:768:230:-;1891:22;;;1848:1;1891:22;;;;;;;;;1808:15;;1848:1;1831:14;;1848:1;1891:22;;;;;;;;;;-1:-1:-1;;1855:58:230;-1:-1:-1;;;;1855:58:230;1937:10;;;:::i;:::-;;;;1919:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1919:69:230;;;:29;;;;;;;;;;;:69;-1:-1:-1;;;1994:17:230;2012:10;;;:::i;:::-;;;;1994:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1994:67:230;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;2067:17:230;2085:10;;;:::i;:::-;;;;2067:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2067:73:230;;;:29;;;;;;;;;;;:73;-1:-1:-1;;;2146:17:230;2164:10;;;:::i;:::-;;;;2146:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2146:50:230;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;2202:17:230;2220:10;;;:::i;:::-;;;;2202:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2202:72:230;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;2280:17:230;2298:10;;;:::i;:::-;;;;2280:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2280:72:230;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;2358:17:230;2376:10;;;:::i;:::-;;;;2358:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2358:57:230;;;:29;;;;;;;;;;;:57;2429:13;;;;2421:54;;;;-1:-1:-1;;;2421:54:230;;9819:2:486;2421:54:230;;;9801:21:486;9858:2;9838:18;;;9831:30;9897;9877:18;;;9870:58;9945:18;;2421:54:230;9617:352:486;2808:124:230;2867:16;2898:29;:20;:27;:29::i;:::-;2891:36;;2808:124;:::o;9397:3334::-;-1:-1:-1;;;;;9598:40:230;;;9522:28;9598:40;;;:28;:40;;;;;;;;:53;;;;;;;;;;;;9662:45;;;;;;;;;;;-1:-1:-1;;;9662:45:230;;;;;;;9598:53;;;;9552:25;;9662:45;;9598:53;;9662:10;:45::i;:::-;9658:3069;;;9732:50;9758:10;9770:11;9732:25;:50::i;:::-;9717:65;;9658:3069;;;9799:48;9810:8;9799:48;;;;;;;;;;;;;;;;;:10;:48::i;:::-;9795:2932;;;9872:53;9901:10;9913:11;9872:28;:53::i;9795:2932::-;9942:49;9953:8;9942:49;;;;;;;;;;;;;;;;;:10;:49::i;:::-;9938:2789;;;10016:48;10040:10;10052:11;10016:23;:48::i;9938:2789::-;10081:49;10092:8;10081:49;;;;;;;;;;;;;;;;;:10;:49::i;:::-;10077:2650;;;10155:54;10185:10;10197:11;10155:29;:54::i;10077:2650::-;10226:45;10237:8;10226:45;;;;;;;;;;;;;-1:-1:-1;;;10226:45:230;;;:10;:45::i;:::-;10222:2505;;;10296:50;10322:10;10334:11;10296:25;:50::i;10222:2505::-;10363:53;10374:8;10363:53;;;;;;;;;;;;;;;;;:10;:53::i;:::-;10359:2368;;;10441:58;10475:10;10487:11;10441:33;:58::i;10359:2368::-;10516:55;10527:8;10516:55;;;;;;;;;;;;;;;;;:10;:55::i;:::-;10512:2215;;;10596:60;10632:10;10644:11;10596:35;:60::i;10512:2215::-;10673:46;10684:8;10673:46;;;;;;;;;;;;;-1:-1:-1;;;10673:46:230;;;:10;:46::i;:::-;10669:2058;;;10744:51;10771:10;10783:11;10744:26;:51::i;10669:2058::-;10812:48;10823:8;10812:48;;;;;;;;;;;;;;;;;:10;:48::i;:::-;:96;;;;10864:44;10875:8;10864:44;;;;;;;;;;;;;-1:-1:-1;;;10864:44:230;;;:10;:44::i;:::-;10808:1919;;;10933:53;10962:10;10974:11;10933:28;:53::i;10808:1919::-;11003:47;11014:8;11003:47;;;;;;;;;;;;;;;;;:10;:47::i;:::-;10999:1728;;;11075:52;11103:10;11115:11;11075:27;:52::i;10999:1728::-;11144:56;11155:8;11144:56;;;;;;;;;;;;;;;;;:10;:56::i;:::-;11140:1587;;;11225:61;11262:10;11274:11;11225:36;:61::i;11140:1587::-;11303:43;11314:8;11303:43;;;;;;;;;;;;;-1:-1:-1;;;11303:43:230;;;:10;:43::i;:::-;11299:1428;;;11371:48;11395:10;11407:11;11371:23;:48::i;11299:1428::-;11436:43;11447:8;11436:43;;;;;;;;;;;;;-1:-1:-1;;;11436:43:230;;;:10;:43::i;:::-;11432:1295;;;11504:48;11528:10;11540:11;11504:23;:48::i;11432:1295::-;11569:46;11580:8;11569:46;;;;;;;;;;;;;-1:-1:-1;;;11569:46:230;;;:10;:46::i;:::-;11565:1162;;;11640:51;11667:10;11679:11;11640:26;:51::i;11565:1162::-;11708:45;11719:8;11708:45;;;;;;;;;;;;;-1:-1:-1;;;11708:45:230;;;:10;:45::i;:::-;11704:1023;;;11778:44;11798:10;11810:11;11778:19;:44::i;11704:1023::-;11839:49;11850:8;11839:49;;;;;;;;;;;;;;;;;:10;:49::i;:::-;11835:892;;;11913:54;11943:10;11955:11;11913:29;:54::i;11835:892::-;11984:43;11995:8;11984:43;;;;;;;;;;;;;-1:-1:-1;;;11984:43:230;;;:10;:43::i;:::-;11980:747;;;12052:43;12071:10;12083:11;12052:18;:43::i;11980:747::-;12112:50;12123:8;12112:50;;;;;;;;;;;;;;;;;:10;:50::i;:::-;12108:619;;;12187:55;12218:10;12230:11;12187:30;:55::i;12108:619::-;12259:52;12270:8;12259:52;;;;;;;;;;;;;;;;;:10;:52::i;:::-;12255:472;;;12336:57;12369:10;12381:11;12336:32;:57::i;12255:472::-;12410:45;12421:8;12410:45;;;;;;;;;;;;;-1:-1:-1;;;12410:45:230;;;:10;:45::i;:::-;12406:321;;;12480:50;12506:10;12518:11;12480:25;:50::i;12406:321::-;12694:26;;-1:-1:-1;;;12694:26:230;;10176:2:486;12694:26:230;;;10158:21:486;10215:2;10195:18;;;10188:30;-1:-1:-1;;;10234:18:486;;;10227:46;10290:18;;12694:26:230;9974:340:486;12406:321:230;9397:3334;;;;;:::o;7623:1770::-;7981:29;;;8007:2;7981:29;;;;;;;;;7750:39;;;;7864:10;;7918:11;;7830:31;;7981:29;;;;;;;;-1:-1:-1;;8052:15:230;;;8064:2;8052:15;;;;;;;;;7935:75;;-1:-1:-1;8016:33:230;;8052:15;-1:-1:-1;8052:15:230;;;;;;;;;;;;;;;;;-1:-1:-1;;8112:27:230;;;8136:2;8112:27;;;;;;;;;8016:51;;-1:-1:-1;8073:36:230;;8112:27;;;;;;;;;;;-1:-1:-1;8112:27:230;8073:66;;8146:9;8165:1006;8189:17;-1:-1:-1;;;;;8172:34:230;:13;-1:-1:-1;;;;;8172:34:230;;8165:1006;;-1:-1:-1;;;;;8296:43:230;;;8216:35;8296:43;;;:28;:43;;;;;;;;:62;;;;;;;;;;;8216:35;;8296:62;8370:37;;8366:240;;8439:17;8419:37;;8366:240;;;-1:-1:-1;;;;;8564:33:230;;;;;;;:18;:33;;;;;;;;-1:-1:-1;8366:240:230;8662:9;8657:110;8681:9;:16;8677:1;:20;8657:110;;;8739:9;8749:1;8739:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8718:33:230;:17;-1:-1:-1;;;;;8718:33:230;;8714:44;;;8753:5;;8714:44;8699:3;;;;:::i;:::-;;;;8657:110;;;;8776:28;8806:25;8835:79;8866:13;8889:17;8835:21;:79::i;:::-;8775:139;;-1:-1:-1;8775:139:230;-1:-1:-1;;;;;;8926:31:230;;8922:42;;8959:5;;;;;;8922:42;8993:8;8973:14;8988:1;8973:17;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;8973:28:230;;;-1:-1:-1;;;;;8973:28:230;;;;;9033:12;9009:18;9028:1;9009:21;;;;;;;;:::i;:::-;;;;;;:36;;;;9068:17;9053:9;9063:1;9053:12;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;9053:32:230;;;-1:-1:-1;;;;;9053:32:230;;;;;9109:17;9093:33;;9135:3;;;;;:::i;:::-;;;;9150:1;9155:2;9150:7;9146:18;;;9159:5;;;;;;9146:18;8208:963;;;;8165:1006;;;9216:1;9190:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9190:28:230;;9177:41;;9253:1;9241:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9224:31;;9267:7;9262:127;9284:1;9280;:5;;;9262:127;;;9316:14;9331:1;9316:17;;;;;;;;;;:::i;:::-;;;;;;;9300:10;9311:1;9300:13;;;;;;;;;;:::i;:::-;;;;;;:33;-1:-1:-1;;;;;9300:33:230;;;-1:-1:-1;;;;;9300:33:230;;;;;9361:18;9380:1;9361:21;;;;;;;;;;:::i;:::-;;;;;;;9341:14;9356:1;9341:17;;;;;;;;;;:::i;:::-;;;;;;:41;;;;9287:3;;;;;:::i;:::-;;;;9262:127;;;;7824:1569;;;;;;7623:1770;;;;;:::o;1134:178:453:-;1094:13:452;:11;:13::i;:::-;1223::453::1;:24:::0;;-1:-1:-1;;;;;1223:24:453;::::1;-1:-1:-1::0;;;;;;1223:24:453;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::452::0;1273:6;-1:-1:-1;;;;;1273:6:452;;1201:85;1287:7:453::1;-1:-1:-1::0;;;;;1262:43:453::1;;;;;;;;;;;1134:178:::0;:::o;2936:1395:230:-;3088:20;;3138:16;3134:35;;-1:-1:-1;3164:1:230;;-1:-1:-1;3164:1:230;3156:13;;3134:35;3191:42;3196:10;3208:11;3221;3191:4;:42::i;:::-;3176:57;-1:-1:-1;3243:17:230;3239:36;;-1:-1:-1;3270:1:230;;-1:-1:-1;3270:1:230;3262:13;;3239:36;3324:2;;:34;;-1:-1:-1;;;3324:34:230;;10841:2:486;3324:34:230;;;10823:21:486;10880:2;10860:18;;;10853:30;-1:-1:-1;;;10899:18:486;;;10892:47;3282:21:230;;-1:-1:-1;;;;;3324:2:230;;:13;;10956:18:486;;3324:34:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3391:30;;-1:-1:-1;;;3391:30:230;;-1:-1:-1;;;;;1224:32:486;;;3391:30:230;;;1206:51:486;3282:77:230;;-1:-1:-1;3365:23:230;;3391:9;;;;;1179:18:486;;3391:30:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3454:31;;-1:-1:-1;;;3454:31:230;;-1:-1:-1;;;;;1224:32:486;;;3454:31:230;;;1206:51:486;3365:56:230;;-1:-1:-1;3427:24:230;;3454:9;;;;;1179:18:486;;3454:31:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3427:58;;3492:24;3533:42;3547:15;3564:10;3533:13;:42::i;:::-;3519:56;;:11;:56;:::i;:::-;3492:83;;3581:25;3624:44;3638:16;3656:11;3624:13;:44::i;:::-;3609:59;;:12;:59;:::i;:::-;3581:87;;3699:16;3679:17;:36;3675:135;;;3787:16;3738:36;3757:17;3787:16;3738:36;:::i;:::-;3737:46;;3778:5;3737:46;:::i;:::-;3736:67;;;;:::i;:::-;3725:78;;3675:135;3893:13;3905:1;3893:13;;:::i;:::-;-1:-1:-1;;;;;3959:30:230;;;3939:17;3959:30;;;:18;:30;;;;;;;;:43;;;;;;;;;;3893:13;;-1:-1:-1;4012:14:230;;;:93;;-1:-1:-1;;;;;;4048:37:230;;;;;;;:25;:37;;;;;;;;:50;;;;;;;;;;4101:4;;4030:68;;:15;:68;:::i;:::-;:75;4012:93;4008:319;;;4148:11;-1:-1:-1;;;;;4120:61:230;4136:10;-1:-1:-1;;;;;4120:61:230;;4161:9;4172:8;4120:61;;;;;;8322:25:486;;;8378:2;8363:18;;8356:34;8310:2;8295:18;;8148:248;4120:61:230;;;;;;;;-1:-1:-1;;;;;4190:30:230;;;;;;;:18;:30;;;;;;;;:43;;;;;;;;;;;;:54;;;4252:37;;;:25;:37;;;;;:50;;;;;;;;;4305:15;4252:68;;4008:319;3128:1203;;;;;;2936:1395;;;;;;;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;10251:300:469:-;10314:16;10342:22;10367:19;10375:3;10367:7;:19::i;1040:252:447:-;1216:68;;-1:-1:-1;;;;;12365:15:486;;;1216:68:447;;;12347:34:486;12417:15;;12397:18;;;12390:43;12449:18;;;12442:34;;;1189:96:447;;1209:5;;-1:-1:-1;;;1239:27:447;12282:18:486;;1216:68:447;;;;-1:-1:-1;;1216:68:447;;;;;;;;;;;;;;-1:-1:-1;;;;;1216:68:447;-1:-1:-1;;;;;;1216:68:447;;;;;;;;;;1189:19;:96::i;:::-;1040:252;;;;:::o;5088:1092:230:-;5225:35;;-1:-1:-1;;;5225:35:230;;5254:4;5225:35;;;1206:51:486;5188:7:230;;;;-1:-1:-1;;;;;5225:20:230;;;;;1179:18:486;;5225:35:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5203:57;;5267:49;5318:29;5351:66;5382:10;5400:11;5351:23;:66::i;:::-;5266:151;;;;5428:20;:27;5459:1;5428:32;5424:63;;;5469:18;;-1:-1:-1;;;5469:18:230;;;;;;;;;;;5424:63;5529:10;5571:11;5494:32;5588:469;5612:20;:27;5608:1;:31;5588:469;;;5654:38;5695:20;5716:1;5695:23;;;;;;;;:::i;:::-;;;;;;;5654:64;;5726:25;5754:14;5769:1;5754:17;;;;;;;;:::i;:::-;;;;;;;5726:45;;5780:33;5815:24;5843:125;5871:14;5895:15;5920:18;5948:12;5843:18;:125::i;:::-;5779:189;;-1:-1:-1;5779:189:230;-1:-1:-1;5641:3:230;;-1:-1:-1;5641:3:230;;-1:-1:-1;5641:3:230;;-1:-1:-1;5641:3:230;;-1:-1:-1;5641:3:230:i;:::-;;;;5588:469;;;;6085:11;-1:-1:-1;;;;;6067:29:230;:14;-1:-1:-1;;;;;6067:29:230;;6063:63;;6105:21;;-1:-1:-1;;;6105:21:230;;;;;;;;;;;6063:63;6139:36;;-1:-1:-1;;;6139:36:230;;6169:4;6139:36;;;1206:51:486;-1:-1:-1;;;;;6139:21:230;;;;;1179:18:486;;6139:36:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6132:43;5088:1092;-1:-1:-1;;;;;;;;5088:1092:230:o;818:216:447:-;968:58;;-1:-1:-1;;;;;12679:32:486;;968:58:447;;;12661:51:486;12728:18;;;12721:34;;;941:86:447;;961:5;;-1:-1:-1;;;991:23:447;12634:18:486;;968:58:447;12487:274:486;941:86:447;818:216;;;:::o;1359:130:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;719:10:466;1422:23:452;1414:68;;;;-1:-1:-1;;;1414:68:452;;12968:2:486;1414:68:452;;;12950:21:486;;;12987:18;;;12980:30;13046:34;13026:18;;;13019:62;13098:18;;1414:68:452;12766:356:486;1414:68:452;1359:130::o;1496:153:453:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;:34::i;12735:214:230:-;12828:4;-1:-1:-1;;;;;12847:31:230;;;;;;:97;;;12911:26;12938:4;12911:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;12882:62:230;;;12911:32;;12882:62;12840:104;12735:214;-1:-1:-1;;;12735:214:230:o;14385:1318::-;14617:2;;:36;;-1:-1:-1;;;14617:36:230;;14516:25;;14585:21;;-1:-1:-1;;;;;14617:2:230;;;;:13;;:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14763:58;;-1:-1:-1;;;14763:58:230;;14585:69;;-1:-1:-1;14686:11:230;;14660:15;;-1:-1:-1;;;;;14763:21:230;;;;;:58;;14793:10;;14686:11;;14660:15;;14763:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14740:81;;14827:18;14848:13;-1:-1:-1;;;;;14848:21:230;;14878:10;14891:7;14900:4;14848:57;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14927:32;;-1:-1:-1;;;14927:32:230;;-1:-1:-1;;;;;1224:32:486;;;14927::230;;;1206:51:486;14827:78:230;;-1:-1:-1;14927:20:230;;;;;;1179:18:486;;14927:32:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;;-1:-1:-1;14963:34:230;;-1:-1:-1;;;14963:34:230;;-1:-1:-1;;;;;1224:32:486;;;14963:34:230;;;1206:51:486;14963:20:230;;;;;1179:18:486;;14963:34:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14912:137;;;;-1:-1:-1;;;14912:137:230;;14630:2:486;14912:137:230;;;14612:21:486;14669:2;14649:18;;;14642:30;14708:34;14688:18;;;14681:62;-1:-1:-1;;;14759:18:486;;;14752:34;14803:19;;14912:137:230;14428:400:486;14912:137:230;15078:32;;-1:-1:-1;;;15078:32:230;;-1:-1:-1;;;;;1224:32:486;;;15078::230;;;1206:51:486;15056:11:230;;15078:20;;;;;;1179:18:486;;15078:32:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15073:558;;-1:-1:-1;15129:5:230;15073:558;;;15152:34;;-1:-1:-1;;;15152:34:230;;-1:-1:-1;;;;;1224:32:486;;;15152:34:230;;;1206:51:486;15152:20:230;;;;;1179:18:486;;15152:34:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15147:484;;-1:-1:-1;15205:4:230;15147:484;;;15231:16;15249;15269:13;-1:-1:-1;;;;;15269:25:230;;15303:10;15316:7;15325:4;15269:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15230:100;;;;15339:18;15359;15381:13;-1:-1:-1;;;;;15381:25:230;;15415:10;15428:7;15437:5;15381:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15338:105;;;;15517:10;15506:8;:21;:46;;;;;15542:10;15531:8;:21;15506:46;15502:123;;;15573:4;15564:13;;15502:123;;;15611:5;15602:14;;15502:123;15222:409;;;;15147:484;15663:13;15678:11;15691:6;15652:46;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15637:61;;14545:1158;;;;;14385:1318;;;;:::o;15707:474::-;15841:25;15876:13;15906:10;15876:42;;15963:7;-1:-1:-1;;;;;15963:14:230;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15939:40:230;15947:11;-1:-1:-1;;;;;15939:40:230;;:84;;;;16007:7;-1:-1:-1;;;;;16007:14:230;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15983:40:230;15991:11;-1:-1:-1;;;;;15983:40:230;;15939:84;15924:169;;;;-1:-1:-1;;;15924:169:230;;15720:2:486;15924:169:230;;;15702:21:486;15759:2;15739:18;;;15732:30;15798:34;15778:18;;;15771:62;-1:-1:-1;;;15849:18:486;;;15842:52;15911:19;;15924:169:230;15518:418:486;15924:169:230;16126:2;;:36;;-1:-1:-1;;;16126:36:230;;-1:-1:-1;;;;;16126:2:230;;;;:13;;:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16115:61;;;-1:-1:-1;;;;;16199:15:486;;;16115:61:230;;;16181:34:486;16251:15;;;16231:18;;;16224:43;16116:18;;16115:61:230;;;;;;;;;;;;;16100:76;;15870:311;15707:474;;;;:::o;17937:367::-;18139:26;;;18163:1;18139:26;;;18066:25;18139:26;;;;;18066:25;18101:35;;18139:26;18163:1;18139:26;;;;;;;;;;-1:-1:-1;18139:26:230;18101:64;;18185:10;18171:8;18180:1;18171:11;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;18171:24:230;;;-1:-1:-1;;;;;18171:24:230;;;;;18215:11;18201:8;18210:1;18201:11;;;;;;;;:::i;:::-;;;;;;:25;-1:-1:-1;;;;;18201:25:230;;;-1:-1:-1;;;;;18201:25:230;;;;;18258:30;18277:10;18258:18;:30::i;:::-;18290:8;18247:52;;;;;;;;;:::i;17482:451::-;-1:-1:-1;;;;;17665:25:230;;;17652:10;17665:25;;;:13;:25;;;;;;;;:38;;;;;;;;;;17617:25;;17665:38;;17713:8;17709:58;;-1:-1:-1;;;;;;17729:26:230;;;;;;;:13;:26;;;;;;;;:38;;;;;;;;;;;;17709:58;17774:14;17791:43;17810:10;17822:11;17791:18;:43::i;:::-;17904:2;;:23;;-1:-1:-1;;;17904:23:230;;17272:2:486;17904:23:230;;;17254:21:486;17311:1;17291:18;;;17284:29;-1:-1:-1;;;17329:18:486;;;17322:36;17774:60:230;;-1:-1:-1;17866:10:230;;17878:11;;17891:3;;17774:60;;-1:-1:-1;;;;;17904:2:230;;:13;;17375:18:486;;17904:23:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17855:73;;;-1:-1:-1;;;;;17773:15:486;;;17855:73:230;;;17755:34:486;17825:15;;;17805:18;;;17798:43;17889:8;17877:21;;;17857:18;;;17850:49;17935:15;;17915:18;;;17908:43;17988:15;;;;17967:19;;;17960:44;17689:19;;17855:73:230;;;;;;;;;;;;17840:88;;17646:287;;17482:451;;;;:::o;18308:247::-;18513:2;;:36;;-1:-1:-1;;;18513:36:230;;18217:2:486;18513:36:230;;;18199:21:486;18256:2;18236:18;;;18229:30;-1:-1:-1;;;18275:18:486;;;18268:49;18439:25:230;;18500:11;;-1:-1:-1;;;;;18513:2:230;;;;:13;;18334:18:486;;18513:36:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18489:61;;;-1:-1:-1;;;;;16199:15:486;;;18489:61:230;;;16181:34:486;16251:15;;;;16231:18;;;16224:43;16116:18;;18489:61:230;;;;;;;;;;;;;18474:76;;18308:247;;;;:::o;18559:261::-;18772:2;;:42;;-1:-1:-1;;;18772:42:230;;18902:2:486;18772:42:230;;;18884:21:486;18941:2;18921:18;;;18914:30;-1:-1:-1;;;18960:18:486;;;18953:55;18698:25:230;;18759:11;;-1:-1:-1;;;;;18772:2:230;;;;:13;;19025:18:486;;18772:42:230;18700:349:486;18824:266:230;19039:2;;:45;;-1:-1:-1;;;19039:45:230;;19256:2:486;19039:45:230;;;19238:21:486;19295:2;19275:18;;;19268:30;19334;19314:18;;;19307:58;18965:25:230;;19026:11;;-1:-1:-1;;;;;19039:2:230;;;;:13;;19382:18:486;;19039:45:230;19054:352:486;23857:449:230;24046:2;;:70;;-1:-1:-1;;;24046:70:230;;-1:-1:-1;;;;;16199:15:486;;;24046:70:230;;;16181:34:486;16251:15;;;16231:18;;;16224:43;23989:25:230;;24024:19;;24046:2;;;:27;;16116:18:486;;24046:70:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24024:92;-1:-1:-1;;;;;;24126:25:230;;24122:123;;24185:53;;-1:-1:-1;;;24185:53:230;;19922:2:486;24185:53:230;;;19904:21:486;19961:2;19941:18;;;19934:30;20000:34;19980:18;;;19973:62;-1:-1:-1;;;20051:18:486;;;20044:41;20102:19;;24185:53:230;19720:407:486;24122:123:230;24265:36;;;-1:-1:-1;;;;;16199:15:486;;;24265:36:230;;;16181:34:486;16251:15;;16231:18;;;16224:43;;;;16116:18;;24265:36:230;15941:332:486;19094:1047:230;19228:25;19263:22;19311:10;19263:60;;19329:14;19346:7;-1:-1:-1;;;;;19346:14:230;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19329:33;;19368:14;19385:7;-1:-1:-1;;;;;19385:14:230;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19368:33;-1:-1:-1;;;;;;19434:30:230;;;;;;;;;19497;;;19434;;19541:42;;;19564:19;19541:42;19533:108;;;;-1:-1:-1;;;19533:108:230;;20334:2:486;19533:108:230;;;20316:21:486;20373:2;20353:18;;;20346:30;20412:34;20392:18;;;20385:62;-1:-1:-1;;;20463:18:486;;;20456:51;20524:19;;19533:108:230;20132:417:486;19533:108:230;19648:26;19680;19724:19;19720:325;;;19767:16;;;19781:1;19767:16;;19819:1;19767:16;;;19805;;;;;;;;19767;;-1:-1:-1;19767:16:230;;19805;;;;19767;19805;;;;;-1:-1:-1;19805:16:230;19793:28;;19846:6;19831:9;19841:1;19831:12;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;19831:21:230;;;-1:-1:-1;;;;;19831:21:230;;;;;19877:6;19862:9;19872:1;19862:12;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;19862:21:230;;;-1:-1:-1;;;;;19862:21:230;;;;;19720:325;;;-1:-1:-1;19920:16:230;;;19934:1;19920:16;;19972:1;19920:16;;;19958;;;;;;;;19920;;19958;;;;19920;19958;;;;;-1:-1:-1;19958:16:230;19946:28;;19999:6;19984:9;19994:1;19984:12;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;19984:21:230;;;-1:-1:-1;;;;;19984:21:230;;;;;20030:6;20015:9;20025:1;20015:12;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;20015:21:230;;;-1:-1:-1;;;;;20015:21:230;;;;;19720:325;20083:30;20102:10;20083:18;:30::i;:::-;20115:9;20126;20072:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20057:79;;19257:884;;;;;;;19094:1047;;;;:::o;20145:806::-;20375:2;;:36;;-1:-1:-1;;;20375:36:230;;21323:2:486;20375:36:230;;;21305:21:486;21362:2;21342:18;;;21335:30;-1:-1:-1;;;21381:18:486;;;21374:49;20278:25:230;;20313:39;;-1:-1:-1;;;;;20375:2:230;;;;:13;;21440:18:486;;20375:36:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20444:60;;-1:-1:-1;;;20444:60:230;;-1:-1:-1;;;;;1224:32:486;;;20444:60:230;;;1206:51:486;20313:99:230;;-1:-1:-1;20418:23:230;;20444:39;;;;;1179:18:486;;20444:60:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20444:60:230;;;;;;;;;;;;:::i;:::-;20529:2;;:23;;-1:-1:-1;;;20529:23:230;;20418:86;;-1:-1:-1;20511:15:230;;-1:-1:-1;;;;;20529:2:230;;;;:13;;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20511:41;;20558:22;20583:48;20602:6;20618:11;20583:18;:48::i;:::-;20558:73;-1:-1:-1;20558:73:230;-1:-1:-1;;;;;20689:28:230;;;;:92;;-1:-1:-1;20739:42:230;-1:-1:-1;;;;;20721:60:230;;;20689:92;20685:140;;;-1:-1:-1;20811:7:230;20685:140;20901:14;20917:19;20938:7;20890:56;;;;;;;;;;:::i;20955:909::-;21223:2;;:50;;-1:-1:-1;;;21223:50:230;;21097:25;;21132:47;;-1:-1:-1;;;;;21223:2:230;;;;:13;;:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21319:41;;-1:-1:-1;;;21319:41:230;;-1:-1:-1;;;;;1224:32:486;;;21319:41:230;;;1206:51:486;21132:147:230;;-1:-1:-1;21285:20:230;;21319;;;;;1179:18:486;;21319:41:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21285:76;;21367:23;21393:30;21413:9;21393:19;:30::i;:::-;21367:56;;21430:22;21455:48;21474:6;21490:11;21455:18;:48::i;:::-;21575:2;;:23;;-1:-1:-1;;;21575:23:230;;21430:73;;-1:-1:-1;21430:73:230;;21509:25;;-1:-1:-1;;;;;21575:2:230;;:13;;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21557:41;-1:-1:-1;;;;;;21608:28:230;;;;:92;;-1:-1:-1;21658:42:230;-1:-1:-1;;;;;21640:60:230;;;21608:92;21604:140;;;21730:7;21710:27;;21604:140;21820:14;21836:7;21845:13;21809:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21794:65;;21126:738;;;;;;20955:909;;;;:::o;22646:468::-;22834:2;;:50;;-1:-1:-1;;;22834:50:230;;22775:25;;22810:21;;-1:-1:-1;;;;;22834:2:230;;;;:13;;:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22914:2;;:52;;-1:-1:-1;;;22914:52:230;;24425:2:486;22914:52:230;;;24407:21:486;24464:2;24444:18;;;24437:30;24503:34;24483:18;;;24476:62;-1:-1:-1;;;24554:18:486;;;24547:33;22810:74:230;;-1:-1:-1;22890:21:230;;-1:-1:-1;;;;;22914:2:230;;;;:13;;24597:19:486;;22914:52:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22990:2;;:23;;-1:-1:-1;;;22990:23:230;;22890:76;;-1:-1:-1;22972:15:230;;-1:-1:-1;;;;;22990:2:230;;;;:13;;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23035:74;;;-1:-1:-1;;;;;24998:15:486;;;23035:74:230;;;24980:34:486;25050:15;;;25030:18;;;25023:43;;;;25102:15;;;25082:18;;;25075:43;25154:15;;;25134:18;;;25127:43;25207:15;;;25186:19;;;25179:44;22972:41:230;;-1:-1:-1;24914:19:486;;23035:74:230;;;;;;;;;;;;;23020:89;;22804:310;;;22646:468;;;;:::o;22237:405::-;22492:2;;:50;;-1:-1:-1;;;22492:50:230;;22366:25;;22401:47;;-1:-1:-1;;;;;22492:2:230;;;;:13;;:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22581:42;;-1:-1:-1;;;22581:42:230;;-1:-1:-1;;;;;1224:32:486;;;22581:42:230;;;1206:51:486;22401:147:230;;-1:-1:-1;22581:20:230;;;;;;1179:18:486;;22581:42:230;1033:230:486;23118:735:230;23250:25;23285:43;23331:2;;;;;;;;;-1:-1:-1;;;;;23331:2:230;-1:-1:-1;;;;;23331:17:230;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23331:19:230;;;;;;;;;;;;:::i;:::-;23285:65;;23361:9;23356:493;23380:5;:12;23376:1;:16;23356:493;;;23407:40;23450:5;23456:1;23450:8;;;;;;;;:::i;:::-;;;;;;;23407:51;;23501:10;-1:-1:-1;;;;;23470:42:230;:4;:19;;;-1:-1:-1;;;;;23470:42:230;;23466:377;;;23550:19;;23571:18;;;;;23591:19;;;;;23539:72;;-1:-1:-1;;;;;12365:15:486;;;23539:72:230;;;12347:34:486;12417:15;;;;12397:18;;;12390:43;12449:18;;;12442:34;23539:72:230;;;;;;;;;;12282:18:486;;;;23539:72:230;;;-1:-1:-1;23667:5:230;;23466:377;23723:10;-1:-1:-1;;;;;23691:43:230;:4;:20;;;-1:-1:-1;;;;;23691:43:230;;23687:156;;;23772:4;:20;;;23794:4;:18;;;23814:4;:19;;;23761:73;;;;;;;;;-1:-1:-1;;;;;12365:15:486;;;12347:34;;12417:15;;;;12412:2;12397:18;;12390:43;12464:2;12449:18;;12442:34;;;;12297:2;12282:18;;12107:375;23761:73:230;;;;;;;;;;;;;23746:88;;23687:156;-1:-1:-1;23394:3:230;;;;:::i;:::-;;;;23356:493;;;;23279:574;23118:735;;;;:::o;25301:1461::-;25426:25;25465:13;25482:2;25465:19;25461:1297;;;25640:35;;25510:42;;25575;;25640:35;;25651:10;;25510:42;;25575;;25640:35;;;:::i;:::-;;;;;;;;;;;;;25625:50;;25486:196;;25461:1297;;;25745:42;25845;25945;26032;26119;-1:-1:-1;;;;;26175:24:230;;;;26171:581;;;26211:18;26258:10;-1:-1:-1;;;;;26243:25:230;:11;-1:-1:-1;;;;;26243:25:230;;26239:162;;;-1:-1:-1;26293:13:230;26239:162;;;26342:10;-1:-1:-1;;;;;26327:25:230;:11;-1:-1:-1;;;;;26327:25:230;;26323:78;;;-1:-1:-1;26377:13:230;26323:78;26436:8;26446;26456:11;26469;26425:56;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26410:71;;26201:289;26171:581;;;26514:10;-1:-1:-1;;;;;26500:24:230;:10;-1:-1:-1;;;;;26500:24:230;;26496:256;;;26562:10;26574:13;26589:10;26601;26551:61;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26536:76;;26496:256;;;26645:10;-1:-1:-1;;;;;26631:24:230;:10;-1:-1:-1;;;;;26631:24:230;;26627:125;;;26693:10;26705:13;26720:10;26732;26682:61;;;;;;;;;;;:::i;26627:125::-;25688:1070;;;;;25301:1461;;;;:::o;17265:213::-;17450:23;;;-1:-1:-1;;;;;1224:32:486;;17450:23:230;;;1206:51:486;17400:25:230;;1179:18:486;17450:23:230;1033:230:486;16391:429:230;16583:2;;:42;;-1:-1:-1;;;16583:42:230;;18902:2:486;16583:42:230;;;18884:21:486;18941:2;18921:18;;;18914:30;-1:-1:-1;;;18960:18:486;;;18953:55;16527:25:230;;16562:18;;-1:-1:-1;;;;;16583:2:230;;;;:13;;19025:18:486;;16583:42:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16647:2;;:40;;-1:-1:-1;;;16647:40:230;;28637:2:486;16647:40:230;;;28619:21:486;28676:2;28656:18;;;28649:30;28715:25;28695:18;;;28688:53;16562:63:230;;-1:-1:-1;16631:13:230;;-1:-1:-1;;;;;16647:2:230;;;;:13;;28758:18:486;;16647:40:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16779:36;;16631:56;;-1:-1:-1;16730:11:230;;16779:36;;16790:10;;16631:56;;16730:11;;16779:36;;;:::i;16824:437::-;17018:2;;:45;;-1:-1:-1;;;17018:45:230;;19256:2:486;17018:45:230;;;19238:21:486;19295:2;19275:18;;;19268:30;19334;19314:18;;;19307:58;16962:25:230;;16997:18;;-1:-1:-1;;;;;17018:2:230;;;;:13;;19382:18:486;;17018:45:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17085:2;;:43;;-1:-1:-1;;;17085:43:230;;29378:2:486;17085:43:230;;;29360:21:486;29417:2;29397:18;;;29390:30;29456:28;29436:18;;;29429:56;16997:66:230;;-1:-1:-1;17069:13:230;;-1:-1:-1;;;;;17085:2:230;;;;:13;;29502:18:486;;17085:43:230;29176:350:486;24310:956:230;24508:2;;:36;;-1:-1:-1;;;24508:36:230;;24441:25;;24476:21;;-1:-1:-1;;;;;24508:2:230;;;;:13;;:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24633:22;;;24653:1;24633:22;;;;;;;;;24476:69;;-1:-1:-1;24578:11:230;;24551:10;;24633:22;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;24633:22:230;;-1:-1:-1;;24633:22:230;;;;;;;;-1:-1:-1;;24696:22:230;;;24716:1;24696:22;;;;;;;;;24598:57;;-1:-1:-1;24661:32:230;;24696:22;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;24696:22:230;;-1:-1:-1;;24696:22:230;;;;;;;;;;;24661:57;;24732:18;24778:10;-1:-1:-1;;;;;24753:36:230;:4;-1:-1:-1;;;;;24753:11:230;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24753:36:230;;24732:57;;24797:18;24843:10;-1:-1:-1;;;;;24818:36:230;:4;-1:-1:-1;;;;;24818:11:230;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24818:36:230;;24797:57;;24870:13;:30;;;;24887:13;24870:30;24862:70;;;;-1:-1:-1;;;24862:70:230;;29733:2:486;24862:70:230;;;29715:21:486;29772:2;29752:18;;;29745:30;29811:29;29791:18;;;29784:57;29858:18;;24862:70:230;29531:351:486;24862:70:230;24963:4;-1:-1:-1;;;;;24963:11:230;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24941:9;24951:1;24941:12;;;;;;;;:::i;:::-;;;;;;;:19;;:35;;;;;;;;;;;25004:4;-1:-1:-1;;;;;25004:11:230;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24984:9;24994:1;24984:12;;;;;;;;:::i;:::-;;;;;;;:17;;:33;-1:-1:-1;;;;;24984:33:230;;;-1:-1:-1;;;;;24984:33:230;;;;;25043:4;-1:-1:-1;;;;;25043:11:230;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25025:9;25035:1;25025:12;;;;;;;;:::i;:::-;;;;;;;:15;;:31;-1:-1:-1;;;;;25025:31:230;;;-1:-1:-1;;;;;25025:31:230;;;;;25087:4;-1:-1:-1;;;;;25087:11:230;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25065:9;25075:1;25065:12;;;;;;;;:::i;:::-;;;;;;;:19;;:35;;;;;;;;;;;25128:4;-1:-1:-1;;;;;25128:11:230;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25108:9;25118:1;25108:12;;;;;;;;:::i;:::-;;;;;;;:17;;:33;-1:-1:-1;;;;;25108:33:230;;;-1:-1:-1;;;;;25108:33:230;;;;;25167:4;-1:-1:-1;;;;;25167:11:230;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25149:9;25159:1;25149:12;;;;;;;;:::i;:::-;;;;;;;:15;;:31;-1:-1:-1;;;;;25149:31:230;;;-1:-1:-1;;;;;25149:31:230;;;;;24724:463;;25219:13;25234:4;25240:9;25251;25208:53;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25193:68;;24470:796;;;;24310:956;;;;:::o;4386:352::-;4480:7;4495:21;4552:5;-1:-1:-1;;;;;4527:41:230;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4519:52;;4495:76;;4607:2;4590:13;:19;;:143;;4713:18;4729:2;4713:13;:18;:::i;:::-;4708:24;;:2;:24;:::i;:::-;4682:51;;4690:13;4682:51;:::i;:::-;4590:143;;;4651:18;4656:13;4651:2;:18;:::i;:::-;4646:24;;:2;:24;:::i;:::-;4620:51;;4628:13;4620:51;:::i;:::-;4577:156;4386:352;-1:-1:-1;;;;4386:352:230:o;5562:109:469:-;5618:16;5653:3;:11;;5646:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:109;;;:::o;3868:717:447:-;4298:23;4324:69;4352:4;4324:69;;;;;;;;;;;;;;;;;4332:5;-1:-1:-1;;;;;4324:27:447;;;:69;;;;;:::i;:::-;4407:17;;4298:95;;-1:-1:-1;4407:21:447;4403:176;;4502:10;4491:30;;;;;;;;;;;;:::i;:::-;4483:85;;;;-1:-1:-1;;;4483:85:447;;33237:2:486;4483:85:447;;;33219:21:486;33276:2;33256:18;;;33249:30;33315:34;33295:18;;;33288:62;-1:-1:-1;;;33366:18:486;;;33359:40;33416:19;;4483:85:447;33035:406:486;6184:450:230;6357:17;6376:7;6391:23;6417:147;6454:8;6494:24;;;6520:10;6532:11;6545:12;6471:87;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6471:87:230;;;;;;;;;;;;;;-1:-1:-1;;;;;6471:87:230;-1:-1:-1;;;;;;6471:87:230;;;;;;;;;;6417:21;:147::i;:::-;6391:173;;6588:10;6577:52;;;;;;;;;;;;:::i;:::-;6570:59;;;;;6184:450;;;;;;;:::o;14194:187::-;14341:2;;:35;;-1:-1:-1;;;14341:35:230;;34430:2:486;14341:35:230;;;34412:21:486;34469:2;34449:18;;;34442:30;-1:-1:-1;;;34488:18:486;;;34481:48;14275:7:230;;-1:-1:-1;;;;;14341:2:230;;:13;;34546:18:486;;14341:35:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13690:500::-;-1:-1:-1;;;;;13854:29:230;;;13814:7;13854:29;;;:17;:29;;;;;;;;:42;;;;;;;;;;;13814:7;;13854:42;13906:26;13902:104;;-1:-1:-1;;;;;;13957:30:230;;;;;;;:17;:30;;;;;;;;:42;;;;;;;;;;;;13902:104;-1:-1:-1;;;;;14016:26:230;;;14012:174;;14059:12;-1:-1:-1;14052:19:230;;14012:174;14145:2;;:34;;-1:-1:-1;;;14145:34:230;;34777:2:486;14145:34:230;;;34759:21:486;34816:2;34796:18;;;34789:30;-1:-1:-1;;;34835:18:486;;;34828:47;-1:-1:-1;;;;;14145:2:230;;;;:13;;34892:18:486;;14145:34:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14138:41;;;;;12953:733;13058:7;;13073:123;13097:6;:13;13093:1;:17;13073:123;;;13142:19;-1:-1:-1;;;;;13129:32:230;:6;13136:1;13129:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13129:32:230;;13125:64;;;13170:19;13163:26;;;;;13125:64;13112:3;;;;:::i;:::-;;;;13073:123;;;-1:-1:-1;13219:2:230;;:23;;-1:-1:-1;;;13219:23:230;;13201:15;;-1:-1:-1;;;;;13219:2:230;;:13;;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13201:41;;13253:9;13248:99;13272:6;:13;13268:1;:17;13248:99;;;13317:7;-1:-1:-1;;;;;13304:20:230;:6;13311:1;13304:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13304:20:230;;13300:40;;;-1:-1:-1;13333:7:230;-1:-1:-1;13326:14:230;;13300:40;13287:3;;;;:::i;:::-;;;;13248:99;;;-1:-1:-1;13374:2:230;;:28;;-1:-1:-1;;;13374:28:230;;35123:2:486;13374:28:230;;;35105:21:486;35162:2;35142:18;;;35135:30;-1:-1:-1;;;35181:18:486;;;35174:41;13352:19:230;;-1:-1:-1;;;;;13374:2:230;;:13;;35232:18:486;;13374:28:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13352:50;;13413:9;13408:107;13432:6;:13;13428:1;:17;13408:107;;;13477:11;-1:-1:-1;;;;;13464:24:230;:6;13471:1;13464:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13464:24:230;;13460:48;;;-1:-1:-1;13497:11:230;-1:-1:-1;13490:18:230;;-1:-1:-1;13490:18:230;13460:48;13447:3;;;;:::i;:::-;;;;13408:107;;;-1:-1:-1;13535:2:230;;:26;;-1:-1:-1;;;13535:26:230;;35463:2:486;13535:26:230;;;35445:21:486;35502:1;35482:18;;;35475:29;-1:-1:-1;;;35520:18:486;;;35513:39;13520:12:230;;-1:-1:-1;;;;;13535:2:230;;:13;;35569:18:486;;13535:26:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13520:41;;13572:9;13567:93;13591:6;:13;13587:1;:17;13567:93;;;13636:4;-1:-1:-1;;;;;13623:17:230;:6;13630:1;13623:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13623:17:230;;13619:34;;;-1:-1:-1;13649:4:230;-1:-1:-1;13642:11:230;;-1:-1:-1;;13642:11:230;13619:34;13606:3;;;;:::i;:::-;;;;13567:93;;;;13672:6;13679:1;13672:9;;;;;;;;:::i;:::-;;;;;;;13665:16;;;;;12953:733;;;;:::o;21868:365::-;21942:23;21973:7;21990:126;22015:27;;-1:-1:-1;;;22015:27:230;;22031:10;;;22015:27;;;802:25:486;-1:-1:-1;;;;;22015:15:230;;;;;775:18:486;;22015:27:230;;;;;;;;;;;;;;;;;;-1:-1:-1;22015:27:230;;;;;;;;-1:-1:-1;;22015:27:230;;;;;;;;;;;;:::i;:::-;;;22011:88;;22085:5;;22011:88;22043:25;22106:3;;;;:::i;:::-;;;;21990:126;;;22144:1;22130:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22130:16:230;;22121:25;;22157:9;22152:77;22176:1;22172:5;;:1;:5;22152:77;;;22204:18;;-1:-1:-1;;;22204:18:230;;;;;802:25:486;;;-1:-1:-1;;;;;22204:15:230;;;;;775:18:486;;22204::230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22192:6;22199:1;22192:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22192:30:230;;;:9;;;;;;;;;;;:30;22179:3;;;;:::i;:::-;;;;22152:77;;;;21967:266;21868:365;;;:::o;3883:223:448:-;4016:12;4047:52;4069:6;4077:4;4083:1;4086:12;4047:21;:52::i;6638:363:230:-;6721:12;-1:-1:-1;;;;;1476:19:448;;;6741:88:230;;;;-1:-1:-1;;;6741:88:230;;35800:2:486;6741:88:230;;;35782:21:486;35839:2;35819:18;;;35812:30;35878:34;35858:18;;;35851:62;-1:-1:-1;;;35929:18:486;;;35922:36;35975:19;;6741:88:230;35598:402:486;6741:88:230;6836:12;6850:23;6877:6;-1:-1:-1;;;;;6877:19:230;6897:4;6877:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6835:67;;;;6915:81;6933:7;6942:10;6915:81;;;;;;;;;;;;;;;;;:17;:81::i;:::-;6908:88;6638:363;-1:-1:-1;;;;;6638:363:230:o;4970:446:448:-;5135:12;5192:5;5167:21;:30;;5159:81;;;;-1:-1:-1;;;5159:81:448;;36486:2:486;5159:81:448;;;36468:21:486;36525:2;36505:18;;;36498:30;36564:34;36544:18;;;36537:62;-1:-1:-1;;;36615:18:486;;;36608:36;36661:19;;5159:81:448;36284:402:486;5159:81:448;5251:12;5265:23;5292:6;-1:-1:-1;;;;;5292:11:448;5311:5;5318:4;5292:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5250:73;;;;5340:69;5367:6;5375:7;5384:10;5396:12;5340:26;:69::i;:::-;5333:76;4970:446;-1:-1:-1;;;;;;;4970:446:448:o;7005:437:230:-;7137:12;7161:7;7157:281;;;-1:-1:-1;7185:10:230;7178:17;;7157:281;7220:17;;:21;7216:216;;7303:10;7297:17;7353:15;7340:10;7336:2;7332:19;7325:44;7216:216;7410:12;7403:20;;-1:-1:-1;;;7403:20:230;;;;;;;;:::i;6588:628:448:-;6768:12;6796:7;6792:418;;;6823:17;;6819:286;;-1:-1:-1;;;;;1476:19:448;;;7030:60;;;;-1:-1:-1;;;7030:60:448;;37117:2:486;7030:60:448;;;37099:21:486;37156:2;37136:18;;;37129:30;37195:31;37175:18;;;37168:59;37244:18;;7030:60:448;36915:353:486;7030:60:448;-1:-1:-1;7125:10:448;7118:17;;6792:418;7166:33;7174:10;7186:12;7897:17;;:21;7893:379;;8125:10;8119:17;8181:15;8168:10;8164:2;8160:19;8153:44;7893:379;8248:12;8241:20;;-1:-1:-1;;;8241:20:448;;;;;;;;:::i;14:150:486:-;-1:-1:-1;;;;;108:31:486;;98:42;;88:70;;154:1;151;144:12;169:482;293:6;301;354:2;342:9;333:7;329:23;325:32;322:52;;;370:1;367;360:12;322:52;409:9;396:23;428:50;472:5;428:50;:::i;:::-;497:5;-1:-1:-1;554:2:486;539:18;;526:32;567:52;526:32;567:52;:::i;:::-;638:7;628:17;;;169:482;;;;;:::o;1268:294::-;1355:6;1408:2;1396:9;1387:7;1383:23;1379:32;1376:52;;;1424:1;1421;1414:12;1376:52;1463:9;1450:23;1482:50;1526:5;1482:50;:::i;1567:461::-;1620:3;1658:5;1652:12;1685:6;1680:3;1673:19;1711:4;1740:2;1735:3;1731:12;1724:19;;1777:2;1770:5;1766:14;1798:1;1808:195;1822:6;1819:1;1816:13;1808:195;;;1887:13;;-1:-1:-1;;;;;1883:39:486;1871:52;;1943:12;;;;1978:15;;;;1919:1;1837:9;1808:195;;;-1:-1:-1;2019:3:486;;1567:461;-1:-1:-1;;;;;1567:461:486:o;2033:261::-;2212:2;2201:9;2194:21;2175:4;2232:56;2284:2;2273:9;2269:18;2261:6;2232:56;:::i;2299:550::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2556:9;2543:23;2575:50;2619:5;2575:50;:::i;:::-;2644:5;-1:-1:-1;2696:2:486;2681:18;;2668:32;;-1:-1:-1;2752:2:486;2737:18;;2724:32;2765:52;2724:32;2765:52;:::i;:::-;2836:7;2826:17;;;2299:550;;;;;:::o;2854:657::-;3023:2;3075:21;;;3145:13;;3048:18;;;3167:22;;;2994:4;;3023:2;3246:15;;;;3220:2;3205:18;;;2994:4;3289:196;3303:6;3300:1;3297:13;3289:196;;;3368:13;;-1:-1:-1;;;;;;3364:40:486;3352:53;;3460:15;;;;3425:12;;;;3325:1;3318:9;3289:196;;;-1:-1:-1;3502:3:486;;2854:657;-1:-1:-1;;;;;;2854:657:486:o;4197:258::-;4269:1;4279:113;4293:6;4290:1;4287:13;4279:113;;;4369:11;;;4363:18;4350:11;;;4343:39;4315:2;4308:10;4279:113;;;4410:6;4407:1;4404:13;4401:48;;;-1:-1:-1;;4445:1:486;4427:16;;4420:27;4197:258::o;4460:257::-;4501:3;4539:5;4533:12;4566:6;4561:3;4554:19;4582:63;4638:6;4631:4;4626:3;4622:14;4615:4;4608:5;4604:16;4582:63;:::i;:::-;4699:2;4678:15;-1:-1:-1;;4674:29:486;4665:39;;;;4706:4;4661:50;;4460:257;-1:-1:-1;;4460:257:486:o;4722:343::-;-1:-1:-1;;;;;4926:32:486;;4908:51;;4995:2;4990;4975:18;;4968:30;;;-1:-1:-1;;5015:44:486;;5040:18;;5032:6;5015:44;:::i;5070:127::-;5131:10;5126:3;5122:20;5119:1;5112:31;5162:4;5159:1;5152:15;5186:4;5183:1;5176:15;5202:253;5274:2;5268:9;5316:4;5304:17;;5351:18;5336:34;;5372:22;;;5333:62;5330:88;;;5398:18;;:::i;:::-;5434:2;5427:22;5202:253;:::o;5460:275::-;5531:2;5525:9;5596:2;5577:13;;-1:-1:-1;;5573:27:486;5561:40;;5631:18;5616:34;;5652:22;;;5613:62;5610:88;;;5678:18;;:::i;:::-;5714:2;5707:22;5460:275;;-1:-1:-1;5460:275:486:o;5740:764::-;5809:6;5840:2;5883;5871:9;5862:7;5858:23;5854:32;5851:52;;;5899:1;5896;5889:12;5851:52;5939:9;5926:23;5968:18;6009:2;6001:6;5998:14;5995:34;;;6025:1;6022;6015:12;5995:34;6063:6;6052:9;6048:22;6038:32;;6108:7;6101:4;6097:2;6093:13;6089:27;6079:55;;6130:1;6127;6120:12;6079:55;6166:2;6153:16;6188:2;6184;6181:10;6178:36;;;6194:18;;:::i;:::-;6236:53;6279:2;6260:13;;-1:-1:-1;;6256:27:486;6252:36;;6236:53;:::i;:::-;6223:66;;6312:2;6305:5;6298:17;6352:7;6347:2;6342;6338;6334:11;6330:20;6327:33;6324:53;;;6373:1;6370;6363:12;6324:53;6428:2;6423;6419;6415:11;6410:2;6403:5;6399:14;6386:45;6472:1;6451:14;;;6447:23;;;6440:34;;;;-1:-1:-1;6455:5:486;5740:764;-1:-1:-1;;;5740:764:486:o;6509:1363::-;6824:2;6836:21;;;6906:13;;6809:18;;;6928:22;;;6776:4;;7003;;6981:2;6966:18;;;7030:15;;;6776:4;7073:195;7087:6;7084:1;7081:13;7073:195;;;7152:13;;-1:-1:-1;;;;;7148:39:486;7136:52;;7208:12;;;;7243:15;;;;7184:1;7102:9;7073:195;;;-1:-1:-1;;;7304:19:486;;;7284:18;;;7277:47;7374:13;;7396:21;;;7435:12;;;;7487:1;7483:16;;;7474:26;;7470:35;;7530:15;;;7565:1;7575:268;7591:8;7586:3;7583:17;7575:268;;;7686:2;7682:7;7676:3;7668:6;7664:16;7660:30;7653:5;7646:45;7714:41;7748:6;7737:8;7731:15;7714:41;:::i;:::-;7819:14;;;;7704:51;-1:-1:-1;7780:17:486;;;;7619:1;7610:11;7575:268;;;-1:-1:-1;7860:6:486;;6509:1363;-1:-1:-1;;;;;;;;;6509:1363:486:o;9170:127::-;9231:10;9226:3;9222:20;9219:1;9212:31;9262:4;9259:1;9252:15;9286:4;9283:1;9276:15;9302:178;9339:3;9383:4;9376:5;9372:16;9407:7;9397:41;;9418:18;;:::i;:::-;-1:-1:-1;;9454:20:486;;9302:178;-1:-1:-1;;9302:178:486:o;9485:127::-;9546:10;9541:3;9537:20;9534:1;9527:31;9577:4;9574:1;9567:15;9601:4;9598:1;9591:15;10319:135;10358:3;-1:-1:-1;;10379:17:486;;10376:43;;;10399:18;;:::i;:::-;-1:-1:-1;10446:1:486;10435:13;;10319:135::o;10459:175::-;10496:3;10540:4;10533:5;10529:16;10569:4;10560:7;10557:17;10554:43;;;10577:18;;:::i;:::-;10626:1;10613:15;;10459:175;-1:-1:-1;;10459:175:486:o;10985:270::-;11055:6;11108:2;11096:9;11087:7;11083:23;11079:32;11076:52;;;11124:1;11121;11114:12;11076:52;11156:9;11150:16;11175:50;11219:5;11175:50;:::i;11260:184::-;11330:6;11383:2;11371:9;11362:7;11358:23;11354:32;11351:52;;;11399:1;11396;11389:12;11351:52;-1:-1:-1;11422:16:486;;11260:184;-1:-1:-1;11260:184:486:o;11449:168::-;11489:7;11555:1;11551;11547:6;11543:14;11540:1;11537:21;11532:1;11525:9;11518:17;11514:45;11511:71;;;11562:18;;:::i;:::-;-1:-1:-1;11602:9:486;;11449:168::o;11622:125::-;11662:4;11690:1;11687;11684:8;11681:34;;;11695:18;;:::i;:::-;-1:-1:-1;11732:9:486;;11622:125::o;11752:217::-;11792:1;11818;11808:132;;11862:10;11857:3;11853:20;11850:1;11843:31;11897:4;11894:1;11887:15;11925:4;11922:1;11915:15;11808:132;-1:-1:-1;11954:9:486;;11752:217::o;11974:128::-;12014:3;12045:1;12041:6;12038:1;12035:13;12032:39;;;12051:18;;:::i;:::-;-1:-1:-1;12087:9:486;;11974:128::o;13127:276::-;13258:3;13296:6;13290:13;13312:53;13358:6;13353:3;13346:4;13338:6;13334:17;13312:53;:::i;:::-;13381:16;;;;;13127:276;-1:-1:-1;;13127:276:486:o;13408:343::-;13610:2;13592:21;;;13649:2;13629:18;;;13622:30;-1:-1:-1;;;13683:2:486;13668:18;;13661:49;13742:2;13727:18;;13408:343::o;13756:385::-;-1:-1:-1;;;;;14008:15:486;;;13990:34;;14060:15;;;;14055:2;14040:18;;14033:43;14119:14;;14112:22;14107:2;14092:18;;14085:50;13940:2;13925:18;;13756:385::o;14146:277::-;14213:6;14266:2;14254:9;14245:7;14241:23;14237:32;14234:52;;;14282:1;14279;14272:12;14234:52;14314:9;14308:16;14367:5;14360:13;14353:21;14346:5;14343:32;14333:60;;14389:1;14386;14379:12;14833:245;14912:6;14920;14973:2;14961:9;14952:7;14948:23;14944:32;14941:52;;;14989:1;14986;14979:12;14941:52;-1:-1:-1;;15012:16:486;;15068:2;15053:18;;;15047:25;15012:16;;15047:25;;-1:-1:-1;14833:245:486:o;16278:787::-;-1:-1:-1;;;;;16592:15:486;;;16574:34;;16524:2;16627;16645:18;;;16638:30;;;16717:13;;16509:18;;;16739:22;;;16476:4;;16818:15;;;;16546:19;;16627:2;16792;16777:18;;;16476:4;16861:178;16875:6;16872:1;16869:13;16861:178;;;16940:13;;16936:22;;16924:35;;17014:15;;;;16979:12;;;;16897:1;16890:9;16861:178;;;-1:-1:-1;17056:3:486;;16278:787;-1:-1:-1;;;;;;;;16278:787:486:o;20554:562::-;-1:-1:-1;;;;;20839:32:486;;20821:51;;20908:2;20903;20888:18;;20881:30;;;-1:-1:-1;;20934:56:486;;20971:18;;20963:6;20934:56;:::i;:::-;21038:9;21030:6;21026:22;21021:2;21010:9;21006:18;20999:50;21066:44;21103:6;21095;21066:44;:::i;:::-;21058:52;20554:562;-1:-1:-1;;;;;;20554:562:486:o;21469:183::-;21529:4;21562:18;21554:6;21551:30;21548:56;;;21584:18;;:::i;:::-;-1:-1:-1;21629:1:486;21625:14;21641:4;21621:25;;21469:183::o;21657:975::-;21752:6;21783:2;21826;21814:9;21805:7;21801:23;21797:32;21794:52;;;21842:1;21839;21832:12;21794:52;21875:9;21869:16;21908:18;21900:6;21897:30;21894:50;;;21940:1;21937;21930:12;21894:50;21963:22;;22016:4;22008:13;;22004:27;-1:-1:-1;21994:55:486;;22045:1;22042;22035:12;21994:55;22074:2;22068:9;22097:60;22113:43;22153:2;22113:43;:::i;:::-;22097:60;:::i;:::-;22191:15;;;22273:1;22269:10;;;;22261:19;;22257:28;;;22222:12;;;;22297:19;;;22294:39;;;22329:1;22326;22319:12;22294:39;22353:11;;;;22373:229;22389:6;22384:3;22381:15;22373:229;;;22462:3;22456:10;22479:50;22523:5;22479:50;:::i;:::-;22542:18;;22406:12;;;;22580;;;;22373:229;;22637:329;22839:2;22821:21;;;22878:1;22858:18;;;22851:29;-1:-1:-1;;;22911:2:486;22896:18;;22889:36;22957:2;22942:18;;22637:329::o;22971:413::-;-1:-1:-1;;;;;23258:15:486;;;23240:34;;23310:15;;;23305:2;23290:18;;23283:43;23362:15;;;23357:2;23342:18;;23335:43;23190:2;23175:18;;22971:413::o;23389:397::-;23591:2;23573:21;;;23630:2;23610:18;;;23603:30;23669:34;23664:2;23649:18;;23642:62;-1:-1:-1;;;23735:2:486;23720:18;;23713:31;23776:3;23761:19;;23389:397::o;25234:1642::-;25358:6;25389:2;25432;25420:9;25411:7;25407:23;25403:32;25400:52;;;25448:1;25445;25438:12;25400:52;25481:9;25475:16;25514:18;25506:6;25503:30;25500:50;;;25546:1;25543;25536:12;25500:50;25569:22;;25622:4;25614:13;;25610:27;-1:-1:-1;25600:55:486;;25651:1;25648;25641:12;25600:55;25680:2;25674:9;25703:60;25719:43;25759:2;25719:43;:::i;25703:60::-;25797:15;;;25879:1;25875:10;;;;25867:19;;25863:28;;;25828:12;;;;25903:19;;;25900:39;;;25935:1;25932;25925:12;25900:39;25959:11;;;;25979:867;25995:6;25990:3;25987:15;25979:867;;;26077:4;26071:3;26062:7;26058:17;26054:28;26051:118;;;26123:1;26152:2;26148;26141:14;26051:118;26195:22;;:::i;:::-;26251:3;26245:10;26268:52;26312:7;26268:52;:::i;:::-;26333:22;;26389:12;;;26383:19;26415:52;26383:19;26415:52;:::i;:::-;26487:14;;;26480:31;26534:2;26570:12;;;26564:19;26596:52;26564:19;26596:52;:::i;:::-;26668:14;;;26661:31;26715:2;26759:12;;;26753:19;26737:14;;;26730:43;26786:18;;26021:4;26012:14;;;;26824:12;;;;25979:867;;27298:559;-1:-1:-1;;;;;27679:15:486;;;27661:34;;27731:15;;;27726:2;27711:18;;27704:43;27783:15;;;27778:2;27763:18;;27756:43;27835:15;;;27830:2;27815:18;;27808:43;27610:3;27595:19;;27298:559::o;29887:683::-;29945:3;29983:5;29977:12;30010:6;30005:3;29998:19;30036:4;30065:2;30060:3;30056:12;30049:19;;30102:2;30095:5;30091:14;30123:1;30133:412;30147:6;30144:1;30141:13;30133:412;;;30206:13;;30290:9;;-1:-1:-1;;;;;30286:18:486;;;30274:31;;30349:11;;;30343:18;30339:27;30325:12;;;30318:49;30390:4;30448:11;;;30442:18;30435:26;30428:34;30414:12;;;30407:56;30492:4;30483:14;;;;30520:15;;;;30259:1;30162:9;30133:412;;30575:803;-1:-1:-1;;;;;31054:15:486;;;31036:34;;31106:15;;31101:2;31086:18;;31079:43;31158:3;31153:2;31138:18;;31131:31;;;30979:4;;31185:62;;31227:19;;31219:6;31185:62;:::i;:::-;31295:9;31287:6;31283:22;31278:2;31267:9;31263:18;31256:50;31323:49;31365:6;31357;31323:49;:::i;31383:273::-;31451:6;31504:2;31492:9;31483:7;31479:23;31475:32;31472:52;;;31520:1;31517;31510:12;31472:52;31552:9;31546:16;31602:4;31595:5;31591:16;31584:5;31581:27;31571:55;;31622:1;31619;31612:12;31661:422;31750:1;31793:5;31750:1;31807:270;31828:7;31818:8;31815:21;31807:270;;;31887:4;31883:1;31879:6;31875:17;31869:4;31866:27;31863:53;;;31896:18;;:::i;:::-;31946:7;31936:8;31932:22;31929:55;;;31966:16;;;;31929:55;32045:22;;;;32005:15;;;;31807:270;;;31811:3;31661:422;;;;;:::o;32088:806::-;32137:5;32167:8;32157:80;;-1:-1:-1;32208:1:486;32222:5;;32157:80;32256:4;32246:76;;-1:-1:-1;32293:1:486;32307:5;;32246:76;32338:4;32356:1;32351:59;;;;32424:1;32419:130;;;;32331:218;;32351:59;32381:1;32372:10;;32395:5;;;32419:130;32456:3;32446:8;32443:17;32440:43;;;32463:18;;:::i;:::-;-1:-1:-1;;32519:1:486;32505:16;;32534:5;;32331:218;;32633:2;32623:8;32620:16;32614:3;32608:4;32605:13;32601:36;32595:2;32585:8;32582:16;32577:2;32571:4;32568:12;32564:35;32561:77;32558:159;;;-1:-1:-1;32670:19:486;;;32702:5;;32558:159;32749:34;32774:8;32768:4;32749:34;:::i;:::-;32819:6;32815:1;32811:6;32807:19;32798:7;32795:32;32792:58;;;32830:18;;:::i;:::-;32868:20;;32088:806;-1:-1:-1;;;32088:806:486:o;32899:131::-;32959:5;32988:36;33015:8;33009:4;32988:36;:::i;33446:413::-;33706:1;33702;33697:3;33693:11;33689:19;33681:6;33677:32;33666:9;33659:51;33746:6;33741:2;33730:9;33726:18;33719:34;33789:2;33784;33773:9;33769:18;33762:30;33640:4;33809:44;33849:2;33838:9;33834:18;33826:6;33809:44;:::i;33864:359::-;33971:6;33979;34032:2;34020:9;34011:7;34007:23;34003:32;34000:52;;;34048:1;34045;34038:12;34000:52;34080:9;34074:16;34099:50;34143:5;34099:50;:::i;:::-;34213:2;34198:18;;;;34192:25;34168:5;;34192:25;;-1:-1:-1;;;33864:359:486:o;36691:219::-;36840:2;36829:9;36822:21;36803:4;36860:44;36900:2;36889:9;36885:18;36877:6;36860:44;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "MAX_SLIPPAGE()": "f9759518", + "_getExtensionFunctions()": "89f8132e", + "acceptOwnership()": "79ba5097", + "amountOutAndSlippageOfSwap(address,uint256,address)": "f560cebd", + "ap()": "3c4f743c", + "customUniV3Router(address,address)": "c8ff6fee", + "defaultOutputToken(address)": "8db87c27", + "getAllRedemptionStrategies()": "a6fdd2bb", + "getInputTokensByOutputToken(address)": "403de57f", + "getRedemptionStrategies(address,address)": "ed287f3f", + "getRedemptionStrategy(address,address)": "b6b928fd", + "getSlippage(address,address)": "2f53ef2b", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "redemptionStrategiesByName(string)": "dee7fe48", + "redemptionStrategiesByTokens(address,address)": "a700f9e4", + "renounceOwnership()": "715018a6", + "swap(address,uint256,address)": "6d069a67", + "transferOwnership(address)": "f2fde38b", + "uniswapV3Fees(address,address)": "398cd955" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LiquidatorsRegistrySecondExtension.json b/packages/sdk/deployments/mode/LiquidatorsRegistrySecondExtension.json new file mode 100644 index 0000000000..a051796228 --- /dev/null +++ b/packages/sdk/deployments/mode/LiquidatorsRegistrySecondExtension.json @@ -0,0 +1,1284 @@ +{ + "address": "0x45A4a3eBb986083597Ac3B34ee2d7dcC3Be8c5C1", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategyToRemove", + "type": "address" + } + ], + "name": "_removeRedemptionStrategy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + } + ], + "name": "_resetRedemptionStrategies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "name": "_setDefaultOutputToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + } + ], + "name": "_setRedemptionStrategies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "name": "_setRedemptionStrategy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "slippages", + "type": "uint256[]" + } + ], + "name": "_setSlippages", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + }, + { + "internalType": "uint24[]", + "name": "fees", + "type": "uint24[]" + } + ], + "name": "_setUniswapV3Fees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + } + ], + "name": "_setUniswapV3Routers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ap", + "outputs": [ + { + "internalType": "contract AddressesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "customUniV3Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "defaultOutputToken", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllPairsStrategies", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "configStrategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configInputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configOutputTokens", + "type": "address[]" + } + ], + "name": "pairsStrategiesMatch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "redemptionStrategiesByName", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "redemptionStrategiesByTokens", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configInputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configOutputTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "configFees", + "type": "uint256[]" + } + ], + "name": "uniswapPairsFeesMatch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configInputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configOutputTokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "configRouters", + "type": "address[]" + } + ], + "name": "uniswapPairsRoutersMatch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "name": "uniswapV3Fees", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x6ee2862573c99adcdf5c189694b825a7f936bf1228f31673790c3f7ea1426396", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x45A4a3eBb986083597Ac3B34ee2d7dcC3Be8c5C1", + "transactionIndex": 1, + "gasUsed": "2101172", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800002000000000000000000000000000400000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000020000000100000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7d1bfdb5dcb5d8a2476c13bfb94fba8c1a1da69a31d2be9db61b146b25ea4312", + "transactionHash": "0x6ee2862573c99adcdf5c189694b825a7f936bf1228f31673790c3f7ea1426396", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097638, + "transactionHash": "0x6ee2862573c99adcdf5c189694b825a7f936bf1228f31673790c3f7ea1426396", + "address": "0x45A4a3eBb986083597Ac3B34ee2d7dcC3Be8c5C1", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x7d1bfdb5dcb5d8a2476c13bfb94fba8c1a1da69a31d2be9db61b146b25ea4312" + } + ], + "blockNumber": 2097638, + "cumulativeGasUsed": "2148085", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategyToRemove", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_removeRedemptionStrategy" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_resetRedemptionStrategies" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setDefaultOutputToken" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setRedemptionStrategies" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setRedemptionStrategy" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "slippages", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setSlippages" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + }, + { + "internalType": "uint24[]", + "name": "fees", + "type": "uint24[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setUniswapV3Fees" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setUniswapV3Routers" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ap", + "outputs": [ + { + "internalType": "contract AddressesProvider", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "customUniV3Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "defaultOutputToken", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllPairsStrategies", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "configStrategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configInputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configOutputTokens", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "pairsStrategiesMatch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByName", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByTokens", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configInputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configOutputTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "configFees", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapPairsFeesMatch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configInputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configOutputTokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "configRouters", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapPairsRoutersMatch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapV3Fees", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/liquidators/registry/LiquidatorsRegistrySecondExtension.sol": "LiquidatorsRegistrySecondExtension" + }, + "libraries": {} + }, + "sources": { + "contracts/ionic/AddressesProvider.sol": { + "keccak256": "0xf48e9e8b2150408c1c6b68dd957226c342ba47396da792fdaa0922f539a7e163", + "urls": [ + "bzz-raw://43c0a6c40861da4c19b67da9faee7df21572020e2d863611080a9181acc3ba3a", + "dweb:/ipfs/QmQpPDVAYTba8R9N1fGggzkG7JhUFVbAhxdfNw9xofVi4m" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/LiquidatorsRegistrySecondExtension.sol": { + "keccak256": "0x8473f080499ad93ee4fe23a08c8f2e23f0ad708daffa1deb5e9725e70c80dd09", + "urls": [ + "bzz-raw://fa1248bbc7a419e17c0ce5be2909e62721a3fb6bb5b33582ed91e0a3bc160d1a", + "dweb:/ipfs/QmXWLjsDtidFazsdZgoauGJ1r7eokSSMJhiUj5QpwjEh4q" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/registry/LiquidatorsRegistryStorage.sol": { + "keccak256": "0x95840e79c504ab6ee1d0cf9ff5fcec2424a64dc6ed57f0bf4831f65c89fc9109", + "urls": [ + "bzz-raw://29825087d3eeaca7516168043f1b046b280816195ed31f13cbdb7444ecb3b012", + "dweb:/ipfs/QmVa9kZx9gRvvUr8RbLRZKWseEMntoQ2CZmQ3TraSF9pa1" + ], + "license": "GPL-3.0" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040523480156200001157600080fd5b506200001d3362000023565b6200009d565b600180546001600160a01b03191690556200004a816200004d602090811b62001c9317901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61248980620000ad6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063d7341acf1161007c578063d7341acf1461035d578063dee7fe4814610370578063e187a7dd146103a4578063e30c3978146103b7578063eb29d9f8146103c8578063f2fde38b146103db57600080fd5b80638da5cb5b146102955780638db87c27146102a6578063a1bb91e3146102cf578063a700f9e4146102e2578063aeabb62114610316578063c8ff6fee1461032957600080fd5b8063514b49d911610115578063514b49d9146102375780635495a6d71461024a578063715018a61461025d57806372c9889c1461026557806379ba50971461027857806389f8132e1461028057600080fd5b80630d856eef1461015d5780632434cb7f1461017d5780633322d87714610192578063366eda2e146101b5578063398cd955146101c85780633c4f743c1461020c575b600080fd5b6101656103ee565b60405161017493929190611f82565b60405180910390f35b61019061018b366004612002565b6106da565b005b6101a56101a0366004612087565b610710565b6040519015158152602001610174565b6101906101c3366004612087565b610a0e565b6101f86101d6366004612002565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff9091168152602001610174565b60025461021f906001600160a01b031681565b6040516001600160a01b039091168152602001610174565b610190610245366004612121565b610ae7565b610190610258366004612087565b610da0565b610190610e96565b610190610273366004612087565b610ee6565b610190611001565b61028861107b565b604051610174919061213e565b6000546001600160a01b031661021f565b61021f6102b4366004612121565b6007602052600090815260409020546001600160a01b031681565b6101906102dd366004612087565b611408565b61021f6102f0366004612002565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6101a5610324366004612087565b61178a565b61021f610337366004612002565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b61019061036b36600461218c565b611886565b61021f61037e366004612246565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6101906103b2366004612087565b611a30565b6001546001600160a01b031661021f565b6101a56103d6366004612087565b611b49565b6101906103e9366004612121565b611c22565b606080606060006103ff6009611ce3565b90506000805b8251811015610481576000838281518110610422576104226122c6565b60200260200101519050600061045b60086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905080518461046a91906122f2565b9350505080806104799061230a565b915050610405565b508067ffffffffffffffff81111561049b5761049b6121d7565b6040519080825280602002602001820160405280156104c4578160200160208202803683370190505b5094508067ffffffffffffffff8111156104e0576104e06121d7565b604051908082528060200260200182016040528015610509578160200160208202803683370190505b5093508067ffffffffffffffff811115610525576105256121d7565b60405190808252806020026020018201604052801561054e578160200160208202803683370190505b5092506000905060005b82518110156106d2576000838281518110610575576105756122c6565b6020026020010151905060006105ae60086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b81518110156106bc5760008282815181106105d0576105d06122c6565b6020908102919091018101516001600160a01b038082166000908152600684526040808220898416835290945292909220548c51919350909116908b908890811061061d5761061d6122c6565b60200260200101906001600160a01b031690816001600160a01b03168152505080898781518110610650576106506122c6565b60200260200101906001600160a01b031690816001600160a01b03168152505083888781518110610683576106836122c6565b6001600160a01b0390921660209283029190910190910152856106a58161230a565b9650505080806106b49061230a565b9150506105b3565b50505080806106ca9061230a565b915050610558565b505050909192565b6106e2611cf7565b6001600160a01b03918216600090815260076020526040902080546001600160a01b03191691909216179055565b60008060008061071e6103ee565b92509250925060005b8981101561088f576000805b8551811015610868578c8c8481811061074e5761074e6122c6565b90506020020160208101906107639190612121565b6001600160a01b031686828151811061077e5761077e6122c6565b60200260200101516001600160a01b03161480156107ec57508a8a848181106107a9576107a96122c6565b90506020020160208101906107be9190612121565b6001600160a01b03168582815181106107d9576107d96122c6565b60200260200101516001600160a01b0316145b80156108485750888884818110610805576108056122c6565b905060200201602081019061081a9190612121565b6001600160a01b0316848281518110610835576108356122c6565b60200260200101516001600160a01b0316145b156108565760019150610868565b806108608161230a565b915050610733565b508061087c57600095505050505050610a04565b50806108878161230a565b915050610727565b5060005b83518110156109fb576000805b8b8110156109d4578c8c828181106108ba576108ba6122c6565b90506020020160208101906108cf9190612121565b6001600160a01b03168684815181106108ea576108ea6122c6565b60200260200101516001600160a01b031614801561095857508a8a82818110610915576109156122c6565b905060200201602081019061092a9190612121565b6001600160a01b0316858481518110610945576109456122c6565b60200260200101516001600160a01b0316145b80156109b45750888882818110610971576109716122c6565b90506020020160208101906109869190612121565b6001600160a01b03168484815181106109a1576109a16122c6565b60200260200101516001600160a01b0316145b156109c257600191506109d4565b806109cc8161230a565b9150506108a0565b50806109e857600095505050505050610a04565b50806109f38161230a565b915050610893565b50600193505050505b9695505050505050565b610a16611cf7565b8483148015610a2457508281145b610a495760405162461bcd60e51b8152600401610a4090612325565b60405180910390fd5b60005b85811015610ade57610acc878783818110610a6957610a696122c6565b9050602002016020810190610a7e9190612121565b868684818110610a9057610a906122c6565b9050602002016020810190610aa59190612121565b858585818110610ab757610ab76122c6565b905060200201602081019061036b9190612121565b80610ad68161230a565b915050610a4c565b50505050505050565b610aef611cf7565b6000610afb6009611ce3565b905060005b8151811015610ce9576000828281518110610b1d57610b1d6122c6565b602002602001015190506000610b5660086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b8151811015610ca1576000828281518110610b7857610b786122c6565b6020908102919091018101516001600160a01b038082166000908152600684526040808220898416835290945292909220549092508116908816811415610c8c576001600160a01b03808316600090815260066020908152604080832093891683529290522080546001600160a01b03191690558351610c3f90859085908110610c0457610c046122c6565b602002602001015160086000886001600160a01b03166001600160a01b03168152602001908152602001600020611d5390919063ffffffff16565b506001600160a01b0382811660009081526007602052604090205481169086161415610c8c576001600160a01b038216600090815260076020526040902080546001600160a01b03191690555b50508080610c999061230a565b915050610b5b565b506001600160a01b0382166000908152600860205260409020610cc390611d68565b610cd457610cd2600983611d53565b505b50508080610ce19061230a565b915050610b00565b5060006005836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d54919081019061237a565b604051610d6191906123f1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055610d9b600383611d53565b505050565b610da8611cf7565b8085148015610db657508483145b610dd25760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110610def57610def6122c6565b90506020020135600b6000898985818110610e0c57610e0c6122c6565b9050602002016020810190610e219190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110610e5557610e556122c6565b9050602002016020810190610e6a9190612121565b6001600160a01b0316815260208101919091526040016000205580610e8e8161230a565b915050610dd5565b610e9e611cf7565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f77656400006044820152606401610a40565b610eee611cf7565b8085148015610efc57508483145b610f185760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110610f3557610f356122c6565b9050602002016020810190610f4a9190612121565b600e6000898985818110610f6057610f606122c6565b9050602002016020810190610f759190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110610fa957610fa96122c6565b9050602002016020810190610fbe9190612121565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b0319169290911691909117905580610ff98161230a565b915050610f1b565b60015433906001600160a01b0316811461106f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a40565b61107881611d72565b50565b60408051600c8082526101a0820190925260609190600090826020820161018080368337019050509050630d856eef60e01b816110b78461240d565b93508360ff16815181106110cd576110cd6122c6565b6001600160e01b031990921660209283029190910190910152633322d87760e01b816110f88461240d565b93508360ff168151811061110e5761110e6122c6565b6001600160e01b031990921660209283029190910190910152631d653b3f60e31b816111398461240d565b93508360ff168151811061114f5761114f6122c6565b6001600160e01b03199092166020928302919091019091015263aeabb62160e01b8161117a8461240d565b93508360ff1681518110611190576111906122c6565b6001600160e01b031990921660209283029190910190910152635495a6d760e01b816111bb8461240d565b93508360ff16815181106111d1576111d16122c6565b6001600160e01b03199092166020928302919091019091015263e187a7dd60e01b816111fc8461240d565b93508360ff1681518110611212576112126122c6565b6001600160e01b031990921660209283029190910190910152631cb2622760e21b8161123d8461240d565b93508360ff1681518110611253576112536122c6565b6001600160e01b031990921660209283029190910190910152632434cb7f60e01b8161127e8461240d565b93508360ff1681518110611294576112946122c6565b6001600160e01b03199092166020928302919091019091015263d7341acf60e01b816112bf8461240d565b93508360ff16815181106112d5576112d56122c6565b6001600160e01b031990921660209283029190910190910152631b376d1760e11b816113008461240d565b93508360ff1681518110611316576113166122c6565b6001600160e01b03199092166020928302919091019091015263514b49d960e01b816113418461240d565b93508360ff1681518110611357576113576122c6565b6001600160e01b03199092166020928302919091019091015263a1bb91e360e01b816113828461240d565b93508360ff1681518110611398576113986122c6565b6001600160e01b03199092166020928302919091019091015260ff8216156114025760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610a40565b92915050565b611410611cf7565b848314801561141e57508281145b61143a5760405162461bcd60e51b8152600401610a4090612325565b60006114466009611ce3565b905060005b81518110156115d4576000828281518110611468576114686122c6565b6020026020010151905060006114a160086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b81518110156115905760008282815181106114c3576114c36122c6565b6020908102919091018101516001600160a01b03808216600090815260068452604080822092891682529190935290912080546001600160a01b031916905583519091506115589084908490811061151d5761151d6122c6565b602002602001015160086000876001600160a01b03166001600160a01b03168152602001908152602001600020611d5390919063ffffffff16565b506001600160a01b0316600090815260076020526040902080546001600160a01b0319169055806115888161230a565b9150506114a6565b506115be8484815181106115a6576115a66122c6565b60200260200101516009611d5390919063ffffffff16565b50505080806115cc9061230a565b91505061144b565b5060006115e16003611ce3565b905060005b81518110156116fe576000828281518110611603576116036122c6565b602002602001015190506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611675919081019061237a565b9050600060058260405161168991906123f1565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506116e88484815181106116d0576116d06122c6565b60200260200101516003611d5390919063ffffffff16565b50505080806116f69061230a565b9150506115e6565b5060005b8781101561177f5761176d89898381811061171f5761171f6122c6565b90506020020160208101906117349190612121565b888884818110611746576117466122c6565b905060200201602081019061175b9190612121565b878785818110610ab757610ab76122c6565b806117778161230a565b915050611702565b505050505050505050565b6000805b82811015611878578383828181106117a8576117a86122c6565b90506020020160208101906117bd9190612121565b6001600160a01b0316600e60008a8a858181106117dc576117dc6122c6565b90506020020160208101906117f19190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110611825576118256122c6565b905060200201602081019061183a9190612121565b6001600160a01b0390811682526020820192909252604001600020541614611866576000915050610a04565b806118708161230a565b91505061178e565b506001979650505050505050565b61188e611cf7565b6000836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156118ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f6919081019061237a565b9050600060058260405161190a91906123f1565b9081526040805160209281900383018120546001600160a01b0388811660009081526006865284812089831682529095529290932080546001600160a01b0319168984161790559116915085906005906119659085906123f1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905561199f600382611d53565b506119ab600386611d8b565b506001600160a01b03848116600090815260076020526040902054166119fa576001600160a01b03848116600090815260076020526040902080546001600160a01b0319169185169190911790555b6001600160a01b0383166000908152600860205260409020611a1c9085611d8b565b50611a28600984611d8b565b505050505050565b611a38611cf7565b8085148015611a4657508483145b611a625760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110611a7f57611a7f6122c6565b9050602002016020810190611a94919061242a565b600d6000898985818110611aaa57611aaa6122c6565b9050602002016020810190611abf9190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110611af357611af36122c6565b9050602002016020810190611b089190612121565b6001600160a01b031681526020810191909152604001600020805462ffffff191662ffffff9290921691909117905580611b418161230a565b915050611a65565b6000805b8281101561187857838382818110611b6757611b676122c6565b90506020020135600d60008a8a85818110611b8457611b846122c6565b9050602002016020810190611b999190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110611bcd57611bcd6122c6565b9050602002016020810190611be29190612121565b6001600160a01b0316815260208101919091526040016000205462ffffff1614611c10576000915050610a04565b80611c1a8161230a565b915050611b4d565b611c2a611cf7565b600180546001600160a01b0383166001600160a01b03199091168117909155611c5b6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60606000611cf083611da0565b9392505050565b6000546001600160a01b03163314611d515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a40565b565b6000611cf0836001600160a01b038416611dfc565b6000611402825490565b600180546001600160a01b031916905561107881611c93565b6000611cf0836001600160a01b038416611eef565b606081600001805480602002602001604051908101604052809291908181526020018280548015611df057602002820191906000526020600020905b815481526020019060010190808311611ddc575b50505050509050919050565b60008181526001830160205260408120548015611ee5576000611e2060018361244f565b8554909150600090611e349060019061244f565b9050818114611e99576000866000018281548110611e5457611e546122c6565b9060005260206000200154905080876000018481548110611e7757611e776122c6565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611eaa57611eaa612466565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611402565b6000915050611402565b6000818152600183016020526040812054611f3657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611402565b506000611402565b600081518084526020808501945080840160005b83811015611f775781516001600160a01b031687529582019590820190600101611f52565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b82811015611fc45781516001600160a01b031684529284019290840190600101611f9f565b50505083810382850152611fd88187611f3e565b9150508281036040840152610a048185611f3e565b6001600160a01b038116811461107857600080fd5b6000806040838503121561201557600080fd5b823561202081611fed565b9150602083013561203081611fed565b809150509250929050565b60008083601f84011261204d57600080fd5b50813567ffffffffffffffff81111561206557600080fd5b6020830191508360208260051b850101111561208057600080fd5b9250929050565b600080600080600080606087890312156120a057600080fd5b863567ffffffffffffffff808211156120b857600080fd5b6120c48a838b0161203b565b909850965060208901359150808211156120dd57600080fd5b6120e98a838b0161203b565b9096509450604089013591508082111561210257600080fd5b5061210f89828a0161203b565b979a9699509497509295939492505050565b60006020828403121561213357600080fd5b8135611cf081611fed565b6020808252825182820181905260009190848201906040850190845b818110156121805783516001600160e01b0319168352928401929184019160010161215a565b50909695505050505050565b6000806000606084860312156121a157600080fd5b83356121ac81611fed565b925060208401356121bc81611fed565b915060408401356121cc81611fed565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612216576122166121d7565b604052919050565b600067ffffffffffffffff821115612238576122386121d7565b50601f01601f191660200190565b60006020828403121561225857600080fd5b813567ffffffffffffffff81111561226f57600080fd5b8201601f8101841361228057600080fd5b803561229361228e8261221e565b6121ed565b8181528560208385010111156122a857600080fd5b81602084016020830137600091810160200191909152949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612305576123056122dc565b500190565b600060001982141561231e5761231e6122dc565b5060010190565b6020808252600b908201526a10b0b93930bcb9903632b760a91b604082015260600190565b60005b8381101561236557818101518382015260200161234d565b83811115612374576000848401525b50505050565b60006020828403121561238c57600080fd5b815167ffffffffffffffff8111156123a357600080fd5b8201601f810184136123b457600080fd5b80516123c261228e8261221e565b8181528560208385010111156123d757600080fd5b6123e882602083016020860161234a565b95945050505050565b6000825161240381846020870161234a565b9190910192915050565b600060ff821680612420576124206122dc565b6000190192915050565b60006020828403121561243c57600080fd5b813562ffffff81168114611cf057600080fd5b600082821015612461576124616122dc565b500390565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080a000a", + "sourceMap": "187:10940:231:-:0;;;;;;;;;;;;-1:-1:-1;936:32:452;719:10:466;936:18:452;:32::i;:::-;187:10940:231;;1496:153:453;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;187:10940:231:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063d7341acf1161007c578063d7341acf1461035d578063dee7fe4814610370578063e187a7dd146103a4578063e30c3978146103b7578063eb29d9f8146103c8578063f2fde38b146103db57600080fd5b80638da5cb5b146102955780638db87c27146102a6578063a1bb91e3146102cf578063a700f9e4146102e2578063aeabb62114610316578063c8ff6fee1461032957600080fd5b8063514b49d911610115578063514b49d9146102375780635495a6d71461024a578063715018a61461025d57806372c9889c1461026557806379ba50971461027857806389f8132e1461028057600080fd5b80630d856eef1461015d5780632434cb7f1461017d5780633322d87714610192578063366eda2e146101b5578063398cd955146101c85780633c4f743c1461020c575b600080fd5b6101656103ee565b60405161017493929190611f82565b60405180910390f35b61019061018b366004612002565b6106da565b005b6101a56101a0366004612087565b610710565b6040519015158152602001610174565b6101906101c3366004612087565b610a0e565b6101f86101d6366004612002565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff9091168152602001610174565b60025461021f906001600160a01b031681565b6040516001600160a01b039091168152602001610174565b610190610245366004612121565b610ae7565b610190610258366004612087565b610da0565b610190610e96565b610190610273366004612087565b610ee6565b610190611001565b61028861107b565b604051610174919061213e565b6000546001600160a01b031661021f565b61021f6102b4366004612121565b6007602052600090815260409020546001600160a01b031681565b6101906102dd366004612087565b611408565b61021f6102f0366004612002565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6101a5610324366004612087565b61178a565b61021f610337366004612002565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b61019061036b36600461218c565b611886565b61021f61037e366004612246565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6101906103b2366004612087565b611a30565b6001546001600160a01b031661021f565b6101a56103d6366004612087565b611b49565b6101906103e9366004612121565b611c22565b606080606060006103ff6009611ce3565b90506000805b8251811015610481576000838281518110610422576104226122c6565b60200260200101519050600061045b60086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905080518461046a91906122f2565b9350505080806104799061230a565b915050610405565b508067ffffffffffffffff81111561049b5761049b6121d7565b6040519080825280602002602001820160405280156104c4578160200160208202803683370190505b5094508067ffffffffffffffff8111156104e0576104e06121d7565b604051908082528060200260200182016040528015610509578160200160208202803683370190505b5093508067ffffffffffffffff811115610525576105256121d7565b60405190808252806020026020018201604052801561054e578160200160208202803683370190505b5092506000905060005b82518110156106d2576000838281518110610575576105756122c6565b6020026020010151905060006105ae60086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b81518110156106bc5760008282815181106105d0576105d06122c6565b6020908102919091018101516001600160a01b038082166000908152600684526040808220898416835290945292909220548c51919350909116908b908890811061061d5761061d6122c6565b60200260200101906001600160a01b031690816001600160a01b03168152505080898781518110610650576106506122c6565b60200260200101906001600160a01b031690816001600160a01b03168152505083888781518110610683576106836122c6565b6001600160a01b0390921660209283029190910190910152856106a58161230a565b9650505080806106b49061230a565b9150506105b3565b50505080806106ca9061230a565b915050610558565b505050909192565b6106e2611cf7565b6001600160a01b03918216600090815260076020526040902080546001600160a01b03191691909216179055565b60008060008061071e6103ee565b92509250925060005b8981101561088f576000805b8551811015610868578c8c8481811061074e5761074e6122c6565b90506020020160208101906107639190612121565b6001600160a01b031686828151811061077e5761077e6122c6565b60200260200101516001600160a01b03161480156107ec57508a8a848181106107a9576107a96122c6565b90506020020160208101906107be9190612121565b6001600160a01b03168582815181106107d9576107d96122c6565b60200260200101516001600160a01b0316145b80156108485750888884818110610805576108056122c6565b905060200201602081019061081a9190612121565b6001600160a01b0316848281518110610835576108356122c6565b60200260200101516001600160a01b0316145b156108565760019150610868565b806108608161230a565b915050610733565b508061087c57600095505050505050610a04565b50806108878161230a565b915050610727565b5060005b83518110156109fb576000805b8b8110156109d4578c8c828181106108ba576108ba6122c6565b90506020020160208101906108cf9190612121565b6001600160a01b03168684815181106108ea576108ea6122c6565b60200260200101516001600160a01b031614801561095857508a8a82818110610915576109156122c6565b905060200201602081019061092a9190612121565b6001600160a01b0316858481518110610945576109456122c6565b60200260200101516001600160a01b0316145b80156109b45750888882818110610971576109716122c6565b90506020020160208101906109869190612121565b6001600160a01b03168484815181106109a1576109a16122c6565b60200260200101516001600160a01b0316145b156109c257600191506109d4565b806109cc8161230a565b9150506108a0565b50806109e857600095505050505050610a04565b50806109f38161230a565b915050610893565b50600193505050505b9695505050505050565b610a16611cf7565b8483148015610a2457508281145b610a495760405162461bcd60e51b8152600401610a4090612325565b60405180910390fd5b60005b85811015610ade57610acc878783818110610a6957610a696122c6565b9050602002016020810190610a7e9190612121565b868684818110610a9057610a906122c6565b9050602002016020810190610aa59190612121565b858585818110610ab757610ab76122c6565b905060200201602081019061036b9190612121565b80610ad68161230a565b915050610a4c565b50505050505050565b610aef611cf7565b6000610afb6009611ce3565b905060005b8151811015610ce9576000828281518110610b1d57610b1d6122c6565b602002602001015190506000610b5660086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b8151811015610ca1576000828281518110610b7857610b786122c6565b6020908102919091018101516001600160a01b038082166000908152600684526040808220898416835290945292909220549092508116908816811415610c8c576001600160a01b03808316600090815260066020908152604080832093891683529290522080546001600160a01b03191690558351610c3f90859085908110610c0457610c046122c6565b602002602001015160086000886001600160a01b03166001600160a01b03168152602001908152602001600020611d5390919063ffffffff16565b506001600160a01b0382811660009081526007602052604090205481169086161415610c8c576001600160a01b038216600090815260076020526040902080546001600160a01b03191690555b50508080610c999061230a565b915050610b5b565b506001600160a01b0382166000908152600860205260409020610cc390611d68565b610cd457610cd2600983611d53565b505b50508080610ce19061230a565b915050610b00565b5060006005836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d54919081019061237a565b604051610d6191906123f1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055610d9b600383611d53565b505050565b610da8611cf7565b8085148015610db657508483145b610dd25760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110610def57610def6122c6565b90506020020135600b6000898985818110610e0c57610e0c6122c6565b9050602002016020810190610e219190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110610e5557610e556122c6565b9050602002016020810190610e6a9190612121565b6001600160a01b0316815260208101919091526040016000205580610e8e8161230a565b915050610dd5565b610e9e611cf7565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f77656400006044820152606401610a40565b610eee611cf7565b8085148015610efc57508483145b610f185760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110610f3557610f356122c6565b9050602002016020810190610f4a9190612121565b600e6000898985818110610f6057610f606122c6565b9050602002016020810190610f759190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110610fa957610fa96122c6565b9050602002016020810190610fbe9190612121565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b0319169290911691909117905580610ff98161230a565b915050610f1b565b60015433906001600160a01b0316811461106f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a40565b61107881611d72565b50565b60408051600c8082526101a0820190925260609190600090826020820161018080368337019050509050630d856eef60e01b816110b78461240d565b93508360ff16815181106110cd576110cd6122c6565b6001600160e01b031990921660209283029190910190910152633322d87760e01b816110f88461240d565b93508360ff168151811061110e5761110e6122c6565b6001600160e01b031990921660209283029190910190910152631d653b3f60e31b816111398461240d565b93508360ff168151811061114f5761114f6122c6565b6001600160e01b03199092166020928302919091019091015263aeabb62160e01b8161117a8461240d565b93508360ff1681518110611190576111906122c6565b6001600160e01b031990921660209283029190910190910152635495a6d760e01b816111bb8461240d565b93508360ff16815181106111d1576111d16122c6565b6001600160e01b03199092166020928302919091019091015263e187a7dd60e01b816111fc8461240d565b93508360ff1681518110611212576112126122c6565b6001600160e01b031990921660209283029190910190910152631cb2622760e21b8161123d8461240d565b93508360ff1681518110611253576112536122c6565b6001600160e01b031990921660209283029190910190910152632434cb7f60e01b8161127e8461240d565b93508360ff1681518110611294576112946122c6565b6001600160e01b03199092166020928302919091019091015263d7341acf60e01b816112bf8461240d565b93508360ff16815181106112d5576112d56122c6565b6001600160e01b031990921660209283029190910190910152631b376d1760e11b816113008461240d565b93508360ff1681518110611316576113166122c6565b6001600160e01b03199092166020928302919091019091015263514b49d960e01b816113418461240d565b93508360ff1681518110611357576113576122c6565b6001600160e01b03199092166020928302919091019091015263a1bb91e360e01b816113828461240d565b93508360ff1681518110611398576113986122c6565b6001600160e01b03199092166020928302919091019091015260ff8216156114025760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610a40565b92915050565b611410611cf7565b848314801561141e57508281145b61143a5760405162461bcd60e51b8152600401610a4090612325565b60006114466009611ce3565b905060005b81518110156115d4576000828281518110611468576114686122c6565b6020026020010151905060006114a160086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b81518110156115905760008282815181106114c3576114c36122c6565b6020908102919091018101516001600160a01b03808216600090815260068452604080822092891682529190935290912080546001600160a01b031916905583519091506115589084908490811061151d5761151d6122c6565b602002602001015160086000876001600160a01b03166001600160a01b03168152602001908152602001600020611d5390919063ffffffff16565b506001600160a01b0316600090815260076020526040902080546001600160a01b0319169055806115888161230a565b9150506114a6565b506115be8484815181106115a6576115a66122c6565b60200260200101516009611d5390919063ffffffff16565b50505080806115cc9061230a565b91505061144b565b5060006115e16003611ce3565b905060005b81518110156116fe576000828281518110611603576116036122c6565b602002602001015190506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611675919081019061237a565b9050600060058260405161168991906123f1565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506116e88484815181106116d0576116d06122c6565b60200260200101516003611d5390919063ffffffff16565b50505080806116f69061230a565b9150506115e6565b5060005b8781101561177f5761176d89898381811061171f5761171f6122c6565b90506020020160208101906117349190612121565b888884818110611746576117466122c6565b905060200201602081019061175b9190612121565b878785818110610ab757610ab76122c6565b806117778161230a565b915050611702565b505050505050505050565b6000805b82811015611878578383828181106117a8576117a86122c6565b90506020020160208101906117bd9190612121565b6001600160a01b0316600e60008a8a858181106117dc576117dc6122c6565b90506020020160208101906117f19190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110611825576118256122c6565b905060200201602081019061183a9190612121565b6001600160a01b0390811682526020820192909252604001600020541614611866576000915050610a04565b806118708161230a565b91505061178e565b506001979650505050505050565b61188e611cf7565b6000836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156118ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f6919081019061237a565b9050600060058260405161190a91906123f1565b9081526040805160209281900383018120546001600160a01b0388811660009081526006865284812089831682529095529290932080546001600160a01b0319168984161790559116915085906005906119659085906123f1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905561199f600382611d53565b506119ab600386611d8b565b506001600160a01b03848116600090815260076020526040902054166119fa576001600160a01b03848116600090815260076020526040902080546001600160a01b0319169185169190911790555b6001600160a01b0383166000908152600860205260409020611a1c9085611d8b565b50611a28600984611d8b565b505050505050565b611a38611cf7565b8085148015611a4657508483145b611a625760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110611a7f57611a7f6122c6565b9050602002016020810190611a94919061242a565b600d6000898985818110611aaa57611aaa6122c6565b9050602002016020810190611abf9190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110611af357611af36122c6565b9050602002016020810190611b089190612121565b6001600160a01b031681526020810191909152604001600020805462ffffff191662ffffff9290921691909117905580611b418161230a565b915050611a65565b6000805b8281101561187857838382818110611b6757611b676122c6565b90506020020135600d60008a8a85818110611b8457611b846122c6565b9050602002016020810190611b999190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110611bcd57611bcd6122c6565b9050602002016020810190611be29190612121565b6001600160a01b0316815260208101919091526040016000205462ffffff1614611c10576000915050610a04565b80611c1a8161230a565b915050611b4d565b611c2a611cf7565b600180546001600160a01b0383166001600160a01b03199091168117909155611c5b6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60606000611cf083611da0565b9392505050565b6000546001600160a01b03163314611d515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a40565b565b6000611cf0836001600160a01b038416611dfc565b6000611402825490565b600180546001600160a01b031916905561107881611c93565b6000611cf0836001600160a01b038416611eef565b606081600001805480602002602001604051908101604052809291908181526020018280548015611df057602002820191906000526020600020905b815481526020019060010190808311611ddc575b50505050509050919050565b60008181526001830160205260408120548015611ee5576000611e2060018361244f565b8554909150600090611e349060019061244f565b9050818114611e99576000866000018281548110611e5457611e546122c6565b9060005260206000200154905080876000018481548110611e7757611e776122c6565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611eaa57611eaa612466565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611402565b6000915050611402565b6000818152600183016020526040812054611f3657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611402565b506000611402565b600081518084526020808501945080840160005b83811015611f775781516001600160a01b031687529582019590820190600101611f52565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b82811015611fc45781516001600160a01b031684529284019290840190600101611f9f565b50505083810382850152611fd88187611f3e565b9150508281036040840152610a048185611f3e565b6001600160a01b038116811461107857600080fd5b6000806040838503121561201557600080fd5b823561202081611fed565b9150602083013561203081611fed565b809150509250929050565b60008083601f84011261204d57600080fd5b50813567ffffffffffffffff81111561206557600080fd5b6020830191508360208260051b850101111561208057600080fd5b9250929050565b600080600080600080606087890312156120a057600080fd5b863567ffffffffffffffff808211156120b857600080fd5b6120c48a838b0161203b565b909850965060208901359150808211156120dd57600080fd5b6120e98a838b0161203b565b9096509450604089013591508082111561210257600080fd5b5061210f89828a0161203b565b979a9699509497509295939492505050565b60006020828403121561213357600080fd5b8135611cf081611fed565b6020808252825182820181905260009190848201906040850190845b818110156121805783516001600160e01b0319168352928401929184019160010161215a565b50909695505050505050565b6000806000606084860312156121a157600080fd5b83356121ac81611fed565b925060208401356121bc81611fed565b915060408401356121cc81611fed565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612216576122166121d7565b604052919050565b600067ffffffffffffffff821115612238576122386121d7565b50601f01601f191660200190565b60006020828403121561225857600080fd5b813567ffffffffffffffff81111561226f57600080fd5b8201601f8101841361228057600080fd5b803561229361228e8261221e565b6121ed565b8181528560208385010111156122a857600080fd5b81602084016020830137600091810160200191909152949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612305576123056122dc565b500190565b600060001982141561231e5761231e6122dc565b5060010190565b6020808252600b908201526a10b0b93930bcb9903632b760a91b604082015260600190565b60005b8381101561236557818101518382015260200161234d565b83811115612374576000848401525b50505050565b60006020828403121561238c57600080fd5b815167ffffffffffffffff8111156123a357600080fd5b8201601f810184136123b457600080fd5b80516123c261228e8261221e565b8181528560208385010111156123d757600080fd5b6123e882602083016020860161234a565b95945050505050565b6000825161240381846020870161234a565b9190910192915050565b600060ff821680612420576124206122dc565b6000190192915050565b60006020828403121561243c57600080fd5b813562ffffff81168114611cf057600080fd5b600082821015612461576124616122dc565b500390565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080a000a", + "sourceMap": "187:10940:231:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9734:1391;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;2792:167;;;;;;:::i;:::-;;:::i;:::-;;8274:1456;;;;;;:::i;:::-;;:::i;:::-;;;4105:14:486;;4098:22;4080:41;;4068:2;4053:18;8274:1456:231;3940:187:486;3716:454:231;;;;;;:::i;:::-;;:::i;1164:87:232:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4306:8:486;4294:21;;;4276:40;;4264:2;4249:18;1164:87:232;4132:190:486;450:27:232;;;;;-1:-1:-1;;;;;450:27:232;;;;;;-1:-1:-1;;;;;4518:32:486;;;4500:51;;4488:2;4473:18;450:27:232;4327:230:486;5925:1462:231;;;;;;:::i;:::-;;:::i;1529:425::-;;;;;;:::i;:::-;;:::i;174:106:133:-;;;:::i;2365:423:231:-;;;;;;:::i;:::-;;:::i;1729:206:453:-;;;:::i;379:1146:231:-;;;:::i;:::-;;;;;;;:::i;1201:85:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;1201:85;;735:73:232;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;735:73:232;;;4174:1747:231;;;;;;:::i;:::-;;:::i;616:115:232:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;616:115:232;;;7823:447:231;;;;;;:::i;:::-;;:::i;1255:92:232:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1255:92:232;;;2963:749:231;;;;;;:::i;:::-;;:::i;540:72:232:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:72:232;;;1958:403:231;;;;;;:::i;:::-;;:::i;842:99:453:-;921:13;;-1:-1:-1;;;;;921:13:453;842:99;;7391:428:231;;;;;;:::i;:::-;;:::i;1134:178:453:-;;;;;;:::i;:::-;;:::i;9734:1391:231:-;9807:39;9854:38;9900:39;9954:30;9987:24;:15;:22;:24::i;:::-;9954:57;;10017:20;10061:9;10056:272;10080:13;:20;10076:1;:24;10056:272;;;10117:30;10168:13;10182:1;10168:16;;;;;;;;:::i;:::-;;;;;;;10117:68;;10195:29;10227:47;:24;:38;10252:12;-1:-1:-1;;;;;10227:38:231;-1:-1:-1;;;;;10227:38:231;;;;;;;;;;;;:45;:47::i;:::-;10195:79;;10300:12;:19;10284:35;;;;;:::i;:::-;;;10107:221;;10102:3;;;;;:::i;:::-;;;;10056:272;;;;10375:12;10349:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10349:39:231;;10336:52;;10434:12;10410:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10410:37:231;;10396:51;;10494:12;10470:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10470:37:231;;10455:52;;10535:1;10520:16;;10547:9;10542:579;10566:13;:20;10562:1;:24;10542:579;;;10601:30;10652:13;10666:1;10652:16;;;;;;;;:::i;:::-;;;;;;;10601:68;;10677:29;10709:47;:24;:38;10734:12;-1:-1:-1;;;;;10709:38:231;-1:-1:-1;;;;;10709:38:231;;;;;;;;;;;;:45;:47::i;:::-;10677:79;;10769:9;10764:351;10788:12;:19;10784:1;:23;10764:351;;;10824:29;10874:12;10887:1;10874:15;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;10927:41:231;;;;;;;:28;:41;;;;;;:55;;;;;;;;;;;;;10900:24;;10874:15;;-1:-1:-1;10927:55:231;;;;10900:10;;10911:12;;10900:24;;;;;;:::i;:::-;;;;;;:82;-1:-1:-1;;;;;10900:82:231;;;-1:-1:-1;;;;;10900:82:231;;;;;11020:11;10992;11004:12;10992:25;;;;;;;;:::i;:::-;;;;;;:39;-1:-1:-1;;;;;10992:39:231;;;-1:-1:-1;;;;;10992:39:231;;;;;11070:12;11041;11054;11041:26;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11041:41:231;;;:26;;;;;;;;;;;:41;11092:14;;;;:::i;:::-;;;;10814:301;10809:3;;;;;:::i;:::-;;;;10764:351;;;;10593:528;;10588:3;;;;;:::i;:::-;;;;10542:579;;;;9948:1177;;9734:1391;;;:::o;2792:167::-;1094:13:452;:11;:13::i;:::-;-1:-1:-1;;;;;2910:30:231;;::::1;;::::0;;;:18:::1;:30;::::0;;;;:44;;-1:-1:-1;;;;;;2910:44:231::1;::::0;;;::::1;;::::0;;2792:167::o;8274:1456::-;8489:4;8509:46;8563:45;8616:46;8671:23;:21;:23::i;:::-;8501:193;;;;;;8750:9;8745:455;8765:27;;;8745:455;;;8807:15;8843:9;8838:319;8862:17;:24;8858:1;:28;8838:319;;;8942:16;;8959:1;8942:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8918:43:231;:17;8936:1;8918:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8918:43:231;;:102;;;;;9000:17;;9018:1;9000:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8975:45:231;:18;8994:1;8975:21;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8975:45:231;;8918:102;:163;;;;;9060:18;;9079:1;9060:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9034:47:231;:19;9054:1;9034:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9034:47:231;;8918:163;8903:246;;;9117:4;9104:17;;9133:5;;8903:246;8888:3;;;;:::i;:::-;;;;8838:319;;;;9169:10;9164:29;;9188:5;9181:12;;;;;;;;;9164:29;-1:-1:-1;8794:3:231;;;;:::i;:::-;;;;8745:455;;;;9258:9;9253:455;9277:17;:24;9273:1;:28;9253:455;;;9316:15;9352:9;9347:318;9367:27;;;9347:318;;;9450:16;;9467:1;9450:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9426:43:231;:17;9444:1;9426:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9426:43:231;;:102;;;;;9508:17;;9526:1;9508:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9483:45:231;:18;9502:1;9483:21;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9483:45:231;;9426:102;:163;;;;;9568:18;;9587:1;9568:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9542:47:231;:19;9562:1;9542:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9542:47:231;;9426:163;9411:246;;;9625:4;9612:17;;9641:5;;9411:246;9396:3;;;;:::i;:::-;;;;9347:318;;;;9677:10;9672:29;;9696:5;9689:12;;;;;;;;;9672:29;-1:-1:-1;9303:3:231;;;;:::i;:::-;;;;9253:455;;;;9721:4;9714:11;;;;;8274:1456;;;;;;;;;:::o;3716:454::-;1094:13:452;:11;:13::i;:::-;3927:39:231;;::::1;:84:::0;::::1;;;-1:-1:-1::0;3970:41:231;;::::1;3927:84;3919:108;;;;-1:-1:-1::0;;;3919:108:231::1;;;;;;;:::i;:::-;;;;;;;;;4038:9;4033:133;4053:21:::0;;::::1;4033:133;;;4089:70;4112:10;;4123:1;4112:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4127:11;;4139:1;4127:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4143:12;;4156:1;4143:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;4089:70::-;4076:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4033:133;;;;3716:454:::0;;;;;;:::o;5925:1462::-;1094:13:452;:11;:13::i;:::-;6101:30:231::1;6134:24;:15;:22;:24::i;:::-;6101:57;;6169:9;6164:1067;6188:13;:20;6184:1;:24;6164:1067;;;6223:30;6274:13;6288:1;6274:16;;;;;;;;:::i;:::-;;;;;;;6223:68;;6299:29;6331:47;:24;:38;6356:12;-1:-1:-1::0;;;;;6331:38:231::1;-1:-1:-1::0;;;;;6331:38:231::1;;;;;;;;;;;;:45;:47::i;:::-;6299:79;;6391:9;6386:710;6410:12;:19;6406:1;:23;6386:710;;;6446:29;6496:12;6509:1;6496:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;6561:41:231;;::::1;6522:36;6561:41:::0;;;:28:::1;:41:::0;;;;;;:55;;::::1;::::0;;;;;;;;;;6496:15;;-1:-1:-1;6561:55:231;::::1;::::0;6710:36;::::1;::::0;::::1;6706:382;;;-1:-1:-1::0;;;;;6760:41:231;;::::1;6846:1;6760:41:::0;;;:28:::1;:41;::::0;;;;;;;:55;;::::1;::::0;;;;;;:89;;-1:-1:-1;;;;;;6760:89:231::1;::::0;;6907:15;;6861:62:::1;::::0;6907:12;;6920:1;;6907:15;::::1;;;;;:::i;:::-;;;;;;;6861:24;:38;6886:12;-1:-1:-1::0;;;;;6861:38:231::1;-1:-1:-1::0;;;;;6861:38:231::1;;;;;;;;;;;;:45;;:62;;;;:::i;:::-;-1:-1:-1::0;;;;;;6939:31:231;;::::1;;::::0;;;:18:::1;:31;::::0;;;;;;::::1;:47:::0;;::::1;;6935:143;;;-1:-1:-1::0;;;;;7002:31:231;::::1;7062:1;7002:31:::0;;;:18:::1;:31;::::0;;;;:63;;-1:-1:-1;;;;;;7002:63:231::1;::::0;;6935:143:::1;6436:660;;6431:3;;;;;:::i;:::-;;;;6386:710;;;-1:-1:-1::0;;;;;;7107:38:231;::::1;;::::0;;;:24:::1;:38;::::0;;;;:47:::1;::::0;:45:::1;:47::i;:::-;7103:122;;7171:45;:15;7202:12:::0;7171:22:::1;:45::i;:::-;;7103:122;6215:1016;;6210:3;;;;;:::i;:::-;;;;6164:1067;;;;7319:1;7237:26;7264:16;-1:-1:-1::0;;;;;7264:21:231::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;7264:23:231::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;7237:51;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:85;;-1:-1:-1;;;;;7237:85:231;;;::::1;-1:-1:-1::0;;;;;;7237:85:231;;::::1;::::0;;;::::1;::::0;;7328:54:::1;:20;7364:16:::0;7328:27:::1;:54::i;:::-;;6017:1370;5925:1462:::0;:::o;1529:425::-;1094:13:452;:11;:13::i;:::-;1716:38:231;;::::1;:83:::0;::::1;;;-1:-1:-1::0;1758:41:231;;::::1;1716:83;1708:107;;;;-1:-1:-1::0;;;1708:107:231::1;;;;;;;:::i;:::-;1827:9;1822:128;1842:20:::0;;::::1;1822:128;;;1931:9;;1941:1;1931:12;;;;;;;:::i;:::-;;;;;;;1877:18;:34;1896:11;;1908:1;1896:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1877:34:231::1;-1:-1:-1::0;;;;;1877:34:231::1;;;;;;;;;;;;:51;1912:12;;1925:1;1912:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1877:51:231::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;1877:51:231;:66;1864:3;::::1;::::0;::::1;:::i;:::-;;;;1822:128;;174:106:133::0;1094:13:452;:11;:13::i;:::-;235:40:133::1;::::0;-1:-1:-1;;;235:40:133;;14632:2:486;235:40:133::1;::::0;::::1;14614:21:486::0;14671:2;14651:18;;;14644:30;14710:32;14690:18;;;14683:60;14760:18;;235:40:133::1;14430:354:486::0;2365:423:231;1094:13:452;:11;:13::i;:::-;2557:36:231;;::::1;:81:::0;::::1;;;-1:-1:-1::0;2597:41:231;;::::1;2557:81;2549:105;;;;-1:-1:-1::0;;;2549:105:231::1;;;;;;;:::i;:::-;2666:9;2661:123;2681:18:::0;;::::1;2661:123;;;2767:7;;2775:1;2767:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2714:17;:33;2732:11;;2744:1;2732:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2714:33:231::1;-1:-1:-1::0;;;;;2714:33:231::1;;;;;;;;;;;;:50;2748:12;;2761:1;2748:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2714:50:231;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2714:50:231;:63;;-1:-1:-1;;;;;;2714:63:231::1;::::0;;;::::1;::::0;;;::::1;::::0;;2701:3;::::1;::::0;::::1;:::i;:::-;;;;2661:123;;1729:206:453::0;921:13;;719:10:466;;-1:-1:-1;;;;;921:13:453;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:453;;14991:2:486;1814:78:453;;;14973:21:486;15030:2;15010:18;;;15003:30;15069:34;15049:18;;;15042:62;-1:-1:-1;;;15120:18:486;;;15113:39;15169:19;;1814:78:453;14789:405:486;1814:78:453;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;379:1146:231:-;529:22;;;485:2;529:22;;;;;;;;;445:15;;485:2;468:14;;485:2;529:22;;;;;;;;;;-1:-1:-1;;493:58:231;-1:-1:-1;;;;493:58:231;575:10;;;:::i;:::-;;;;557:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;557:67:231;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;630:17:231;648:10;;;:::i;:::-;;;;630:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;630:66:231;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;702:17:231;720:10;;;:::i;:::-;;;;702:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;702:67:231;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;775:17:231;793:10;;;:::i;:::-;;;;775:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;775:70:231;;;:29;;;;;;;;;;;:70;-1:-1:-1;;;851:17:231;869:10;;;:::i;:::-;;;;851:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;851:59:231;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;916:17:231;934:10;;;:::i;:::-;;;;916:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;916:63:231;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;985:17:231;1003:10;;;:::i;:::-;;;;985:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;985:66:231;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;1057:17:231;1075:10;;;:::i;:::-;;;;1057:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1057:68:231;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;1131:17:231;1149:10;;;:::i;:::-;;;;1131:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1131:68:231;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;1205:17:231;1223:10;;;:::i;:::-;;;;1205:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1205:70:231;;;:29;;;;;;;;;;;:70;-1:-1:-1;;;1281:17:231;1299:10;;;:::i;:::-;;;;1281:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1281:71:231;;;:29;;;;;;;;;;;:71;-1:-1:-1;;;1358:17:231;1376:10;;;:::i;:::-;;;;1358:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1358:72:231;;;:29;;;;;;;;;;;:72;1444:13;;;;1436:54;;;;-1:-1:-1;;;1436:54:231;;15584:2:486;1436:54:231;;;15566:21:486;15623:2;15603:18;;;15596:30;15662;15642:18;;;15635:58;15710:18;;1436:54:231;15382:352:486;1436:54:231;1503:17;379:1146;-1:-1:-1;;379:1146:231:o;4174:1747::-;1094:13:452;:11;:13::i;:::-;4387:39:231;;::::1;:84:::0;::::1;;;-1:-1:-1::0;4430:41:231;;::::1;4387:84;4379:108;;;;-1:-1:-1::0;;;4379:108:231::1;;;;;;;:::i;:::-;4544:30;4577:24;:15;:22;:24::i;:::-;4544:57;;4612:9;4607:655;4631:13;:20;4627:1;:24;4607:655;;;4666:30;4717:13;4731:1;4717:16;;;;;;;;:::i;:::-;;;;;;;4666:68;;4742:29;4774:47;:24;:38;4799:12;-1:-1:-1::0;;;;;4774:38:231::1;-1:-1:-1::0;;;;;4774:38:231::1;;;;;;;;;;;;:45;:47::i;:::-;4742:79;;4834:9;4829:379;4853:12;:19;4849:1;:23;4829:379;;;4889:29;4939:12;4952:1;4939:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;4965:41:231;;::::1;5051:1;4965:41:::0;;;:28:::1;:41:::0;;;;;;:55;;::::1;::::0;;;;;;;;;:89;;-1:-1:-1;;;;;;4965:89:231::1;::::0;;5110:15;;4939;;-1:-1:-1;5064:62:231::1;::::0;5110:12;;5123:1;;5110:15;::::1;;;;;:::i;:::-;;;;;;;5064:24;:38;5089:12;-1:-1:-1::0;;;;;5064:38:231::1;-1:-1:-1::0;;;;;5064:38:231::1;;;;;;;;;;;;:45;;:62;;;;:::i;:::-;-1:-1:-1::0;;;;;;5136:31:231::1;5196:1;5136:31:::0;;;:18:::1;:31;::::0;;;;:63;;-1:-1:-1;;;;;;5136:63:231::1;::::0;;4874:3;::::1;::::0;::::1;:::i;:::-;;;;4829:379;;;;5215:40;5238:13;5252:1;5238:16;;;;;;;;:::i;:::-;;;;;;;5215:15;:22;;:40;;;;:::i;:::-;;4658:604;;4653:3;;;;;:::i;:::-;;;;4607:655;;;;5310:35;5348:29;:20;:27;:29::i;:::-;5310:67;;5388:9;5383:338;5407:18;:25;5403:1;:29;5383:338;;;5447:36;5506:18;5525:1;5506:21;;;;;;;;:::i;:::-;;;;;;;5447:81;;5536:19;5558:16;-1:-1:-1::0;;;;;5558:21:231::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5558:23:231::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5536:45;;5653:1;5589:26;5616:5;5589:33;;;;;;:::i;:::-;;;;;;;;;;;;;;:67;;;;;-1:-1:-1::0;;;;;5589:67:231::1;;;;;-1:-1:-1::0;;;;;5589:67:231::1;;;;;;5664:50;5692:18;5711:1;5692:21;;;;;;;;:::i;:::-;;;;;;;5664:20;:27;;:50;;;;:::i;:::-;;5439:282;;5434:3;;;;;:::i;:::-;;;;5383:338;;;;5789:9;5784:133;5804:21:::0;;::::1;5784:133;;;5840:70;5863:10;;5874:1;5863:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5878:11;;5890:1;5878:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5894:12;;5907:1;5894:15;;;;;;;:::i;5840:70::-;5827:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5784:133;;;;4373:1548;;4174:1747:::0;;;;;;:::o;7823:447::-;8027:4;;8082:166;8102:24;;;8082:166;;;8211:13;;8225:1;8211:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:82:231;:17;:39;8163:17;;8181:1;8163:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:39:231;-1:-1:-1;;;;;8145:39:231;;;;;;;;;;;;:62;8185:18;;8204:1;8185:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:62:231;;;;;;;;;;;;;;-1:-1:-1;8145:62:231;;;:82;8141:100;;8236:5;8229:12;;;;;8141:100;8128:3;;;;:::i;:::-;;;;8082:166;;;-1:-1:-1;8261:4:231;;7823:447;-1:-1:-1;;;;;;;7823:447:231:o;2963:749::-;1094:13:452;:11;:13::i;:::-;3125:18:231::1;3146:8;-1:-1:-1::0;;;;;3146:13:231::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;3146:15:231::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;3125:36;;3167:31;3201:26;3228:4;3201:32;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;3240:40:231;;::::1;3201:32;3240:40:::0;;;:28:::1;:40:::0;;;;;:53;;::::1;::::0;;;;;;;;;:64;;-1:-1:-1;;;;;;3240:64:231::1;::::0;;::::1;;::::0;;3201:32;::::1;::::0;-1:-1:-1;3240:64:231;;3310:26:::1;::::0;:32:::1;::::0;3337:4;;3310:32:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:43;;-1:-1:-1;;;;;3310:43:231;;;::::1;-1:-1:-1::0;;;;;;3310:43:231;;::::1;::::0;;;::::1;::::0;;3360:49:::1;:20;3396:11:::0;3360:27:::1;:49::i;:::-;-1:-1:-1::0;3415:43:231::1;:20;3448:8:::0;3415:24:::1;:43::i;:::-;-1:-1:-1::0;;;;;;3469:30:231;;::::1;3529:1;3469:30:::0;;;:18:::1;:30;::::0;;;;;::::1;3465:128;;-1:-1:-1::0;;;;;3542:30:231;;::::1;;::::0;;;:18:::1;:30;::::0;;;;:44;;-1:-1:-1;;;;;;3542:44:231::1;::::0;;::::1;::::0;;;::::1;::::0;;3465:128:::1;-1:-1:-1::0;;;;;3598:37:231;::::1;;::::0;;;:24:::1;:37;::::0;;;;:62:::1;::::0;3648:10;3598:41:::1;:62::i;:::-;-1:-1:-1::0;3666:41:231::1;:15;3694:11:::0;3666:19:::1;:41::i;:::-;;3119:593;;2963:749:::0;;;:::o;1958:403::-;1094:13:452;:11;:13::i;:::-;2143:33:231;;::::1;:78:::0;::::1;;;-1:-1:-1::0;2180:41:231;;::::1;2143:78;2135:102;;;;-1:-1:-1::0;;;2135:102:231::1;;;;;;;:::i;:::-;2249:9;2244:113;2264:15:::0;;::::1;2244:113;;;2343:4;;2348:1;2343:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2294:13;:29;2308:11;;2320:1;2308:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2294:29:231::1;-1:-1:-1::0;;;;;2294:29:231::1;;;;;;;;;;;;:46;2324:12;;2337:1;2324:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2294:46:231::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2294:46:231;:56;;-1:-1:-1;;2294:56:231::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2281:3;::::1;::::0;::::1;:::i;:::-;;;;2244:113;;7391:428:::0;7589:4;;7641:156;7661:21;;;7641:156;;;7763:10;;7774:1;7763:13;;;;;;;:::i;:::-;;;;;;;7701;:35;7715:17;;7733:1;7715:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7701:35:231;-1:-1:-1;;;;;7701:35:231;;;;;;;;;;;;:58;7737:18;;7756:1;7737:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7701:58:231;;;;;;;;;;;;-1:-1:-1;7701:58:231;;;;:75;7697:93;;7785:5;7778:12;;;;;7697:93;7684:3;;;;:::i;:::-;;;;7641:156;;1134:178:453;1094:13:452;:11;:13::i;:::-;1223::453::1;:24:::0;;-1:-1:-1;;;;;1223:24:453;::::1;-1:-1:-1::0;;;;;;1223:24:453;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::452::0;1273:6;-1:-1:-1;;;;;1273:6:452;;1201:85;1287:7:453::1;-1:-1:-1::0;;;;;1262:43:453::1;;;;;;;;;;;1134:178:::0;:::o;2433:187:452:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:452;;;-1:-1:-1;;;;;;2541:17:452;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;10251:300:469:-;10314:16;10342:22;10367:19;10375:3;10367:7;:19::i;:::-;10342:44;10251:300;-1:-1:-1;;;10251:300:469:o;1359:130:452:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:452;719:10:466;1422:23:452;1414:68;;;;-1:-1:-1;;;1414:68:452;;16220:2:486;1414:68:452;;;16202:21:486;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1414:68:452;16018:356:486;1414:68:452;1359:130::o;8615:156:469:-;8688:4;8711:53;8719:3;-1:-1:-1;;;;;8739:23:469;;8711:7;:53::i;9098:115::-;9161:7;9187:19;9195:3;4537:18;;4455:107;1496:153:453;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:453;;;1608:34;1633:8;1608:24;:34::i;8297:150:469:-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:469;;8390:4;:50::i;5562:109::-;5618:16;5653:3;:11;;5646:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:109;;;:::o;2778:1388::-;2844:4;2981:19;;;:12;;;:19;;;;;;3015:15;;3011:1149;;3384:21;3408:14;3421:1;3408:10;:14;:::i;:::-;3456:18;;3384:38;;-1:-1:-1;3436:17:469;;3456:22;;3477:1;;3456:22;:::i;:::-;3436:42;;3510:13;3497:9;:26;3493:398;;3543:17;3563:3;:11;;3575:9;3563:22;;;;;;;;:::i;:::-;;;;;;;;;3543:42;;3714:9;3685:3;:11;;3697:13;3685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3797:23;;;:12;;;:23;;;;;:36;;;3493:398;3969:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4061:3;:12;;:19;4074:5;4061:19;;;;;;;;;;;4054:26;;;4102:4;4095:11;;;;;;;3011:1149;4144:5;4137:12;;;;;2206:404;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:469;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:469;2581:12;;14:480:486;86:3;124:5;118:12;151:6;146:3;139:19;177:4;206:2;201:3;197:12;190:19;;243:2;236:5;232:14;264:1;274:195;288:6;285:1;282:13;274:195;;;353:13;;-1:-1:-1;;;;;349:39:486;337:52;;409:12;;;;444:15;;;;385:1;303:9;274:195;;;-1:-1:-1;485:3:486;;14:480;-1:-1:-1;;;;;14:480:486:o;499:1160::-;930:2;942:21;;;1012:13;;915:18;;;1034:22;;;882:4;;1110;;1087:3;1072:19;;;1137:15;;;882:4;1180:195;1194:6;1191:1;1188:13;1180:195;;;1259:13;;-1:-1:-1;;;;;1255:39:486;1243:52;;1315:12;;;;1350:15;;;;1291:1;1209:9;1180:195;;;1184:3;;;1420:9;1415:3;1411:19;1406:2;1395:9;1391:18;1384:47;1454:60;1510:3;1502:6;1454:60;:::i;:::-;1440:74;;;1562:9;1554:6;1550:22;1545:2;1534:9;1530:18;1523:50;1590:63;1646:6;1638;1590:63;:::i;1664:150::-;-1:-1:-1;;;;;1758:31:486;;1748:42;;1738:70;;1804:1;1801;1794:12;1819:482;1943:6;1951;2004:2;1992:9;1983:7;1979:23;1975:32;1972:52;;;2020:1;2017;2010:12;1972:52;2059:9;2046:23;2078:50;2122:5;2078:50;:::i;:::-;2147:5;-1:-1:-1;2204:2:486;2189:18;;2176:32;2217:52;2176:32;2217:52;:::i;:::-;2288:7;2278:17;;;1819:482;;;;;:::o;2306:388::-;2390:8;2400:6;2454:3;2447:4;2439:6;2435:17;2431:27;2421:55;;2472:1;2469;2462:12;2421:55;-1:-1:-1;2495:20:486;;2538:18;2527:30;;2524:50;;;2570:1;2567;2560:12;2524:50;2607:4;2599:6;2595:17;2583:29;;2667:3;2660:4;2650:6;2647:1;2643:14;2635:6;2631:27;2627:38;2624:47;2621:67;;;2684:1;2681;2674:12;2621:67;2306:388;;;;;:::o;2699:1236::-;2942:6;2950;2958;2966;2974;2982;3035:2;3023:9;3014:7;3010:23;3006:32;3003:52;;;3051:1;3048;3041:12;3003:52;3091:9;3078:23;3120:18;3161:2;3153:6;3150:14;3147:34;;;3177:1;3174;3167:12;3147:34;3216:91;3299:7;3290:6;3279:9;3275:22;3216:91;:::i;:::-;3326:8;;-1:-1:-1;3190:117:486;-1:-1:-1;3414:2:486;3399:18;;3386:32;;-1:-1:-1;3430:16:486;;;3427:36;;;3459:1;3456;3449:12;3427:36;3498:93;3583:7;3572:8;3561:9;3557:24;3498:93;:::i;:::-;3610:8;;-1:-1:-1;3472:119:486;-1:-1:-1;3698:2:486;3683:18;;3670:32;;-1:-1:-1;3714:16:486;;;3711:36;;;3743:1;3740;3733:12;3711:36;;3782:93;3867:7;3856:8;3845:9;3841:24;3782:93;:::i;:::-;2699:1236;;;;-1:-1:-1;2699:1236:486;;-1:-1:-1;2699:1236:486;;3894:8;;2699:1236;-1:-1:-1;;;2699:1236:486:o;4562:295::-;4650:6;4703:2;4691:9;4682:7;4678:23;4674:32;4671:52;;;4719:1;4716;4709:12;4671:52;4758:9;4745:23;4777:50;4821:5;4777:50;:::i;7286:657::-;7455:2;7507:21;;;7577:13;;7480:18;;;7599:22;;;7426:4;;7455:2;7678:15;;;;7652:2;7637:18;;;7426:4;7721:196;7735:6;7732:1;7729:13;7721:196;;;7800:13;;-1:-1:-1;;;;;;7796:40:486;7784:53;;7892:15;;;;7857:12;;;;7757:1;7750:9;7721:196;;;-1:-1:-1;7934:3:486;;7286:657;-1:-1:-1;;;;;;7286:657:486:o;8928:671::-;9090:6;9098;9106;9159:2;9147:9;9138:7;9134:23;9130:32;9127:52;;;9175:1;9172;9165:12;9127:52;9214:9;9201:23;9233:50;9277:5;9233:50;:::i;:::-;9302:5;-1:-1:-1;9359:2:486;9344:18;;9331:32;9372:52;9331:32;9372:52;:::i;:::-;9443:7;-1:-1:-1;9502:2:486;9487:18;;9474:32;9515:52;9474:32;9515:52;:::i;:::-;9586:7;9576:17;;;8928:671;;;;;:::o;9604:127::-;9665:10;9660:3;9656:20;9653:1;9646:31;9696:4;9693:1;9686:15;9720:4;9717:1;9710:15;9736:275;9807:2;9801:9;9872:2;9853:13;;-1:-1:-1;;9849:27:486;9837:40;;9907:18;9892:34;;9928:22;;;9889:62;9886:88;;;9954:18;;:::i;:::-;9990:2;9983:22;9736:275;;-1:-1:-1;9736:275:486:o;10016:187::-;10065:4;10098:18;10090:6;10087:30;10084:56;;;10120:18;;:::i;:::-;-1:-1:-1;10186:2:486;10165:15;-1:-1:-1;;10161:29:486;10192:4;10157:40;;10016:187::o;10208:673::-;10277:6;10330:2;10318:9;10309:7;10305:23;10301:32;10298:52;;;10346:1;10343;10336:12;10298:52;10386:9;10373:23;10419:18;10411:6;10408:30;10405:50;;;10451:1;10448;10441:12;10405:50;10474:22;;10527:4;10519:13;;10515:27;-1:-1:-1;10505:55:486;;10556:1;10553;10546:12;10505:55;10592:2;10579:16;10617:49;10633:32;10662:2;10633:32;:::i;:::-;10617:49;:::i;:::-;10689:2;10682:5;10675:17;10729:7;10724:2;10719;10715;10711:11;10707:20;10704:33;10701:53;;;10750:1;10747;10740:12;10701:53;10805:2;10800;10796;10792:11;10787:2;10780:5;10776:14;10763:45;10849:1;10828:14;;;10844:2;10824:23;10817:34;;;;10832:5;10208:673;-1:-1:-1;;;;10208:673:486:o;12368:127::-;12429:10;12424:3;12420:20;12417:1;12410:31;12460:4;12457:1;12450:15;12484:4;12481:1;12474:15;12500:127;12561:10;12556:3;12552:20;12549:1;12542:31;12592:4;12589:1;12582:15;12616:4;12613:1;12606:15;12632:128;12672:3;12703:1;12699:6;12696:1;12693:13;12690:39;;;12709:18;;:::i;:::-;-1:-1:-1;12745:9:486;;12632:128::o;12765:135::-;12804:3;-1:-1:-1;;12825:17:486;;12822:43;;;12845:18;;:::i;:::-;-1:-1:-1;12892:1:486;12881:13;;12765:135::o;12905:335::-;13107:2;13089:21;;;13146:2;13126:18;;;13119:30;-1:-1:-1;;;13180:2:486;13165:18;;13158:41;13231:2;13216:18;;12905:335::o;13245:258::-;13317:1;13327:113;13341:6;13338:1;13335:13;13327:113;;;13417:11;;;13411:18;13398:11;;;13391:39;13363:2;13356:10;13327:113;;;13458:6;13455:1;13452:13;13449:48;;;13493:1;13484:6;13479:3;13475:16;13468:27;13449:48;;13245:258;;;:::o;13508:636::-;13588:6;13641:2;13629:9;13620:7;13616:23;13612:32;13609:52;;;13657:1;13654;13647:12;13609:52;13690:9;13684:16;13723:18;13715:6;13712:30;13709:50;;;13755:1;13752;13745:12;13709:50;13778:22;;13831:4;13823:13;;13819:27;-1:-1:-1;13809:55:486;;13860:1;13857;13850:12;13809:55;13889:2;13883:9;13914:49;13930:32;13959:2;13930:32;:::i;13914:49::-;13986:2;13979:5;13972:17;14026:7;14021:2;14016;14012;14008:11;14004:20;14001:33;13998:53;;;14047:1;14044;14037:12;13998:53;14060:54;14111:2;14106;14099:5;14095:14;14090:2;14086;14082:11;14060:54;:::i;:::-;14133:5;13508:636;-1:-1:-1;;;;;13508:636:486:o;14149:276::-;14280:3;14318:6;14312:13;14334:53;14380:6;14375:3;14368:4;14360:6;14356:17;14334:53;:::i;:::-;14403:16;;;;;14149:276;-1:-1:-1;;14149:276:486:o;15199:178::-;15236:3;15280:4;15273:5;15269:16;15304:7;15294:41;;15315:18;;:::i;:::-;-1:-1:-1;;15351:20:486;;15199:178;-1:-1:-1;;15199:178:486:o;15739:274::-;15797:6;15850:2;15838:9;15829:7;15825:23;15821:32;15818:52;;;15866:1;15863;15856:12;15818:52;15905:9;15892:23;15955:8;15948:5;15944:20;15937:5;15934:31;15924:59;;15979:1;15976;15969:12;16379:125;16419:4;16447:1;16444;16441:8;16438:34;;;16452:18;;:::i;:::-;-1:-1:-1;16489:9:486;;16379:125::o;16509:127::-;16570:10;16565:3;16561:20;16558:1;16551:31;16601:4;16598:1;16591:15;16625:4;16622:1;16615:15", + "linkReferences": {} + }, + "methodIdentifiers": { + "_getExtensionFunctions()": "89f8132e", + "_removeRedemptionStrategy(address)": "514b49d9", + "_resetRedemptionStrategies(address[],address[],address[])": "a1bb91e3", + "_setDefaultOutputToken(address,address)": "2434cb7f", + "_setRedemptionStrategies(address[],address[],address[])": "366eda2e", + "_setRedemptionStrategy(address,address,address)": "d7341acf", + "_setSlippages(address[],address[],uint256[])": "5495a6d7", + "_setUniswapV3Fees(address[],address[],uint24[])": "e187a7dd", + "_setUniswapV3Routers(address[],address[],address[])": "72c9889c", + "acceptOwnership()": "79ba5097", + "ap()": "3c4f743c", + "customUniV3Router(address,address)": "c8ff6fee", + "defaultOutputToken(address)": "8db87c27", + "getAllPairsStrategies()": "0d856eef", + "owner()": "8da5cb5b", + "pairsStrategiesMatch(address[],address[],address[])": "3322d877", + "pendingOwner()": "e30c3978", + "redemptionStrategiesByName(string)": "dee7fe48", + "redemptionStrategiesByTokens(address,address)": "a700f9e4", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b", + "uniswapPairsFeesMatch(address[],address[],uint256[])": "eb29d9f8", + "uniswapPairsRoutersMatch(address[],address[],address[])": "aeabb621", + "uniswapV3Fees(address,address)": "398cd955" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/LooplessFlywheelBooster.json b/packages/sdk/deployments/mode/LooplessFlywheelBooster.json new file mode 100644 index 0000000000..06febdad2a --- /dev/null +++ b/packages/sdk/deployments/mode/LooplessFlywheelBooster.json @@ -0,0 +1,443 @@ +{ + "address": "0x1D89E5ba287E67AC0046D2218Be5fE1382cE47b4", + "abi": [ + { + "inputs": [], + "name": "BOOSTER_TYPE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "strategy", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "boostedBalanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "strategy", + "type": "address" + } + ], + "name": "boostedTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x6af95efea1f6c712908e2ba7ea848ebdb2a6619b721630c0bf24fd82a476922c", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x1D89E5ba287E67AC0046D2218Be5fE1382cE47b4", + "transactionIndex": 1, + "gasUsed": "278499", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5d61dfe681beba8dcc12ecd062110bcfadc406c6d00776b9650a38feb1518599", + "transactionHash": "0x6af95efea1f6c712908e2ba7ea848ebdb2a6619b721630c0bf24fd82a476922c", + "logs": [], + "blockNumber": 2097481, + "cumulativeGasUsed": "325412", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "BOOSTER_TYPE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "strategy", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "boostedBalanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "strategy", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "boostedTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "boostedBalanceOf(address,address)": { + "params": { + "strategy": "the strategy to calculate boosted balance of", + "user": "the user to calculate boosted balance of" + }, + "returns": { + "_0": "the boosted balance" + } + }, + "boostedTotalSupply(address)": { + "params": { + "strategy": "the strategy to calculate boosted supply of" + }, + "returns": { + "_0": "the boosted supply" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "boostedBalanceOf(address,address)": { + "notice": "calculate the boosted balance of a user in a given strategy." + }, + "boostedTotalSupply(address)": { + "notice": "calculate the boosted supply of a strategy." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/strategies/flywheel/LooplessFlywheelBooster.sol": "LooplessFlywheelBooster" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/LooplessFlywheelBooster.sol": { + "keccak256": "0x244094ce9fa1f4e793232af4d4510040db7a214142a2d785625245bd3845d147", + "urls": [ + "bzz-raw://924629f717e6672fdbf1a7b5279902dcef142cbc198e82623a6f2ec700d8fb27", + "dweb:/ipfs/QmZcsavEUjHcrQpJB67PE5E3P5QRFZZyDMmdnTs5XRLdFx" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50610414806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631a50ef2f146100465780631e1932fb1461006c5780639a8cca551461007f575b600080fd5b6100596100543660046102ce565b6100c8565b6040519081526020015b60405180910390f35b61005961007a366004610307565b61024c565b6100bb6040518060400160405280601781526020017f4c6f6f706c657373466c79776865656c426f6f7374657200000000000000000081525081565b604051610063919061032b565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182918516906370a0823190602401602060405180830381865afa158015610113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101379190610380565b905060008490506000816001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a29190610380565b6040516305eff7ef60e21b81526001600160a01b0387811660048301528416906317bfdfbc90602401602060405180830381865afa1580156101e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020c9190610380565b61021e90670de0b6b3a76400006103af565b61022891906103ce565b9050808311610238576000610242565b61024281846103f0565b9695505050505050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b09190610380565b92915050565b6001600160a01b03811681146102cb57600080fd5b50565b600080604083850312156102e157600080fd5b82356102ec816102b6565b915060208301356102fc816102b6565b809150509250929050565b60006020828403121561031957600080fd5b8135610324816102b6565b9392505050565b600060208083528351808285015260005b818110156103585785810183015185820160400152820161033c565b8181111561036a576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561039257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156103c9576103c9610399565b500290565b6000826103eb57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561040257610402610399565b50039056fea164736f6c634300080a000a", + "sourceMap": "188:1055:174:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80631a50ef2f146100465780631e1932fb1461006c5780639a8cca551461007f575b600080fd5b6100596100543660046102ce565b6100c8565b6040519081526020015b60405180910390f35b61005961007a366004610307565b61024c565b6100bb6040518060400160405280601781526020017f4c6f6f706c657373466c79776865656c426f6f7374657200000000000000000081525081565b604051610063919061032b565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182918516906370a0823190602401602060405180830381865afa158015610113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101379190610380565b905060008490506000816001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a29190610380565b6040516305eff7ef60e21b81526001600160a01b0387811660048301528416906317bfdfbc90602401602060405180830381865afa1580156101e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020c9190610380565b61021e90670de0b6b3a76400006103af565b61022891906103ce565b9050808311610238576000610242565b61024281846103f0565b9695505050505050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b09190610380565b92915050565b6001600160a01b03811681146102cb57600080fd5b50565b600080604083850312156102e157600080fd5b82356102ec816102b6565b915060208301356102fc816102b6565b809150509250929050565b60006020828403121561031957600080fd5b8135610324816102b6565b9392505050565b600060208083528351808285015260005b818110156103585785810183015185820160400152820161033c565b8181111561036a576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561039257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156103c9576103c9610399565b500290565b6000826103eb57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561040257610402610399565b50039056fea164736f6c634300080a000a", + "sourceMap": "188:1055:174:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;853:388;;;;;;:::i;:::-;;:::i;:::-;;;726:25:486;;;714:2;699:18;853:388:174;;;;;;;;484:116;;;;;;:::i;:::-;;:::i;245:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;853:388::-;972:24;;-1:-1:-1;;;972:24:174;;-1:-1:-1;;;;;1803:32:486;;;972:24:174;;;1785:51:486;932:7:174;;;;972:18;;;;;1758::486;;972:24:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;947:49;;1002:16;1037:8;1002:45;;1053:21;1124:8;-1:-1:-1;;;;;1124:28:174;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1078:35;;-1:-1:-1;;;1078:35:174;;-1:-1:-1;;;;;1803:32:486;;;1078:35:174;;;1785:51:486;1078:29:174;;;;;1758:18:486;;1078:35:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;1116:4;1078:42;:::i;:::-;1077:77;;;;:::i;:::-;1053:101;;1185:13;1168:14;:30;1167:69;;1235:1;1167:69;;;1202:30;1219:13;1202:14;:30;:::i;:::-;1160:76;853:388;-1:-1:-1;;;;;;853:388:174:o;484:116::-;551:7;573:8;-1:-1:-1;;;;;573:20:174;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;566:29;484:116;-1:-1:-1;;484:116:174:o;14:138:486:-;-1:-1:-1;;;;;96:31:486;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:418::-;241:6;249;302:2;290:9;281:7;277:23;273:32;270:52;;;318:1;315;308:12;270:52;357:9;344:23;376:38;408:5;376:38;:::i;:::-;433:5;-1:-1:-1;490:2:486;475:18;;462:32;503:40;462:32;503:40;:::i;:::-;562:7;552:17;;;157:418;;;;;:::o;762:270::-;837:6;890:2;878:9;869:7;865:23;861:32;858:52;;;906:1;903;896:12;858:52;945:9;932:23;964:38;996:5;964:38;:::i;:::-;1021:5;762:270;-1:-1:-1;;;762:270:486:o;1037:597::-;1149:4;1178:2;1207;1196:9;1189:21;1239:6;1233:13;1282:6;1277:2;1266:9;1262:18;1255:34;1307:1;1317:140;1331:6;1328:1;1325:13;1317:140;;;1426:14;;;1422:23;;1416:30;1392:17;;;1411:2;1388:26;1381:66;1346:10;;1317:140;;;1475:6;1472:1;1469:13;1466:91;;;1545:1;1540:2;1531:6;1520:9;1516:22;1512:31;1505:42;1466:91;-1:-1:-1;1618:2:486;1597:15;-1:-1:-1;;1593:29:486;1578:45;;;;1625:2;1574:54;;1037:597;-1:-1:-1;;;1037:597:486:o;1847:184::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;-1:-1:-1;2009:16:486;;1847:184;-1:-1:-1;1847:184:486:o;2036:127::-;2097:10;2092:3;2088:20;2085:1;2078:31;2128:4;2125:1;2118:15;2152:4;2149:1;2142:15;2168:168;2208:7;2274:1;2270;2266:6;2262:14;2259:1;2256:21;2251:1;2244:9;2237:17;2233:45;2230:71;;;2281:18;;:::i;:::-;-1:-1:-1;2321:9:486;;2168:168::o;2341:217::-;2381:1;2407;2397:132;;2451:10;2446:3;2442:20;2439:1;2432:31;2486:4;2483:1;2476:15;2514:4;2511:1;2504:15;2397:132;-1:-1:-1;2543:9:486;;2341:217::o;2563:125::-;2603:4;2631:1;2628;2625:8;2622:34;;;2636:18;;:::i;:::-;-1:-1:-1;2673:9:486;;2563:125::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "BOOSTER_TYPE()": "9a8cca55", + "boostedBalanceOf(address,address)": "1a50ef2f", + "boostedTotalSupply(address)": "1e1932fb" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/MasterPriceOracle.json b/packages/sdk/deployments/mode/MasterPriceOracle.json new file mode 100644 index 0000000000..21e4036cbc --- /dev/null +++ b/packages/sdk/deployments/mode/MasterPriceOracle.json @@ -0,0 +1,530 @@ +{ + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "NewAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOracle", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOracle", + "type": "address" + } + ], + "name": "NewDefaultOracle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "underlying", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "oldOracle", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOracle", + "type": "address" + } + ], + "name": "NewOracle", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle[]", + "name": "_oracles", + "type": "address[]" + } + ], + "name": "add", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "canAdminOverwrite", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultOracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle[]", + "name": "_oracles", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle", + "name": "_defaultOracle", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + }, + { + "internalType": "bool", + "name": "_canAdminOverwrite", + "type": "bool" + }, + { + "internalType": "address", + "name": "_wtoken", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "oracles", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "newOracle", + "type": "address" + } + ], + "name": "setDefaultOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "wtoken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "transactionIndex": 1, + "gasUsed": "846522", + "logsBloom": "0x08000000000000000000000000000000400000008000000000000000000000000000040000000000000000000000000000000004000080000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000400000000080000000000000800000000000000000000000000000000400000000000000000000000000000000000000000030000000000000000000040000000000000400000000000000000000000000000000080000000000000000000000000000000000000000000000080000", + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4", + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000004e7676b20b86beea9c197be756361680fae3c9ae" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + }, + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0x10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d7669b6bdfdb83066dd7c0ada4b630b25cbc28a", + "logIndex": 1, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + }, + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0x10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126" + ], + "data": "0x000000000000000000000000420000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d7669b6bdfdb83066dd7c0ada4b630b25cbc28a", + "logIndex": 2, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + }, + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + }, + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + } + ], + "blockNumber": 2097498, + "cumulativeGasUsed": "893435", + "status": 1, + "byzantium": true + }, + "args": [ + "0x4e7676B20B86Beea9c197bE756361680FaE3C9AE", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0x882b92a700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000420000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000001d7669b6bdfdb83066dd7c0ada4b630b25cbc28a0000000000000000000000001d7669b6bdfdb83066dd7c0ada4b630b25cbc28a" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + [ + "0x0000000000000000000000000000000000000000", + "0x4200000000000000000000000000000000000006" + ], + [ + "0x1D7669b6BDfdb83066dd7C0aDa4B630b25cBc28a", + "0x1D7669b6BDfdb83066dd7C0aDa4B630b25cBc28a" + ], + "0x0000000000000000000000000000000000000000", + "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + true, + "0x4200000000000000000000000000000000000006" + ] + }, + "implementation": "0x4e7676B20B86Beea9c197bE756361680FaE3C9AE", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/MasterPriceOracle_Implementation.json b/packages/sdk/deployments/mode/MasterPriceOracle_Implementation.json new file mode 100644 index 0000000000..662376c2ab --- /dev/null +++ b/packages/sdk/deployments/mode/MasterPriceOracle_Implementation.json @@ -0,0 +1,865 @@ +{ + "address": "0x4e7676B20B86Beea9c197bE756361680FaE3C9AE", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "NewAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOracle", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOracle", + "type": "address" + } + ], + "name": "NewDefaultOracle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "underlying", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "oldOracle", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOracle", + "type": "address" + } + ], + "name": "NewOracle", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle[]", + "name": "_oracles", + "type": "address[]" + } + ], + "name": "add", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "canAdminOverwrite", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "defaultOracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle[]", + "name": "_oracles", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle", + "name": "_defaultOracle", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + }, + { + "internalType": "bool", + "name": "_canAdminOverwrite", + "type": "bool" + }, + { + "internalType": "address", + "name": "_wtoken", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "oracles", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "newOracle", + "type": "address" + } + ], + "name": "setDefaultOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "wtoken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x71e751b922fd5d86c41be5d29344d9ff42b1759d537da514a2aa57de741d9e3f", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x4e7676B20B86Beea9c197bE756361680FaE3C9AE", + "transactionIndex": 1, + "gasUsed": "839948", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x54a98b03a880d12c7e7f079c2fb0d34737acec32e96e8e49cd2f69f3c658c34c", + "transactionHash": "0x71e751b922fd5d86c41be5d29344d9ff42b1759d537da514a2aa57de741d9e3f", + "logs": [], + "blockNumber": 2097495, + "cumulativeGasUsed": "890449", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldAdmin", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewAdmin", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOracle", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOracle", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewDefaultOracle", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "oldOracle", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOracle", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOracle", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle[]", + "name": "_oracles", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "add" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "canAdminOverwrite", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "changeAdmin" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "defaultOracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle[]", + "name": "_oracles", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle", + "name": "_defaultOracle", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + }, + { + "internalType": "bool", + "name": "_canAdminOverwrite", + "type": "bool" + }, + { + "internalType": "address", + "name": "_wtoken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "oracles", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "newOracle", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setDefaultOracle" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "wtoken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "add(address[],address[])": { + "details": "Sets `_oracles` for `underlyings`." + }, + "canAdminOverwrite()": { + "details": "Returns a boolean indicating if `admin` can overwrite existing assignments of oracles to underlying tokens." + }, + "changeAdmin(address)": { + "details": "Changes the admin and emits an event." + }, + "getUnderlyingPrice(address)": { + "details": "Implements the `PriceOracle` interface for Ionic pools (and Compound v2).", + "returns": { + "_0": "Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`." + } + }, + "initialize(address[],address[],address,address,bool,address)": { + "details": "Initialize state variables.", + "params": { + "_admin": "The admin who can assign oracles to underlying tokens.", + "_canAdminOverwrite": "Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.", + "_defaultOracle": "The default `PriceOracle` contract to use.", + "_oracles": "The `PriceOracle` contracts to be assigned to `underlyings`.", + "_wtoken": "The Wrapped native asset address", + "underlyings": "The underlying ERC20 token addresses to link to `_oracles`." + } + }, + "price(address)": { + "details": "Attempts to return the price in ETH of `underlying` (implements `BasePriceOracle`)." + }, + "setDefaultOracle(address)": { + "details": "Changes the default price oracle" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getUnderlyingPrice(address)": { + "notice": "Returns the price in ETH of the token underlying `cToken`." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/oracles/MasterPriceOracle.sol": "MasterPriceOracle" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x9807f66d6f8aa8005c3e4da70b7dc64d16daeccd02bc865a49d809e0094a81a2", + "urls": [ + "bzz-raw://12d8bf913ca8d8051c62a803204ed899e011efeda842e90639f3c8e5fe0270cf", + "dweb:/ipfs/Qmd8bXgWwamyWgk4AGFQE4N6JGMtXBw9mDqAYH27sVPLKY" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50610e3c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80639c9192c6116100715780639c9192c614610137578063addd50991461014a578063aea9107814610173578063c44014d214610194578063f851a440146101a7578063fc57d4df146101ba57600080fd5b8063656b0fd1146100ae57806380dce169146100d1578063882b92a7146100fc5780638f283970146101115780639c0591c814610124575b600080fd5b600354600160a01b900460ff161560405190151581526020015b60405180910390f35b6002546100e4906001600160a01b031681565b6040516001600160a01b0390911681526020016100c8565b61010f61010a366004610bab565b6101cd565b005b61010f61011f366004610cae565b610458565b6004546100e4906001600160a01b031681565b61010f610145366004610d17565b6104e4565b6100e4610158366004610cae565b6001602052600090815260409020546001600160a01b031681565b610186610181366004610cae565b61073f565b6040519081526020016100c8565b61010f6101a2366004610cae565b6108ab565b6003546100e4906001600160a01b031681565b6101866101c8366004610cae565b61092f565b600054610100900460ff16158080156101ed5750600054600160ff909116105b806102075750303b158015610207575060005460ff166001145b61026f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610292576000805461ff0019166101001790555b85518751146102f15760405162461bcd60e51b815260206004820152602560248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201526438bab0b61760d91b6064820152608401610266565b60005b87518110156103b957600088828151811061031157610311610d83565b60200260200101519050600088838151811061032f5761032f610d83565b6020908102919091018101516001600160a01b03848116600081815260018552604080822080546001600160a01b03191694861694851790558051928352948201529283015291507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a1505080806103b190610d99565b9150506102f4565b50600280546001600160a01b038088166001600160a01b03199283161790925560038054600160a01b8715026001600160a81b0319909116888516171790556004805492851692909116919091179055801561044f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6003546001600160a01b031633146104825760405162461bcd60e51b815260040161026690610dc2565b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91015b60405180910390a15050565b6003546001600160a01b0316331461050e5760405162461bcd60e51b815260040161026690610dc2565b821580159061051c57508281145b61058e5760405162461bcd60e51b815260206004820152603860248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201527f7175616c20616e642067726561746572207468616e20302e00000000000000006064820152608401610266565b60005b838110156107385760008585838181106105ad576105ad610d83565b90506020020160208101906105c29190610cae565b6001600160a01b038181166000908152600160205260409020546003549293501690600160a01b900460ff1615610685576001600160a01b038116156106855760405162461bcd60e51b815260206004820152604c60248201527f41646d696e2063616e6e6f74206f7665727772697465206578697374696e672060448201527f61737369676e6d656e7473206f66206f7261636c657320746f20756e6465726c60648201526b3cb4b733903a37b5b2b7399760a11b608482015260a401610266565b600085858581811061069957610699610d83565b90506020020160208101906106ae9190610cae565b6001600160a01b0384811660008181526001602090815260409182902080546001600160a01b0319168686169081179091558251938452938716908301528101919091529091507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a1505050808061073090610d99565b915050610591565b5050505050565b6004546000906001600160a01b03838116911614156107675750670de0b6b3a7640000919050565b6001600160a01b038083166000908152600160205260409020541680156107fa576040516315d5220f60e31b81526001600160a01b03848116600483015282169063aea91078906024015b602060405180830381865afa1580156107cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f39190610df9565b9392505050565b6002546001600160a01b03161561083d576002546040516315d5220f60e31b81526001600160a01b0385811660048301529091169063aea91078906024016107b2565b60405162461bcd60e51b815260206004820152603960248201527f5072696365206f7261636c65206e6f7420666f756e6420666f7220746869732060448201527f756e6465726c79696e6720746f6b656e20616464726573732e000000000000006064820152608401610266565b6003546001600160a01b031633146108d55760405162461bcd60e51b815260040161026690610dc2565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f0df2d61fdd201e9633368dca495e2c469e36c48039263448dd8a2a954c19ef1a91016104d8565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109949190610e12565b6004549091506001600160a01b03808316911614156109bd5750670de0b6b3a764000092915050565b6001600160a01b03808216600090815260016020526040902054168015610a515760405163fc57d4df60e01b81526001600160a01b03858116600483015282169063fc57d4df906024015b602060405180830381865afa158015610a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a499190610df9565b949350505050565b6002546001600160a01b03161561083d5760025460405163fc57d4df60e01b81526001600160a01b0386811660048301529091169063fc57d4df90602401610a08565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ad357610ad3610a94565b604052919050565b600067ffffffffffffffff821115610af557610af5610a94565b5060051b60200190565b6001600160a01b0381168114610b1457600080fd5b50565b8035610b2281610aff565b919050565b600082601f830112610b3857600080fd5b81356020610b4d610b4883610adb565b610aaa565b82815260059290921b84018101918181019086841115610b6c57600080fd5b8286015b84811015610b90578035610b8381610aff565b8352918301918301610b70565b509695505050505050565b80358015158114610b2257600080fd5b60008060008060008060c08789031215610bc457600080fd5b863567ffffffffffffffff80821115610bdc57600080fd5b818901915089601f830112610bf057600080fd5b81356020610c00610b4883610adb565b82815260059290921b8401810191818101908d841115610c1f57600080fd5b948201945b83861015610c46578535610c3781610aff565b82529482019490820190610c24565b9a50508a013592505080821115610c5c57600080fd5b50610c6989828a01610b27565b955050610c7860408801610b17565b9350610c8660608801610b17565b9250610c9460808801610b9b565b9150610ca260a08801610b17565b90509295509295509295565b600060208284031215610cc057600080fd5b81356107f381610aff565b60008083601f840112610cdd57600080fd5b50813567ffffffffffffffff811115610cf557600080fd5b6020830191508360208260051b8501011115610d1057600080fd5b9250929050565b60008060008060408587031215610d2d57600080fd5b843567ffffffffffffffff80821115610d4557600080fd5b610d5188838901610ccb565b90965094506020870135915080821115610d6a57600080fd5b50610d7787828801610ccb565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610dbb57634e487b7160e01b600052601160045260246000fd5b5060010190565b60208082526018908201527f53656e646572206973206e6f74207468652061646d696e2e0000000000000000604082015260600190565b600060208284031215610e0b57600080fd5b5051919050565b600060208284031215610e2457600080fd5b81516107f381610aff56fea164736f6c634300080a000a", + "sourceMap": "463:5691:235:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80639c9192c6116100715780639c9192c614610137578063addd50991461014a578063aea9107814610173578063c44014d214610194578063f851a440146101a7578063fc57d4df146101ba57600080fd5b8063656b0fd1146100ae57806380dce169146100d1578063882b92a7146100fc5780638f283970146101115780639c0591c814610124575b600080fd5b600354600160a01b900460ff161560405190151581526020015b60405180910390f35b6002546100e4906001600160a01b031681565b6040516001600160a01b0390911681526020016100c8565b61010f61010a366004610bab565b6101cd565b005b61010f61011f366004610cae565b610458565b6004546100e4906001600160a01b031681565b61010f610145366004610d17565b6104e4565b6100e4610158366004610cae565b6001602052600090815260409020546001600160a01b031681565b610186610181366004610cae565b61073f565b6040519081526020016100c8565b61010f6101a2366004610cae565b6108ab565b6003546100e4906001600160a01b031681565b6101866101c8366004610cae565b61092f565b600054610100900460ff16158080156101ed5750600054600160ff909116105b806102075750303b158015610207575060005460ff166001145b61026f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610292576000805461ff0019166101001790555b85518751146102f15760405162461bcd60e51b815260206004820152602560248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201526438bab0b61760d91b6064820152608401610266565b60005b87518110156103b957600088828151811061031157610311610d83565b60200260200101519050600088838151811061032f5761032f610d83565b6020908102919091018101516001600160a01b03848116600081815260018552604080822080546001600160a01b03191694861694851790558051928352948201529283015291507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a1505080806103b190610d99565b9150506102f4565b50600280546001600160a01b038088166001600160a01b03199283161790925560038054600160a01b8715026001600160a81b0319909116888516171790556004805492851692909116919091179055801561044f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6003546001600160a01b031633146104825760405162461bcd60e51b815260040161026690610dc2565b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91015b60405180910390a15050565b6003546001600160a01b0316331461050e5760405162461bcd60e51b815260040161026690610dc2565b821580159061051c57508281145b61058e5760405162461bcd60e51b815260206004820152603860248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201527f7175616c20616e642067726561746572207468616e20302e00000000000000006064820152608401610266565b60005b838110156107385760008585838181106105ad576105ad610d83565b90506020020160208101906105c29190610cae565b6001600160a01b038181166000908152600160205260409020546003549293501690600160a01b900460ff1615610685576001600160a01b038116156106855760405162461bcd60e51b815260206004820152604c60248201527f41646d696e2063616e6e6f74206f7665727772697465206578697374696e672060448201527f61737369676e6d656e7473206f66206f7261636c657320746f20756e6465726c60648201526b3cb4b733903a37b5b2b7399760a11b608482015260a401610266565b600085858581811061069957610699610d83565b90506020020160208101906106ae9190610cae565b6001600160a01b0384811660008181526001602090815260409182902080546001600160a01b0319168686169081179091558251938452938716908301528101919091529091507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a1505050808061073090610d99565b915050610591565b5050505050565b6004546000906001600160a01b03838116911614156107675750670de0b6b3a7640000919050565b6001600160a01b038083166000908152600160205260409020541680156107fa576040516315d5220f60e31b81526001600160a01b03848116600483015282169063aea91078906024015b602060405180830381865afa1580156107cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f39190610df9565b9392505050565b6002546001600160a01b03161561083d576002546040516315d5220f60e31b81526001600160a01b0385811660048301529091169063aea91078906024016107b2565b60405162461bcd60e51b815260206004820152603960248201527f5072696365206f7261636c65206e6f7420666f756e6420666f7220746869732060448201527f756e6465726c79696e6720746f6b656e20616464726573732e000000000000006064820152608401610266565b6003546001600160a01b031633146108d55760405162461bcd60e51b815260040161026690610dc2565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f0df2d61fdd201e9633368dca495e2c469e36c48039263448dd8a2a954c19ef1a91016104d8565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109949190610e12565b6004549091506001600160a01b03808316911614156109bd5750670de0b6b3a764000092915050565b6001600160a01b03808216600090815260016020526040902054168015610a515760405163fc57d4df60e01b81526001600160a01b03858116600483015282169063fc57d4df906024015b602060405180830381865afa158015610a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a499190610df9565b949350505050565b6002546001600160a01b03161561083d5760025460405163fc57d4df60e01b81526001600160a01b0386811660048301529091169063fc57d4df90602401610a08565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ad357610ad3610a94565b604052919050565b600067ffffffffffffffff821115610af557610af5610a94565b5060051b60200190565b6001600160a01b0381168114610b1457600080fd5b50565b8035610b2281610aff565b919050565b600082601f830112610b3857600080fd5b81356020610b4d610b4883610adb565b610aaa565b82815260059290921b84018101918181019086841115610b6c57600080fd5b8286015b84811015610b90578035610b8381610aff565b8352918301918301610b70565b509695505050505050565b80358015158114610b2257600080fd5b60008060008060008060c08789031215610bc457600080fd5b863567ffffffffffffffff80821115610bdc57600080fd5b818901915089601f830112610bf057600080fd5b81356020610c00610b4883610adb565b82815260059290921b8401810191818101908d841115610c1f57600080fd5b948201945b83861015610c46578535610c3781610aff565b82529482019490820190610c24565b9a50508a013592505080821115610c5c57600080fd5b50610c6989828a01610b27565b955050610c7860408801610b17565b9350610c8660608801610b17565b9250610c9460808801610b9b565b9150610ca260a08801610b17565b90509295509295509295565b600060208284031215610cc057600080fd5b81356107f381610aff565b60008083601f840112610cdd57600080fd5b50813567ffffffffffffffff811115610cf557600080fd5b6020830191508360208260051b8501011115610d1057600080fd5b9250929050565b60008060008060408587031215610d2d57600080fd5b843567ffffffffffffffff80821115610d4557600080fd5b610d5188838901610ccb565b90965094506020870135915080821115610d6a57600080fd5b50610d7787828801610ccb565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610dbb57634e487b7160e01b600052601160045260246000fd5b5060010190565b60208082526018908201527f53656e646572206973206e6f74207468652061646d696e2e0000000000000000604082015260600190565b600060208284031215610e0b57600080fd5b5051919050565b600060208284031215610e2457600080fd5b81516107f381610aff56fea164736f6c634300080a000a", + "sourceMap": "463:5691:235:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1252:93;1324:16;;-1:-1:-1;;;1324:16:235;;;;1323:17;1252:93;;179:14:486;;172:22;154:41;;142:2;127:18;1252:93:235;;;;;;;;760:36;;;;;-1:-1:-1;;;;;760:36:235;;;;;;-1:-1:-1;;;;;395:32:486;;;377:51;;365:2;350:18;760:36:235;206:228:486;2295:760:235;;;;;;:::i;:::-;;:::i;:::-;;4282:154;;;;;;:::i;:::-;;:::i;1096:21::-;;;;;-1:-1:-1;;;;;1096:21:235;;;3116:821;;;;;;:::i;:::-;;:::i;651:50::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;651:50:235;;;5617:535;;;;;;:::i;:::-;;:::i;:::-;;;5599:25:486;;;5587:2;5572:18;5617:535:235;5453:177:486;3996:222:235;;;;;;:::i;:::-;;:::i;870:20::-;;;;;-1:-1:-1;;;;;870:20:235;;;4881:626;;;;;;:::i;:::-;;:::i;2295:760::-;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;6383:2:486;3314:201:439;;;6365:21:486;6422:2;6402:18;;;6395:30;6461:34;6441:18;;;6434:62;-1:-1:-1;;;6512:18:486;;;6505:44;6566:19;;3314:201:439;;;;;;;;;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;2579:8:235::1;:15;2557:11;:18;:37;2549:87;;;::::0;-1:-1:-1;;;2549:87:235;;6798:2:486;2549:87:235::1;::::0;::::1;6780:21:486::0;6837:2;6817:18;;;6810:30;6876:34;6856:18;;;6849:62;-1:-1:-1;;;6927:18:486;;;6920:35;6972:19;;2549:87:235::1;6596:401:486::0;2549:87:235::1;2682:9;2677:251;2701:11;:18;2697:1;:22;2677:251;;;2734:18;2755:11;2767:1;2755:14;;;;;;;;:::i;:::-;;;;;;;2734:35;;2777:25;2805:8;2814:1;2805:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;2824:19:235;;::::1;;::::0;;;:7:::1;:19:::0;;;;;;:31;;-1:-1:-1;;;;;;2824:31:235::1;::::0;;::::1;::::0;;::::1;::::0;;2868:53;;7374:34:486;;;7424:18;;;7417:43;7476:18;;;7469:43;2805:11:235;-1:-1:-1;2868:53:235::1;::::0;7324:2:486;7309:18;2868:53:235::1;;;;;;;2726:202;;2721:3;;;;;:::i;:::-;;;;2677:251;;;-1:-1:-1::0;2934:13:235::1;:30:::0;;-1:-1:-1;;;;;2934:30:235;;::::1;-1:-1:-1::0;;;;;;2934:30:235;;::::1;;::::0;;;2970:5:::1;:14:::0;;-1:-1:-1;;;3009:19:235;::::1;2990:38;-1:-1:-1::0;;;;;;2990:38:235;;;2970:14;;::::1;2990:38:::0;::::1;::::0;;3034:6:::1;:16:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3636:99:439;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;7912:36:486;;3710:14:439;;7900:2:486;7885:18;3710:14:439;;;;;;;3636:99;3258:483;2295:760:235;;;;;;:::o;4282:154::-;4558:5;;-1:-1:-1;;;;;4558:5:235;4544:10;:19;4536:56;;;;-1:-1:-1;;;4536:56:235;;;;;;;:::i;:::-;4365:5:::1;::::0;;-1:-1:-1;;;;;4376:16:235;;::::1;-1:-1:-1::0;;;;;;4376:16:235;::::1;::::0;::::1;::::0;;;4403:28:::1;::::0;;4365:5;;;::::1;8524:34:486::0;;;8589:2;8574:18;;8567:43;;;;4403:28:235::1;::::0;8459:18:486;4403:28:235::1;;;;;;;;4340:96;4282:154:::0;:::o;3116:821::-;4558:5;;-1:-1:-1;;;;;4558:5:235;4544:10;:19;4536:56;;;;-1:-1:-1;;;4536:56:235;;;;;;;:::i;:::-;3262:22;;;;;:63:::1;;-1:-1:-1::0;3288:37:235;;::::1;3262:63;3247:150;;;::::0;-1:-1:-1;;;3247:150:235;;8823:2:486;3247:150:235::1;::::0;::::1;8805:21:486::0;8862:2;8842:18;;;8835:30;8901:34;8881:18;;;8874:62;8972:26;8952:18;;;8945:54;9016:19;;3247:150:235::1;8621:420:486::0;3247:150:235::1;3452:9;3447:486;3467:22:::0;;::::1;3447:486;;;3504:18;3525:11;;3537:1;3525:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3575:19:235;;::::1;3547:17;3575:19:::0;;;:7:::1;:19;::::0;;;;;3607:16:::1;::::0;3575:19;;-1:-1:-1;3575:19:235::1;::::0;-1:-1:-1;;;3607:16:235;::::1;;;3603:172;;;-1:-1:-1::0;;;;;3652:23:235;::::1;::::0;3633:142:::1;;;::::0;-1:-1:-1;;;3633:142:235;;9248:2:486;3633:142:235::1;::::0;::::1;9230:21:486::0;9287:2;9267:18;;;9260:30;9326:34;9306:18;;;9299:62;9397:34;9377:18;;;9370:62;-1:-1:-1;;;9448:19:486;;;9441:43;9501:19;;3633:142:235::1;9046:480:486::0;3633:142:235::1;3783:25;3811:8;;3820:1;3811:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3830:19:235;;::::1;;::::0;;;:7:::1;:19;::::0;;;;;;;;:31;;-1:-1:-1;;;;;;3830:31:235::1;::::0;;::::1;::::0;;::::1;::::0;;;3874:52;;7374:34:486;;;7444:15;;;7424:18;;;7417:43;7476:18;;7469:43;;;;3830:31:235;;-1:-1:-1;3874:52:235::1;::::0;7324:2:486;7309:18;3874:52:235::1;;;;;;;3496:437;;;3491:3;;;;;:::i;:::-;;;;3447:486;;;;3116:821:::0;;;;:::o;5617:535::-;5745:6;;5684:7;;-1:-1:-1;;;;;5731:20:235;;;5745:6;;5731:20;5727:37;;;-1:-1:-1;5760:4:235;;5617:535;-1:-1:-1;5617:535:235:o;5727:37::-;-1:-1:-1;;;;;5845:19:235;;;5820:22;5845:19;;;:7;:19;;;;;;;5874:29;;5870:92;;5912:50;;-1:-1:-1;;;5912:50:235;;-1:-1:-1;;;;;395:32:486;;;5912:50:235;;;377:51:486;5912:38:235;;;;;350:18:486;;5912:50:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5905:57;5617:535;-1:-1:-1;;;5617:535:235:o;5870:92::-;5980:13;;-1:-1:-1;;;;;5980:13:235;5972:36;5968:106;;6041:13;;6017:57;;-1:-1:-1;;;6017:57:235;;-1:-1:-1;;;;;395:32:486;;;6017:57:235;;;377:51:486;6041:13:235;;;;6017:45;;350:18:486;;6017:57:235;206:228:486;5968:106:235;6080:67;;-1:-1:-1;;;6080:67:235;;9922:2:486;6080:67:235;;;9904:21:486;9961:2;9941:18;;;9934:30;10000:34;9980:18;;;9973:62;10071:27;10051:18;;;10044:55;10116:19;;6080:67:235;9720:421:486;3996:222:235;4558:5;;-1:-1:-1;;;;;4558:5:235;4544:10;:19;4536:56;;;;-1:-1:-1;;;4536:56:235;;;;;;;:::i;:::-;4102:13:::1;::::0;;-1:-1:-1;;;;;4121:25:235;;::::1;-1:-1:-1::0;;;;;;4121:25:235;::::1;::::0;::::1;::::0;;;4157:56:::1;::::0;;4102:13;;;::::1;8524:34:486::0;;;8589:2;8574:18;;8567:43;;;;4157:56:235::1;::::0;8459:18:486;4157:56:235::1;8312:304:486::0;4881:626:235;4957:7;5014:18;5059:6;-1:-1:-1;;;;;5043:35:235;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5134:6;;5014:67;;-1:-1:-1;;;;;;5120:20:235;;;5134:6;;5120:20;5116:37;;;-1:-1:-1;5149:4:235;;4881:626;-1:-1:-1;;4881:626:235:o;5116:37::-;-1:-1:-1;;;;;5234:19:235;;;5209:22;5234:19;;;:7;:19;;;;;;;5263:29;;5259:75;;5301:33;;-1:-1:-1;;;5301:33:235;;-1:-1:-1;;;;;395:32:486;;;5301:33:235;;;377:51:486;5301:25:235;;;;;350:18:486;;5301:33:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5294:40;4881:626;-1:-1:-1;;;;4881:626:235:o;5259:75::-;5352:13;;-1:-1:-1;;;;;5352:13:235;5344:36;5340:89;;5389:13;;:40;;-1:-1:-1;;;5389:40:235;;-1:-1:-1;;;;;395:32:486;;;5389:40:235;;;377:51:486;5389:13:235;;;;:32;;350:18:486;;5389:40:235;206:228:486;439:127;500:10;495:3;491:20;488:1;481:31;531:4;528:1;521:15;555:4;552:1;545:15;571:275;642:2;636:9;707:2;688:13;;-1:-1:-1;;684:27:486;672:40;;742:18;727:34;;763:22;;;724:62;721:88;;;789:18;;:::i;:::-;825:2;818:22;571:275;;-1:-1:-1;571:275:486:o;851:183::-;911:4;944:18;936:6;933:30;930:56;;;966:18;;:::i;:::-;-1:-1:-1;1011:1:486;1007:14;1023:4;1003:25;;851:183::o;1039:131::-;-1:-1:-1;;;;;1114:31:486;;1104:42;;1094:70;;1160:1;1157;1150:12;1094:70;1039:131;:::o;1175:134::-;1243:20;;1272:31;1243:20;1272:31;:::i;:::-;1175:134;;;:::o;1314:754::-;1385:5;1438:3;1431:4;1423:6;1419:17;1415:27;1405:55;;1456:1;1453;1446:12;1405:55;1492:6;1479:20;1518:4;1542:60;1558:43;1598:2;1558:43;:::i;:::-;1542:60;:::i;:::-;1636:15;;;1722:1;1718:10;;;;1706:23;;1702:32;;;1667:12;;;;1746:15;;;1743:35;;;1774:1;1771;1764:12;1743:35;1810:2;1802:6;1798:15;1822:217;1838:6;1833:3;1830:15;1822:217;;;1918:3;1905:17;1935:31;1960:5;1935:31;:::i;:::-;1979:18;;2017:12;;;;1855;;1822:217;;;-1:-1:-1;2057:5:486;1314:754;-1:-1:-1;;;;;;1314:754:486:o;2073:160::-;2138:20;;2194:13;;2187:21;2177:32;;2167:60;;2223:1;2220;2213:12;2238:1575;2439:6;2447;2455;2463;2471;2479;2532:3;2520:9;2511:7;2507:23;2503:33;2500:53;;;2549:1;2546;2539:12;2500:53;2589:9;2576:23;2618:18;2659:2;2651:6;2648:14;2645:34;;;2675:1;2672;2665:12;2645:34;2713:6;2702:9;2698:22;2688:32;;2758:7;2751:4;2747:2;2743:13;2739:27;2729:55;;2780:1;2777;2770:12;2729:55;2816:2;2803:16;2838:4;2862:60;2878:43;2918:2;2878:43;:::i;2862:60::-;2956:15;;;3038:1;3034:10;;;;3026:19;;3022:28;;;2987:12;;;;3062:19;;;3059:39;;;3094:1;3091;3084:12;3059:39;3118:11;;;;3138:217;3154:6;3149:3;3146:15;3138:217;;;3234:3;3221:17;3251:31;3276:5;3251:31;:::i;:::-;3295:18;;3171:12;;;;3333;;;;3138:217;;;3374:5;-1:-1:-1;;3417:18:486;;3404:32;;-1:-1:-1;;3448:16:486;;;3445:36;;;3477:1;3474;3467:12;3445:36;;3500:80;3572:7;3561:8;3550:9;3546:24;3500:80;:::i;:::-;3490:90;;;3599:38;3633:2;3622:9;3618:18;3599:38;:::i;:::-;3589:48;;3656:38;3690:2;3679:9;3675:18;3656:38;:::i;:::-;3646:48;;3713:36;3744:3;3733:9;3729:19;3713:36;:::i;:::-;3703:46;;3768:39;3802:3;3791:9;3787:19;3768:39;:::i;:::-;3758:49;;2238:1575;;;;;;;;:::o;3818:247::-;3877:6;3930:2;3918:9;3909:7;3905:23;3901:32;3898:52;;;3946:1;3943;3936:12;3898:52;3985:9;3972:23;4004:31;4029:5;4004:31;:::i;4278:367::-;4341:8;4351:6;4405:3;4398:4;4390:6;4386:17;4382:27;4372:55;;4423:1;4420;4413:12;4372:55;-1:-1:-1;4446:20:486;;4489:18;4478:30;;4475:50;;;4521:1;4518;4511:12;4475:50;4558:4;4550:6;4546:17;4534:29;;4618:3;4611:4;4601:6;4598:1;4594:14;4586:6;4582:27;4578:38;4575:47;4572:67;;;4635:1;4632;4625:12;4572:67;4278:367;;;;;:::o;4650:798::-;4797:6;4805;4813;4821;4874:2;4862:9;4853:7;4849:23;4845:32;4842:52;;;4890:1;4887;4880:12;4842:52;4930:9;4917:23;4959:18;5000:2;4992:6;4989:14;4986:34;;;5016:1;5013;5006:12;4986:34;5055:70;5117:7;5108:6;5097:9;5093:22;5055:70;:::i;:::-;5144:8;;-1:-1:-1;5029:96:486;-1:-1:-1;5232:2:486;5217:18;;5204:32;;-1:-1:-1;5248:16:486;;;5245:36;;;5277:1;5274;5267:12;5245:36;;5316:72;5380:7;5369:8;5358:9;5354:24;5316:72;:::i;:::-;4650:798;;;;-1:-1:-1;5407:8:486;-1:-1:-1;;;;4650:798:486:o;7002:127::-;7063:10;7058:3;7054:20;7051:1;7044:31;7094:4;7091:1;7084:15;7118:4;7115:1;7108:15;7523:232;7562:3;-1:-1:-1;;7583:17:486;;7580:140;;;7642:10;7637:3;7633:20;7630:1;7623:31;7677:4;7674:1;7667:15;7705:4;7702:1;7695:15;7580:140;-1:-1:-1;7747:1:486;7736:13;;7523:232::o;7959:348::-;8161:2;8143:21;;;8200:2;8180:18;;;8173:30;8239:26;8234:2;8219:18;;8212:54;8298:2;8283:18;;7959:348::o;9531:184::-;9601:6;9654:2;9642:9;9633:7;9629:23;9625:32;9622:52;;;9670:1;9667;9660:12;9622:52;-1:-1:-1;9693:16:486;;9531:184;-1:-1:-1;9531:184:486:o;10146:251::-;10216:6;10269:2;10257:9;10248:7;10244:23;10240:32;10237:52;;;10285:1;10282;10275:12;10237:52;10317:9;10311:16;10336:31;10361:5;10336:31;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "add(address[],address[])": "9c9192c6", + "admin()": "f851a440", + "canAdminOverwrite()": "656b0fd1", + "changeAdmin(address)": "8f283970", + "defaultOracle()": "80dce169", + "getUnderlyingPrice(address)": "fc57d4df", + "initialize(address[],address[],address,address,bool,address)": "882b92a7", + "oracles(address)": "addd5099", + "price(address)": "aea91078", + "setDefaultOracle(address)": "c44014d2", + "wtoken()": "9c0591c8" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/MasterPriceOracle_Proxy.json b/packages/sdk/deployments/mode/MasterPriceOracle_Proxy.json new file mode 100644 index 0000000000..c8834da562 --- /dev/null +++ b/packages/sdk/deployments/mode/MasterPriceOracle_Proxy.json @@ -0,0 +1,271 @@ +{ + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "transactionIndex": 1, + "gasUsed": "846522", + "logsBloom": "0x08000000000000000000000000000000400000008000000000000000000000000000040000000000000000000000000000000004000080000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000400000000080000000000000800000000000000000000000000000000400000000000000000000000000000000000000000030000000000000000000040000000000000400000000000000000000000000000000080000000000000000000000000000000000000000000000080000", + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4", + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000004e7676b20b86beea9c197be756361680fae3c9ae" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + }, + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0x10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d7669b6bdfdb83066dd7c0ada4b630b25cbc28a", + "logIndex": 1, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + }, + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0x10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126" + ], + "data": "0x000000000000000000000000420000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d7669b6bdfdb83066dd7c0ada4b630b25cbc28a", + "logIndex": 2, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + }, + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + }, + { + "transactionIndex": 1, + "blockNumber": 2097498, + "transactionHash": "0xb8ac77fdafcabd09f795351a9d3f3fd3dc8a1153c57836095e2adb1d353f6223", + "address": "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0xa472b6cbcba4ef2ab08b61ce2d73b7382c6bf627444201f243b2fae96352e9b4" + } + ], + "blockNumber": 2097498, + "cumulativeGasUsed": "893435", + "status": 1, + "byzantium": true + }, + "args": [ + "0x4e7676B20B86Beea9c197bE756361680FaE3C9AE", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0x882b92a700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000420000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000001d7669b6bdfdb83066dd7c0ada4b630b25cbc28a0000000000000000000000001d7669b6bdfdb83066dd7c0ada4b630b25cbc28a" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/OptimizedVaultsRegistry.json b/packages/sdk/deployments/mode/OptimizedVaultsRegistry.json new file mode 100644 index 0000000000..a11523c909 --- /dev/null +++ b/packages/sdk/deployments/mode/OptimizedVaultsRegistry.json @@ -0,0 +1,695 @@ +{ + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "addVault", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getAllVaults", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultBase[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getClaimableRewards", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "string", + "name": "rewardTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "rewardTokenSymbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "rewardTokenDecimals", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + } + ], + "internalType": "struct OptimizedVaultsRegistry.ClaimableRewardsInfo[]", + "name": "rewardsData", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "getLatestVaultExtensions", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultExtension[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVaultsData", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "string", + "name": "assetSymbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "assetDecimals", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "estimatedTotalAssets", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "apr", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adaptersCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isEmergencyStopped", + "type": "bool" + }, + { + "internalType": "uint64", + "name": "performanceFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "depositFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "withdrawalFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "managementFee", + "type": "uint64" + }, + { + "components": [ + { + "internalType": "address", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint64", + "name": "allocation", + "type": "uint64" + }, + { + "internalType": "address", + "name": "market", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "internalType": "struct OptimizedVaultsRegistry.AdapterInfo[]", + "name": "adaptersData", + "type": "tuple[]" + } + ], + "internalType": "struct OptimizedVaultsRegistry.VaultInfo[]", + "name": "vaultsData", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "removeVault", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setEmergencyExit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract OptimizedAPRVaultExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "name": "setLatestVaultExtensions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "vaults", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultBase", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "transactionIndex": 1, + "gasUsed": "771714", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800800000200000000000000000000000000000000000000000000100000000000000000000000200000000000000000000000000002000001000000000000000000000000000000020000020000000000000000000800008000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000080020800000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85", + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000002ddf3ddfe856d1a4e5dbcb324194e2a622aed83c" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + }, + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + }, + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + }, + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + }, + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + } + ], + "blockNumber": 2097627, + "cumulativeGasUsed": "818627", + "status": 1, + "byzantium": true + }, + "args": [ + "0x2DDF3DdFE856D1A4E5DBcb324194E2a622AeD83C", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0x8129fc1c" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [] + }, + "implementation": "0x2DDF3DdFE856D1A4E5DBcb324194E2a622AeD83C", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/OptimizedVaultsRegistry_Implementation.json b/packages/sdk/deployments/mode/OptimizedVaultsRegistry_Implementation.json new file mode 100644 index 0000000000..7305fddd50 --- /dev/null +++ b/packages/sdk/deployments/mode/OptimizedVaultsRegistry_Implementation.json @@ -0,0 +1,1451 @@ +{ + "address": "0x2DDF3DdFE856D1A4E5DBcb324194E2a622AeD83C", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "addVault", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getAllVaults", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultBase[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getClaimableRewards", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "string", + "name": "rewardTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "rewardTokenSymbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "rewardTokenDecimals", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + } + ], + "internalType": "struct OptimizedVaultsRegistry.ClaimableRewardsInfo[]", + "name": "rewardsData", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "getLatestVaultExtensions", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultExtension[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVaultsData", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "string", + "name": "assetSymbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "assetDecimals", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "estimatedTotalAssets", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "apr", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adaptersCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isEmergencyStopped", + "type": "bool" + }, + { + "internalType": "uint64", + "name": "performanceFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "depositFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "withdrawalFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "managementFee", + "type": "uint64" + }, + { + "components": [ + { + "internalType": "address", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint64", + "name": "allocation", + "type": "uint64" + }, + { + "internalType": "address", + "name": "market", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "internalType": "struct OptimizedVaultsRegistry.AdapterInfo[]", + "name": "adaptersData", + "type": "tuple[]" + } + ], + "internalType": "struct OptimizedVaultsRegistry.VaultInfo[]", + "name": "vaultsData", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "removeVault", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setEmergencyExit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract OptimizedAPRVaultExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "name": "setLatestVaultExtensions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "vaults", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultBase", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xa28d49e575a1ad5d66e8b6eed1ba1383cd4dc68f3424351f771a3f274f905966", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x2DDF3DdFE856D1A4E5DBcb324194E2a622AeD83C", + "transactionIndex": 1, + "gasUsed": "2017167", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x26b587ef5809f910552741f7582212df85707d9f90b0559e89edd3b547a862f1", + "transactionHash": "0xa28d49e575a1ad5d66e8b6eed1ba1383cd4dc68f3424351f771a3f274f905966", + "logs": [], + "blockNumber": 2097624, + "cumulativeGasUsed": "2064080", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addVault", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllVaults", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultBase[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getClaimableRewards", + "outputs": [ + { + "internalType": "struct OptimizedVaultsRegistry.ClaimableRewardsInfo[]", + "name": "rewardsData", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "string", + "name": "rewardTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "rewardTokenSymbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "rewardTokenDecimals", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getLatestVaultExtensions", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultExtension[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getVaultsData", + "outputs": [ + { + "internalType": "struct OptimizedVaultsRegistry.VaultInfo[]", + "name": "vaultsData", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "string", + "name": "assetSymbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "assetDecimals", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "estimatedTotalAssets", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "apr", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adaptersCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isEmergencyStopped", + "type": "bool" + }, + { + "internalType": "uint64", + "name": "performanceFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "depositFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "withdrawalFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "managementFee", + "type": "uint64" + }, + { + "internalType": "struct OptimizedVaultsRegistry.AdapterInfo[]", + "name": "adaptersData", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint64", + "name": "allocation", + "type": "uint64" + }, + { + "internalType": "address", + "name": "market", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ] + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeVault", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "setEmergencyExit" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract OptimizedAPRVaultExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setLatestVaultExtensions" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "vaults", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultBase", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/vault/OptimizedVaultsRegistry.sol": "OptimizedVaultsRegistry" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/angle/IGenericLender.sol": { + "keccak256": "0xf6dbe403993aa3d7815ef521a81c7b62eab0df3dba1ff811c52ea4f8fb9b3523", + "urls": [ + "bzz-raw://2a9bd82fc998b881bf280565daaf0555ad2e273d3834bd65cb1b1518eef3bf45", + "dweb:/ipfs/QmPkwLXGeno5jgqTdq6SRxE72RwUbFcokT4B9t5P5AFZQQ" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/CompoundMarketERC4626.sol": { + "keccak256": "0xd87ceedd3a7eb53ec1ecd0401a277fdc788e1513adaf7c6bde09e98866dfe49d", + "urls": [ + "bzz-raw://df95e6f5b2f8ae56de60868a447a71ec5ddabe319fd03f527f9c453243e7210d", + "dweb:/ipfs/Qmd9RLgLTSXszS36oXPgQVmwV16uvAtC5NaAMsp5x1u68T" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/IonicERC4626.sol": { + "keccak256": "0x58e5f427d74cca82c405d61bab2a109eb335f8ee76c24f05290252fffd787689", + "urls": [ + "bzz-raw://9d30d6e58c749625e69a9f75b5d57538b881aa4c912d0088356f3f8fd68c8c7d", + "dweb:/ipfs/QmVh7p77JMFaExWEvTRNrH72bLMAqWVGf37c1rpuxoZwKA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheel.sol": { + "keccak256": "0x8d4dc0e54619cbf9d7a503c9664163c55dbfbd43dc4ec6c5156711a5fd6bee34", + "urls": [ + "bzz-raw://90e2282f7bc72e65c084f40eee44e77f5a59a0702b66222595c417d078094cd5", + "dweb:/ipfs/QmY6jo9jnqeQsD8S6vSSWWT7NJdsXpVQZQh6Vaq6ZZo5QA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/vault/IVault.sol": { + "keccak256": "0xebd52464c8c17da0dff573bd79369adb53fa58a332ea618f6969344cbeb01a2d", + "urls": [ + "bzz-raw://7da9fdad665fc69ff408c37f80ef1d7aa648ca01b78c77639558a722b567ede6", + "dweb:/ipfs/QmYhXGtpDXKZ4yhSWDGna7F3JZTTYA6BJZDyWnFZoHWQn1" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultBase.sol": { + "keccak256": "0x20d3308297d0156d451fd754e275c44490ce5dd92a96983f52e5cc026319e45b", + "urls": [ + "bzz-raw://45ba1924afeb328961df974702ec762a6dfdcbdd9ab68c9ed1d020e54d1a00aa", + "dweb:/ipfs/QmdhoDfGjPgPPCdFX494gT3T6G1h8Ss93aj1MJS4wA4mfs" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultExtension.sol": { + "keccak256": "0x2f5d71c6f5c12a377f92c7a6c745f0d2186cf790bfcc3331038b90c6f2165045", + "urls": [ + "bzz-raw://8f9b7a034982e4d38740c12ea46f1df40f8e9d2fe7cc9469117390aae6b48222", + "dweb:/ipfs/QmW157vVFGVeJ3eCyZxac2oUXi5yiNoQTzCakEZcxJjRPv" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultFirstExtension.sol": { + "keccak256": "0x4aab91cd3821d059dd4a22026720f61e1653e1fcdfa4e0c9ba7145aaf2c0e551", + "urls": [ + "bzz-raw://62a627b35e1efb71963e7e250f1338bc566d69d5e0a96ccbe983bfa8e9f5bc60", + "dweb:/ipfs/QmZjDo5CQ256uFKRNjm2GPSbo4RWJtc5LDscKbmME8QU11" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultSecondExtension.sol": { + "keccak256": "0x0e344758fe17a59a39c4ff482b54ff1132b2cec445ecdc9f42eaabb49a75762b", + "urls": [ + "bzz-raw://9003ad6c7fd20b3a18655e4958fdeba7a73b2c1cb5a4a34ee5f1fa69b7df3b18", + "dweb:/ipfs/QmWPKhTdKksqpHKWLiwL192C5MGkSqKPGfieVjCdX6dt8a" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultStorage.sol": { + "keccak256": "0x340d0c48515f5ba15552bca8b9cdecaf7ca1459124bdd30e853dfb8c34413fe3", + "urls": [ + "bzz-raw://770a3f53cb365924957995fc993bbdbdd8442b8743ce788e743a114bf7cbf99d", + "dweb:/ipfs/QmV9qLTmZcVRnPN9CDWyCDK9rCXjQhzXVGjBd7Z2hSFRSn" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedVaultsRegistry.sol": { + "keccak256": "0xbf823e701e83fb0f6038d08fe51f3a8dff3ba82ceaf384c4c862553ee6021853", + "urls": [ + "bzz-raw://246122dab59fdbf7620abdb1a29dfc5f452204627947c556749e0fd16eb3f172", + "dweb:/ipfs/QmNm7E4eE2Ev5F4AizDNcxYBnAqyWcU7Sbf9kdMBZ8kboo" + ], + "license": null + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/rewards/BaseFlywheelRewards.sol": { + "keccak256": "0xfc327d6197eefeb73d09de1091d510415de4b326d4059149c20bd1b762d300f7", + "urls": [ + "bzz-raw://3ef5c4b546fd9a7880677fe34654008a501b03ea50f66558aeaeee2c456aec31", + "dweb:/ipfs/QmQajrWGJPso48b55GE8ASXdCBXbAQGmdfXjWbEa9ZDztA" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/rewards/FlywheelDynamicRewards.sol": { + "keccak256": "0xd926ed316540e5fa7b78549119ce0349d317dcbe0d5ea319455828c67901f254", + "urls": [ + "bzz-raw://81d2252b0bd131ceb2f10cd8262840853fe6cc8202f56de1a040b32922993dc7", + "dweb:/ipfs/QmYDejAsPQnLoGH5djUbhcbCT2BHqtGBwULPJB2gsNNqEr" + ], + "license": "AGPL-3.0-only" + }, + "lib/fuse-flywheel/src/rewards/FuseFlywheelDynamicRewards.sol": { + "keccak256": "0xefe1448525f2c0420e5a7733a759f045090da4f4e826dc997249e0276f2a399d", + "urls": [ + "bzz-raw://2a78fe582474df4181ed0e1870dcfe088e9ddf69bf349bf3d4095dc99ea7ac77", + "dweb:/ipfs/QmVJWDYwLA5vRsJiLam7eWCxbJ1JRwaGkohL5KK9tsN7b8" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/interfaces/IERC4626Upgradeable.sol": { + "keccak256": "0xe3d54e1a1a10fbc86fdfaf9100ba99c9c808588fd20d0c919457b903b5cae61a", + "urls": [ + "bzz-raw://7e2f616c3ebcf6db05b9242b870f69bf902533cc3248e352b0e1e1a04d6da8b8", + "dweb:/ipfs/QmbNV3EejvPoLWVXTjLRyHyFnaxdQoxpFkXMbZbPvDf7eq" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol": { + "keccak256": "0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250", + "urls": [ + "bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad", + "dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol": { + "keccak256": "0xefe5b03cf4147c27e7e38a1b8ddb3e0dc7f0ba8f6be71627d962fa91c98943dd", + "urls": [ + "bzz-raw://d41b6359e78c5a2ce4c9d7697a876bcb307f05ddd9f4695831d70efcd425eebc", + "dweb:/ipfs/QmbmbxDte15Thu4pWG4dNYRHVSbXZZEDRSWfg8haKNjNJp" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC4626Upgradeable.sol": { + "keccak256": "0x82dd1556d6774b8bdaec0fb70d09c9d9cb0d75e9f2ffc183bb09a16b86d7c598", + "urls": [ + "bzz-raw://c600ba91f853e92cd945ba0e9ebc1d66e0b0ff8f7a0a7b46aee7e1c7700ce2fd", + "dweb:/ipfs/QmUGysmaKrxkja24Tb2Ur1NW1SwNDg8fpeaU4L1MVkkY3u" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/math/MathUpgradeable.sol": { + "keccak256": "0xb49137b771712774960cca0acf428499e2aa85f179fe03712e5c06c5a6ab6316", + "urls": [ + "bzz-raw://ec66760482c33d84dda577e3a7a4b81000a92e37cae5c8b55339e2d83abfce03", + "dweb:/ipfs/QmVDSFsp9dnW8P92Yrq2jAjr9piKke8gjuZX5QjtFuZRfx" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/FixedPointMathLib.sol": { + "keccak256": "0xab8ca9afbb0f7412e1408d4f111b53cc00813bc752236638ad336050ea2188f8", + "urls": [ + "bzz-raw://cd892e4743a124063b7bc590c6f88f209a18a4831b18045afd843264fa75427f", + "dweb:/ipfs/QmRunGD7E8enP5oZKiN8DxvAJew7J3jaz1iiHTFZj5Ghfc" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50612387806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063e30c397811610066578063e30c397814610211578063f2fde38b14610224578063fc4d33f914610237578063fcf2d0ad1461023f57600080fd5b80638da5cb5b146101c557806397331bf9146101d6578063ceb68c23146101eb578063d9d17645146101fe57600080fd5b8063715018a6116100d3578063715018a6146101775780638129fc1c1461017f578063857ecda2146101875780638c64ea4a1461019a57600080fd5b8063256b5a0214610105578063308e401e1461012d5780634a672a541461014d5780636e96dfd714610162575b600080fd5b610118610113366004611c3b565b610247565b60405190151581526020015b60405180910390f35b61014061013b366004611c3b565b610305565b6040516101249190611cb7565b610155610973565b6040516101249190611e02565b610175610170366004611c3b565b61125d565b005b6101756112c7565b61017561130f565b610175610195366004611f27565b611421565b6101ad6101a8366004611fae565b611452565b6040516001600160a01b039091168152602001610124565b6033546001600160a01b03166101ad565b6101de61147c565b6040516101249190611fc7565b6101186101f9366004611c3b565b6114de565b6101de61020c366004611c3b565b6115ff565b6065546101ad906001600160a01b031681565b610175610232366004611c3b565b611675565b6101756116e6565b6101756117fa565b6000610251611a7b565b60005b6066548110156102b157826001600160a01b03166066828154811061027b5761027b612014565b6000918252602090912001546001600160a01b0316141561029f5750600092915050565b806102a981612040565b915050610254565b505060668054600180820183556000929092527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540180546001600160a01b0319166001600160a01b0384161790555b919050565b60606000805b6066548110156104265760006066828154811061032a5761032a612014565b60009182526020918290200154604080516319c42cfb60e11b815290516001600160a01b039092169263338859f6926004808401938290030181865afa158015610378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039c919061205b565b6001600160a01b03166374fd2c386040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261040191908101906120be565b9050805183610410919061216f565b925050808061041e90612040565b91505061030b565b50806001600160401b0381111561043f5761043f612078565b6040519080825280602002602001820160405280156104a557816020015b6040805160e081018252600080825260208083018290529282018190526060808301819052608083015260a0820181905260c0820152825260001990920191018161045d5790505b509150506000805b60665481101561096c576000606682815481106104cc576104cc612014565b6000918252602080832090910154604080516319c42cfb60e11b815290516001600160a01b039092169450849263338859f6926004808401938290030181865afa15801561051e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610542919061205b565b6001600160a01b03166374fd2c386040518163ffffffff1660e01b8152600401600060405180830381865afa15801561057f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105a791908101906120be565b805190915060005b818110156109495760008382815181106105cb576105cb612014565b60200260200101519050848883896105e3919061216f565b815181106105f3576105f3612014565b6020908102919091018101516001600160a01b039092169101528088610619848a61216f565b8151811061062957610629612014565b60209081029190910101516001600160a01b039182169052604051632e6f912b60e21b815286821660048201528a821660248201529082169063b9be44ac906044016020604051808303816000875af115801561068a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ae9190612187565b886106b9848a61216f565b815181106106c9576106c9612014565b602002602001015160c00181815250506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d919061205b565b9050808961074b858b61216f565b8151811061075b5761075b612014565b6020026020010151604001906001600160a01b031690816001600160a01b031681525050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107e591908101906121a0565b896107f0858b61216f565b8151811061080057610800612014565b602002602001015160600181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087591908101906121a0565b89610880858b61216f565b8151811061089057610890612014565b602002602001015160800181905250806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190612233565b8961090c858b61216f565b8151811061091c5761091c612014565b602002602001015160a0019060ff16908160ff16815250505050808061094190612040565b9150506105af565b50610954818661216f565b9450505050808061096490612040565b9150506104ad565b5050919050565b6066546060906001600160401b0381111561099057610990612078565b604051908082528060200260200182016040528015610a2957816020015b604080516101a08101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201526101808101919091528152602001906001900390816109ae5790505b50905060005b60665481101561125957600060668281548110610a4e57610a4e612014565b6000918252602091829020015460408051632d50845360e21b815290516001600160a01b039092169263b542114c926004808401938290030181865afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac0919061205b565b9050600060668381548110610ad757610ad7612014565b6000918252602091829020015460408051637c7a561b60e01b815290516001600160a01b0390921692637c7a561b926004808401938290030181865afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190612233565b905060008160ff166001600160401b03811115610b6857610b68612078565b604051908082528060200260200182016040528015610bba57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610b865790505b50905060005b8260ff16811015610e115760008060668781548110610be157610be1612014565b6000918252602090912001546040516313bd406b60e21b8152600481018590526001600160a01b0390911690634ef501ac906024016040805180830381865afa158015610c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c56919061226d565b915091506000826001600160a01b03166380f556056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbe919061205b565b905082858581518110610cd357610cd3612014565b6020026020010151600001906001600160a01b031690816001600160a01b03168152505081858581518110610d0a57610d0a612014565b6020026020010151602001906001600160401b031690816001600160401b03168152505080858581518110610d4157610d41612014565b6020026020010151604001906001600160a01b031690816001600160a01b031681525050806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc7919061205b565b858581518110610dd957610dd9612014565b6020026020010151606001906001600160a01b031690816001600160a01b03168152505050505080610e0a90612040565b9050610bc0565b50600080600080866001600160a01b0316639af1d35a6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7a91906122a2565b9350935093509350604051806101a00160405280886001600160a01b03168152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610edb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eff919061205b565b6001600160a01b03168152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f919061205b565b6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fd491908101906121a0565b8152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061205b565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c9190612233565b60ff168152602001886001600160a01b031663efbb5cb06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111069190612187565b8152602001886001600160a01b0316635a5cd45e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190612187565b81526020018760ff168152602001886001600160a01b0316635641ec036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dd91906122f6565b15158152602001856001600160401b03168152602001846001600160401b03168152602001836001600160401b03168152602001826001600160401b031681526020018681525089898151811061123657611236612014565b6020026020010181905250505050505050508061125290612040565b9050610a2f565b5090565b611265611a7b565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6112cf611a7b565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b600054610100900460ff161580801561132f5750600054600160ff909116105b806113495750303b158015611349575060005460ff166001145b6113ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611306565b6000805460ff1916600117905580156113cf576000805461ff0019166101001790555b6113d833611ad7565b801561141e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b611429611a7b565b6001600160a01b038316600090815260676020526040902061144c908383611bb7565b50505050565b6066818154811061146257600080fd5b6000918252602090912001546001600160a01b0316905081565b606060668054806020026020016040519081016040528092919081815260200182805480156114d457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114b6575b5050505050905090565b60006114e8611a7b565b60005b6066548110156115f657826001600160a01b03166066828154811061151257611512612014565b6000918252602090912001546001600160a01b031614156115e4576066805461153d90600190612318565b8154811061154d5761154d612014565b600091825260209091200154606680546001600160a01b03909216918390811061157957611579612014565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055606680546115b290600190612318565b815481106115c2576115c2612014565b600091825260209091200180546001600160a01b031916905550600192915050565b806115ee81612040565b9150506114eb565b50600092915050565b6001600160a01b03811660009081526067602090815260409182902080548351818402810184019094528084526060939283018282801561166957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161164b575b50505050509050919050565b61167d611a7b565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146117385760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401611306565b600061174c6033546001600160a01b031690565b6065549091506001600160a01b031661176481611b0b565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91016112bb565b611802611a7b565b60005b60665481101561141e5760006066828154811061182457611824612014565b6000918252602091829020015460408051637c7a561b60e01b815290516001600160a01b0390921692637c7a561b926004808401938290030181865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190612233565b905060005b8160ff16811015611991576000606684815481106118bb576118bb612014565b6000918252602090912001546040516313bd406b60e21b8152600481018490526001600160a01b0390911690634ef501ac906024016040805180830381865afa15801561190c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611930919061226d565b509050806001600160a01b031663283579786040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561196e57600080fd5b505af192505050801561197f575060015b505061198a81612040565b905061189b565b50606682815481106119a5576119a5612014565b6000918252602091829020015460408051632d50845360e21b815290516001600160a01b039092169263b542114c926004808401938290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a17919061205b565b6001600160a01b031663fcf2d0ad6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b505050505080611a7490612040565b9050611805565b6033546001600160a01b03163314611ad55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611306565b565b600054610100900460ff16611afe5760405162461bcd60e51b81526004016113069061232f565b611b06611b5d565b61141e815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611b845760405162461bcd60e51b81526004016113069061232f565b611ad5600054610100900460ff16611bae5760405162461bcd60e51b81526004016113069061232f565b611ad533611b0b565b828054828255906000526020600020908101928215611c0a579160200282015b82811115611c0a5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611bd7565b506112599291505b808211156112595760008155600101611c12565b6001600160a01b038116811461141e57600080fd5b600060208284031215611c4d57600080fd5b8135611c5881611c26565b9392505050565b60005b83811015611c7a578181015183820152602001611c62565b8381111561144c5750506000910152565b60008151808452611ca3816020860160208601611c5f565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611d8257888303603f19018552815180516001600160a01b0390811685528882015181168986015287820151168785015260608082015160e08287018190529190611d2f83880182611c8b565b9250505060808083015186830382880152611d4a8382611c8b565b9250505060a080830151611d628288018260ff169052565b505060c09182015194909101939093529386019390860190600101611cde565b509098975050505050505050565b600081518084526020808501945080840160005b83811015611df757815180516001600160a01b039081168952848201516001600160401b0316858a01526040808301518216908a0152606091820151169088015260809096019590820190600101611da4565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611d8257888303603f19018552815180516001600160a01b031684526101a0818901516001600160a01b038116868b015250878201518189870152611e7482870182611c8b565b915050606080830151611e8b8288018260ff169052565b50506080828101519086015260a0808301519086015260c0808301519086015260e080830151151590860152610100808301516001600160401b0390811691870191909152610120808401518216908701526101408084015182169087015261016080840151909116908601526101809182015185820392860192909252611f138183611d90565b968901969450505090860190600101611e29565b600080600060408486031215611f3c57600080fd5b8335611f4781611c26565b925060208401356001600160401b0380821115611f6357600080fd5b818601915086601f830112611f7757600080fd5b813581811115611f8657600080fd5b8760208260051b8501011115611f9b57600080fd5b6020830194508093505050509250925092565b600060208284031215611fc057600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156120085783516001600160a01b031683529284019291840191600101611fe3565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156120545761205461202a565b5060010190565b60006020828403121561206d57600080fd5b8151611c5881611c26565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156120b6576120b6612078565b604052919050565b600060208083850312156120d157600080fd5b82516001600160401b03808211156120e857600080fd5b818501915085601f8301126120fc57600080fd5b81518181111561210e5761210e612078565b8060051b915061211f84830161208e565b818152918301840191848101908884111561213957600080fd5b938501935b83851015612163578451925061215383611c26565b828252938501939085019061213e565b98975050505050505050565b600082198211156121825761218261202a565b500190565b60006020828403121561219957600080fd5b5051919050565b6000602082840312156121b257600080fd5b81516001600160401b03808211156121c957600080fd5b818401915084601f8301126121dd57600080fd5b8151818111156121ef576121ef612078565b612202601f8201601f191660200161208e565b915080825285602082850101111561221957600080fd5b61222a816020840160208601611c5f565b50949350505050565b60006020828403121561224557600080fd5b815160ff81168114611c5857600080fd5b80516001600160401b038116811461030057600080fd5b6000806040838503121561228057600080fd5b825161228b81611c26565b915061229960208401612256565b90509250929050565b600080600080608085870312156122b857600080fd5b6122c185612256565b93506122cf60208601612256565b92506122dd60408601612256565b91506122eb60608601612256565b905092959194509250565b60006020828403121561230857600080fd5b81518015158114611c5857600080fd5b60008282101561232a5761232a61202a565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "466:5443:184:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063e30c397811610066578063e30c397814610211578063f2fde38b14610224578063fc4d33f914610237578063fcf2d0ad1461023f57600080fd5b80638da5cb5b146101c557806397331bf9146101d6578063ceb68c23146101eb578063d9d17645146101fe57600080fd5b8063715018a6116100d3578063715018a6146101775780638129fc1c1461017f578063857ecda2146101875780638c64ea4a1461019a57600080fd5b8063256b5a0214610105578063308e401e1461012d5780634a672a541461014d5780636e96dfd714610162575b600080fd5b610118610113366004611c3b565b610247565b60405190151581526020015b60405180910390f35b61014061013b366004611c3b565b610305565b6040516101249190611cb7565b610155610973565b6040516101249190611e02565b610175610170366004611c3b565b61125d565b005b6101756112c7565b61017561130f565b610175610195366004611f27565b611421565b6101ad6101a8366004611fae565b611452565b6040516001600160a01b039091168152602001610124565b6033546001600160a01b03166101ad565b6101de61147c565b6040516101249190611fc7565b6101186101f9366004611c3b565b6114de565b6101de61020c366004611c3b565b6115ff565b6065546101ad906001600160a01b031681565b610175610232366004611c3b565b611675565b6101756116e6565b6101756117fa565b6000610251611a7b565b60005b6066548110156102b157826001600160a01b03166066828154811061027b5761027b612014565b6000918252602090912001546001600160a01b0316141561029f5750600092915050565b806102a981612040565b915050610254565b505060668054600180820183556000929092527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540180546001600160a01b0319166001600160a01b0384161790555b919050565b60606000805b6066548110156104265760006066828154811061032a5761032a612014565b60009182526020918290200154604080516319c42cfb60e11b815290516001600160a01b039092169263338859f6926004808401938290030181865afa158015610378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039c919061205b565b6001600160a01b03166374fd2c386040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261040191908101906120be565b9050805183610410919061216f565b925050808061041e90612040565b91505061030b565b50806001600160401b0381111561043f5761043f612078565b6040519080825280602002602001820160405280156104a557816020015b6040805160e081018252600080825260208083018290529282018190526060808301819052608083015260a0820181905260c0820152825260001990920191018161045d5790505b509150506000805b60665481101561096c576000606682815481106104cc576104cc612014565b6000918252602080832090910154604080516319c42cfb60e11b815290516001600160a01b039092169450849263338859f6926004808401938290030181865afa15801561051e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610542919061205b565b6001600160a01b03166374fd2c386040518163ffffffff1660e01b8152600401600060405180830381865afa15801561057f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105a791908101906120be565b805190915060005b818110156109495760008382815181106105cb576105cb612014565b60200260200101519050848883896105e3919061216f565b815181106105f3576105f3612014565b6020908102919091018101516001600160a01b039092169101528088610619848a61216f565b8151811061062957610629612014565b60209081029190910101516001600160a01b039182169052604051632e6f912b60e21b815286821660048201528a821660248201529082169063b9be44ac906044016020604051808303816000875af115801561068a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ae9190612187565b886106b9848a61216f565b815181106106c9576106c9612014565b602002602001015160c00181815250506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d919061205b565b9050808961074b858b61216f565b8151811061075b5761075b612014565b6020026020010151604001906001600160a01b031690816001600160a01b031681525050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107e591908101906121a0565b896107f0858b61216f565b8151811061080057610800612014565b602002602001015160600181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087591908101906121a0565b89610880858b61216f565b8151811061089057610890612014565b602002602001015160800181905250806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190612233565b8961090c858b61216f565b8151811061091c5761091c612014565b602002602001015160a0019060ff16908160ff16815250505050808061094190612040565b9150506105af565b50610954818661216f565b9450505050808061096490612040565b9150506104ad565b5050919050565b6066546060906001600160401b0381111561099057610990612078565b604051908082528060200260200182016040528015610a2957816020015b604080516101a08101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201526101808101919091528152602001906001900390816109ae5790505b50905060005b60665481101561125957600060668281548110610a4e57610a4e612014565b6000918252602091829020015460408051632d50845360e21b815290516001600160a01b039092169263b542114c926004808401938290030181865afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac0919061205b565b9050600060668381548110610ad757610ad7612014565b6000918252602091829020015460408051637c7a561b60e01b815290516001600160a01b0390921692637c7a561b926004808401938290030181865afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190612233565b905060008160ff166001600160401b03811115610b6857610b68612078565b604051908082528060200260200182016040528015610bba57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610b865790505b50905060005b8260ff16811015610e115760008060668781548110610be157610be1612014565b6000918252602090912001546040516313bd406b60e21b8152600481018590526001600160a01b0390911690634ef501ac906024016040805180830381865afa158015610c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c56919061226d565b915091506000826001600160a01b03166380f556056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbe919061205b565b905082858581518110610cd357610cd3612014565b6020026020010151600001906001600160a01b031690816001600160a01b03168152505081858581518110610d0a57610d0a612014565b6020026020010151602001906001600160401b031690816001600160401b03168152505080858581518110610d4157610d41612014565b6020026020010151604001906001600160a01b031690816001600160a01b031681525050806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc7919061205b565b858581518110610dd957610dd9612014565b6020026020010151606001906001600160a01b031690816001600160a01b03168152505050505080610e0a90612040565b9050610bc0565b50600080600080866001600160a01b0316639af1d35a6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7a91906122a2565b9350935093509350604051806101a00160405280886001600160a01b03168152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610edb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eff919061205b565b6001600160a01b03168152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f919061205b565b6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fd491908101906121a0565b8152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061205b565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c9190612233565b60ff168152602001886001600160a01b031663efbb5cb06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111069190612187565b8152602001886001600160a01b0316635a5cd45e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190612187565b81526020018760ff168152602001886001600160a01b0316635641ec036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dd91906122f6565b15158152602001856001600160401b03168152602001846001600160401b03168152602001836001600160401b03168152602001826001600160401b031681526020018681525089898151811061123657611236612014565b6020026020010181905250505050505050508061125290612040565b9050610a2f565b5090565b611265611a7b565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6112cf611a7b565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b600054610100900460ff161580801561132f5750600054600160ff909116105b806113495750303b158015611349575060005460ff166001145b6113ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611306565b6000805460ff1916600117905580156113cf576000805461ff0019166101001790555b6113d833611ad7565b801561141e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b611429611a7b565b6001600160a01b038316600090815260676020526040902061144c908383611bb7565b50505050565b6066818154811061146257600080fd5b6000918252602090912001546001600160a01b0316905081565b606060668054806020026020016040519081016040528092919081815260200182805480156114d457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114b6575b5050505050905090565b60006114e8611a7b565b60005b6066548110156115f657826001600160a01b03166066828154811061151257611512612014565b6000918252602090912001546001600160a01b031614156115e4576066805461153d90600190612318565b8154811061154d5761154d612014565b600091825260209091200154606680546001600160a01b03909216918390811061157957611579612014565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055606680546115b290600190612318565b815481106115c2576115c2612014565b600091825260209091200180546001600160a01b031916905550600192915050565b806115ee81612040565b9150506114eb565b50600092915050565b6001600160a01b03811660009081526067602090815260409182902080548351818402810184019094528084526060939283018282801561166957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161164b575b50505050509050919050565b61167d611a7b565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146117385760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401611306565b600061174c6033546001600160a01b031690565b6065549091506001600160a01b031661176481611b0b565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91016112bb565b611802611a7b565b60005b60665481101561141e5760006066828154811061182457611824612014565b6000918252602091829020015460408051637c7a561b60e01b815290516001600160a01b0390921692637c7a561b926004808401938290030181865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190612233565b905060005b8160ff16811015611991576000606684815481106118bb576118bb612014565b6000918252602090912001546040516313bd406b60e21b8152600481018490526001600160a01b0390911690634ef501ac906024016040805180830381865afa15801561190c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611930919061226d565b509050806001600160a01b031663283579786040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561196e57600080fd5b505af192505050801561197f575060015b505061198a81612040565b905061189b565b50606682815481106119a5576119a5612014565b6000918252602091829020015460408051632d50845360e21b815290516001600160a01b039092169263b542114c926004808401938290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a17919061205b565b6001600160a01b031663fcf2d0ad6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b505050505080611a7490612040565b9050611805565b6033546001600160a01b03163314611ad55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611306565b565b600054610100900460ff16611afe5760405162461bcd60e51b81526004016113069061232f565b611b06611b5d565b61141e815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611b845760405162461bcd60e51b81526004016113069061232f565b611ad5600054610100900460ff16611bae5760405162461bcd60e51b81526004016113069061232f565b611ad533611b0b565b828054828255906000526020600020908101928215611c0a579160200282015b82811115611c0a5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611bd7565b506112599291505b808211156112595760008155600101611c12565b6001600160a01b038116811461141e57600080fd5b600060208284031215611c4d57600080fd5b8135611c5881611c26565b9392505050565b60005b83811015611c7a578181015183820152602001611c62565b8381111561144c5750506000910152565b60008151808452611ca3816020860160208601611c5f565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611d8257888303603f19018552815180516001600160a01b0390811685528882015181168986015287820151168785015260608082015160e08287018190529190611d2f83880182611c8b565b9250505060808083015186830382880152611d4a8382611c8b565b9250505060a080830151611d628288018260ff169052565b505060c09182015194909101939093529386019390860190600101611cde565b509098975050505050505050565b600081518084526020808501945080840160005b83811015611df757815180516001600160a01b039081168952848201516001600160401b0316858a01526040808301518216908a0152606091820151169088015260809096019590820190600101611da4565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611d8257888303603f19018552815180516001600160a01b031684526101a0818901516001600160a01b038116868b015250878201518189870152611e7482870182611c8b565b915050606080830151611e8b8288018260ff169052565b50506080828101519086015260a0808301519086015260c0808301519086015260e080830151151590860152610100808301516001600160401b0390811691870191909152610120808401518216908701526101408084015182169087015261016080840151909116908601526101809182015185820392860192909252611f138183611d90565b968901969450505090860190600101611e29565b600080600060408486031215611f3c57600080fd5b8335611f4781611c26565b925060208401356001600160401b0380821115611f6357600080fd5b818601915086601f830112611f7757600080fd5b813581811115611f8657600080fd5b8760208260051b8501011115611f9b57600080fd5b6020830194508093505050509250925092565b600060208284031215611fc057600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156120085783516001600160a01b031683529284019291840191600101611fe3565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156120545761205461202a565b5060010190565b60006020828403121561206d57600080fd5b8151611c5881611c26565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156120b6576120b6612078565b604052919050565b600060208083850312156120d157600080fd5b82516001600160401b03808211156120e857600080fd5b818501915085601f8301126120fc57600080fd5b81518181111561210e5761210e612078565b8060051b915061211f84830161208e565b818152918301840191848101908884111561213957600080fd5b938501935b83851015612163578451925061215383611c26565b828252938501939085019061213e565b98975050505050505050565b600082198211156121825761218261202a565b500190565b60006020828403121561219957600080fd5b5051919050565b6000602082840312156121b257600080fd5b81516001600160401b03808211156121c957600080fd5b818401915084601f8301126121dd57600080fd5b8151818111156121ef576121ef612078565b612202601f8201601f191660200161208e565b915080825285602082850101111561221957600080fd5b61222a816020840160208601611c5f565b50949350505050565b60006020828403121561224557600080fd5b815160ff81168114611c5857600080fd5b80516001600160401b038116811461030057600080fd5b6000806040838503121561228057600080fd5b825161228b81611c26565b915061229960208401612256565b90509250929050565b600080600080608085870312156122b857600080fd5b6122c185612256565b93506122cf60208601612256565b92506122dd60408601612256565b91506122eb60608601612256565b905092959194509250565b60006020828403121561230857600080fd5b81518015158114611c5857600080fd5b60008282101561232a5761232a61202a565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "466:5443:184:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1166:257;;;;;;:::i;:::-;;:::i;:::-;;;663:14:486;;656:22;638:41;;626:2;611:18;1166:257:184;;;;;;;;2437:1504;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4409:1498::-;;;:::i;:::-;;;;;;;:::i;1602:386:134:-;;;;;;:::i;:::-;;:::i;:::-;;2703:132;;;:::i;646:82:184:-;;;:::i;889:168::-;;;;;;:::i;:::-;;:::i;529:37::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7785:32:486;;;7767:51;;7755:2;7740:18;529:37:184;7590:234:486;1441:85:436;1513:6;;-1:-1:-1;;;;;1513:6:436;1441:85;;1061:101:184;;;:::i;:::-;;;;;;;:::i;1427:302::-;;;;;;:::i;:::-;;:::i;732:153::-;;;;;;:::i;:::-;;:::i;530:27:134:-;;;;;-1:-1:-1;;;;;530:27:134;;;2839:155;;;;;;:::i;:::-;;:::i;2158:541::-;;;:::i;1733:398:184:-;;;:::i;1166:257::-;1225:4;1334:13:436;:11;:13::i;:::-;1242:9:184::1;1237:118;1257:6;:13:::0;1253:17;::::1;1237:118;;;1311:5;-1:-1:-1::0;;;;;1289:27:184::1;1297:6;1304:1;1297:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;1297:9:184::1;1289:27;1285:64;;;-1:-1:-1::0;1335:5:184::1;::::0;1166:257;-1:-1:-1;;1166:257:184:o;1285:64::-:1;1272:3:::0;::::1;::::0;::::1;:::i;:::-;;;;1237:118;;;-1:-1:-1::0;;1360:6:184::1;:41:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;1360:41:184;;;;;::::1;::::0;;-1:-1:-1;;;;;;1360:41:184::1;-1:-1:-1::0;;;;;1360:41:184;::::1;;::::0;;1357:1:436::1;1166:257:184::0;;;:::o;2437:1504::-;2501:41;2558:22;2597:9;2592:188;2616:6;:13;2612:17;;2592:188;;;2646:32;2681:6;2688:1;2681:9;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;-1:-1:-1;;;2681:28:184;;;;-1:-1:-1;;;;;2681:9:184;;;;:26;;:28;;;;;;;;;;:9;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2681:44:184;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2681:46:184;;;;;;;;;;;;:::i;:::-;2646:81;;2755:9;:16;2737:34;;;;;:::i;:::-;;;2636:144;2631:3;;;;;:::i;:::-;;;;2592:188;;;;2829:14;-1:-1:-1;;;;;2802:42:184;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2802:42:184;;-1:-1:-1;;2802:42:184;;;;;;;;;;;;2788:56;;2550:301;2865:24;2906:9;2901:1030;2925:6;:13;2921:17;;2901:1030;;;2955:27;2985:6;2992:1;2985:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;3039:24;;;-1:-1:-1;;;3039:24:184;;;;-1:-1:-1;;;;;2985:9:184;;;;-1:-1:-1;2985:9:184;;3039:22;;:24;;;;;;;;;;2985:9;3039:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3039:40:184;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3039:42:184;;;;;;;;;;;;:::i;:::-;3114:16;;3004:77;;-1:-1:-1;3091:20:184;3141:740;3165:12;3161:1;:16;3141:740;;;3196:22;3221:9;3231:1;3221:12;;;;;;;;:::i;:::-;;;;;;;3196:37;;3295:5;3245:11;3276:1;3257:16;:20;;;;:::i;:::-;3245:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3245:56:184;;;:39;;:56;3366:8;3313:11;3325:20;3344:1;3325:16;:20;:::i;:::-;3313:33;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3313:62:184;;;;;3431:47;;-1:-1:-1;;;3431:47:184;;11961:15:486;;;3431:47:184;;;11943:34:486;12013:15;;;11993:18;;;11986:43;3431:15:184;;;;;;11878:18:486;;3431:47:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3387:11;3399:20;3418:1;3399:16;:20;:::i;:::-;3387:33;;;;;;;;:::i;:::-;;;;;;;:41;;:91;;;;;3490:17;3510:8;-1:-1:-1;;;;;3510:20:184;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3490:42;-1:-1:-1;3490:42:184;3544:11;3556:20;3575:1;3556:16;:20;:::i;:::-;3544:33;;;;;;;;:::i;:::-;;;;;;;:45;;:68;-1:-1:-1;;;;;3544:68:184;;;-1:-1:-1;;;;;3544:68:184;;;;;3676:11;-1:-1:-1;;;;;3676:16:184;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3676:18:184;;;;;;;;;;;;:::i;:::-;3624:11;3636:20;3655:1;3636:16;:20;:::i;:::-;3624:33;;;;;;;;:::i;:::-;;;;;;;:49;;:70;;;;3760:11;-1:-1:-1;;;;;3760:18:184;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3760:20:184;;;;;;;;;;;;:::i;:::-;3706:11;3718:20;3737:1;3718:16;:20;:::i;:::-;3706:33;;;;;;;;:::i;:::-;;;;;;;:51;;:74;;;;3848:11;-1:-1:-1;;;;;3848:20:184;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3792:11;3804:20;3823:1;3804:16;:20;:::i;:::-;3792:33;;;;;;;;:::i;:::-;;;;;;;:53;;:78;;;;;;;;;;;3184:697;;3179:3;;;;;:::i;:::-;;;;3141:740;;;-1:-1:-1;3890:32:184;3910:12;3890:32;;:::i;:::-;;;2945:986;;;2940:3;;;;;:::i;:::-;;;;2901:1030;;;;2857:1080;2437:1504;;;:::o;4409:1498::-;4521:6;:13;4455:29;;-1:-1:-1;;;;;4505:30:184;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4505:30:184;;;;;;;;;;;;;;;;4492:43;;4546:9;4541:1362;4561:6;:13;4557:17;;4541:1362;;;4589:38;4630:6;4637:1;4630:9;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;-1:-1:-1;;;4630:29:184;;;;-1:-1:-1;;;;;4630:9:184;;;;:27;;:29;;;;;;;;;;:9;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4589:70;;4667:19;4689:6;4696:1;4689:9;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;;-1:-1:-1;;;4689:25:184;;;;-1:-1:-1;;;;;4689:9:184;;;;:23;;:25;;;;;;;;;;:9;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4667:47;;4722:33;4776:13;4758:32;;-1:-1:-1;;;;;4758:32:184;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4758:32:184;;-1:-1:-1;;4758:32:184;;;;;;;;;;;;4722:68;;4804:9;4799:389;4819:13;4815:17;;:1;:17;4799:389;;;4850:29;4881:17;4902:6;4909:1;4902:9;;;;;;;;:::i;:::-;;;;;;;;;;;:21;;-1:-1:-1;;;4902:21:184;;;;;13934:25:486;;;-1:-1:-1;;;;;4902:9:184;;;;:18;;13907::486;;4902:21:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4849:74;;;;4933:14;4950:7;-1:-1:-1;;;;;4950:14:184;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4933:33;;5010:7;4976:12;4989:1;4976:15;;;;;;;;:::i;:::-;;;;;;;:23;;:42;-1:-1:-1;;;;;4976:42:184;;;-1:-1:-1;;;;;4976:42:184;;;;;5057:10;5028:12;5041:1;5028:15;;;;;;;;:::i;:::-;;;;;;;:26;;:39;-1:-1:-1;;;;;5028:39:184;;;-1:-1:-1;;;;;5028:39:184;;;;;5110:6;5077:12;5090:1;5077:15;;;;;;;;:::i;:::-;;;;;;;:22;;:40;-1:-1:-1;;;;;5077:40:184;;;-1:-1:-1;;;;;5077:40:184;;;;;5158:6;-1:-1:-1;;;;;5158:18:184;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5127:12;5140:1;5127:15;;;;;;;;:::i;:::-;;;;;;;:20;;:52;-1:-1:-1;;;;;5127:52:184;;;-1:-1:-1;;;;;5127:52:184;;;;;4839:349;;;4834:3;;;;:::i;:::-;;;4799:389;;;;5197:21;5220:17;5239:20;5261;5285:5;-1:-1:-1;;;;;5285:10:184;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5196:101;;;;;;;;5322:574;;;;;;;;5357:5;-1:-1:-1;;;;;5322:574:184;;;;;5380:5;-1:-1:-1;;;;;5380:11:184;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5322:574:184;;;;;5431:5;-1:-1:-1;;;;;5431:11:184;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5416:36:184;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5416:38:184;;;;;;;;;;;;:::i;:::-;5322:574;;;;5494:5;-1:-1:-1;;;;;5494:11:184;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5479:38:184;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5322:574;;;;;;5551:5;-1:-1:-1;;;;;5551:26:184;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5322:574;;;;5594:5;-1:-1:-1;;;;;5594:18:184;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5322:574;;;;5639:13;5322:574;;;;;;5682:5;-1:-1:-1;;;;;5682:19:184;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5322:574;;;;;;5729:14;-1:-1:-1;;;;;5322:574:184;;;;;5765:10;-1:-1:-1;;;;;5322:574:184;;;;;5800:13;-1:-1:-1;;;;;5322:574:184;;;;;5838:13;-1:-1:-1;;;;;5322:574:184;;;;;5875:12;5322:574;;;5306:10;5317:1;5306:13;;;;;;;;:::i;:::-;;;;;;:590;;;;4581:1322;;;;;;;4576:3;;;;:::i;:::-;;;4541:1362;;;;4409:1498;:::o;1602:386:134:-;1334:13:436;:11;:13::i;:::-;1758:12:134::1;::::0;;-1:-1:-1;;;;;1830:30:134;;::::1;-1:-1:-1::0;;;;;;1830:30:134;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;11943:34:486::0;;;12008:2;11993:18;;11986:43;;;;1934:49:134::1;::::0;11878:18:486;1934:49:134::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:436;:11;:13::i;:::-;2804:26:134::1;::::0;-1:-1:-1;;;2804:26:134;;16585:2:486;2804:26:134::1;::::0;::::1;16567:21:486::0;16624:2;16604:18;;;16597:30;-1:-1:-1;;;16643:18:486;;;16636:46;16699:18;;2804:26:134::1;;;;;;;;646:82:184::0;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;16930:2:486;3314:201:439;;;16912:21:486;16969:2;16949:18;;;16942:30;17008:34;16988:18;;;16981:62;-1:-1:-1;;;17059:18:486;;;17052:44;17113:19;;3314:201:439;16728:410:486;3314:201:439;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;693:30:184::1;712:10;693:18;:30::i;:::-;3640:14:439::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;17295:36:486;;3710:14:439;;17283:2:486;17268:18;3710:14:439;;;;;;;3636:99;3258:483;646:82:184:o;889:168::-;1334:13:436;:11;:13::i;:::-;-1:-1:-1;;;;;1011:28:184;::::1;;::::0;;;:21:::1;:28;::::0;;;;:41:::1;::::0;1042:10;;1011:41:::1;:::i;:::-;;889:168:::0;;;:::o;529:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;529:37:184;;-1:-1:-1;529:37:184;:::o;1061:101::-;1106:30;1151:6;1144:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1144:13:184;;;;;;;;;;;;;;;;;;;;;;;1061:101;:::o;1427:302::-;1489:4;1334:13:436;:11;:13::i;:::-;1506:9:184::1;1501:206;1521:6;:13:::0;1517:17;::::1;1501:206;;;1575:5;-1:-1:-1::0;;;;;1553:27:184::1;1561:6;1568:1;1561:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;1561:9:184::1;1553:27;1549:152;;;1604:6;1611:13:::0;;:17:::1;::::0;1627:1:::1;::::0;1611:17:::1;:::i;:::-;1604:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;1592:6:::1;:9:::0;;-1:-1:-1;;;;;1604:25:184;;::::1;::::0;1599:1;;1592:9;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:37:::0;;-1:-1:-1;;;;;;1592:37:184::1;-1:-1:-1::0;;;;;1592:37:184;;;::::1;::::0;;;::::1;::::0;;1646:6:::1;1653:13:::0;;:17:::1;::::0;-1:-1:-1;;1653:17:184::1;:::i;:::-;1646:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;1639:32:::0;;-1:-1:-1;;;;;;1639:32:184::1;::::0;;-1:-1:-1;;;1166:257:184;-1:-1:-1;;1166:257:184:o;1549:152::-:1;1536:3:::0;::::1;::::0;::::1;:::i;:::-;;;;1501:206;;;-1:-1:-1::0;1719:5:184::1;::::0;1427:302;-1:-1:-1;;1427:302:184:o;732:153::-;-1:-1:-1;;;;;852:28:184;;;;;;:21;:28;;;;;;;;;845:35;;;;;;;;;;;;;;;;;802;;845;;;852:28;845:35;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;845:35:184;;;;;;;;;;;;;;;;;;;;;;;732:153;;;:::o;2839:155:134:-;1334:13:436;:11;:13::i;:::-;2937:12:134::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:134;;::::1;11943:34:486::0;;12013:15;;;12008:2;11993:18;;11986:43;2921:39:134::1;::::0;11878:18:486;2921:39:134::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:134::1;-1:-1:-1::0;;;;;2966:23:134;;;::::1;::::0;;;::::1;::::0;;2839:155::o;2158:541::-;2285:12;;-1:-1:-1;;;;;2285:12:134;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:134;;17674:2:486;2263:60:134;;;17656:21:486;17713:2;17693:18;;;17686:30;-1:-1:-1;;;17732:18:486;;;17725:51;17793:18;;2263:60:134;17472:345:486;2263:60:134;2378:16;2397:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;2397:7:134;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:134;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:134;;;2605:32;;;-1:-1:-1;;;;;11961:15:486;;11943:34;;-1:-1:-1;12008:2:486;11993:18;;11986:43;2605:32:134;;11878:18:486;2605:32:134;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;11961:15:486;;;11943:34;;2681:12:134;;;12008:2:486;11993:18;;11986:43;2648:46:134;;11878:18:486;2648:46:134;11715:320:486;1733:398:184;1334:13:436;:11;:13::i;:::-;1791:9:184::1;1786:341;1806:6;:13:::0;1802:17;::::1;1786:341;;;1834:19;1856:6;1863:1;1856:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:25:::1;::::0;;-1:-1:-1;;;1856:25:184;;;;-1:-1:-1;;;;;1856:9:184;;::::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;;;;;;:9;:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1834:47;;1894:9;1889:176;1909:13;1905:17;;:1;:17;1889:176;;;1940:29;1975:6;1982:1;1975:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;:21:::1;::::0;-1:-1:-1;;;1975:21:184;;::::1;::::0;::::1;13934:25:486::0;;;-1:-1:-1;;;;;1975:9:184;;::::1;::::0;:18:::1;::::0;13907::486;;1975:21:184::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1939:57;;;2010:7;-1:-1:-1::0;;;;;2010:33:184::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;2006:51:::0;-1:-1:-1;1924:3:184::1;::::0;::::1;:::i;:::-;;;1889:176;;;;2072:6;2079:1;2072:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:29:::1;::::0;;-1:-1:-1;;;2072:29:184;;;;-1:-1:-1;;;;;2072:9:184;;::::1;::::0;:27:::1;::::0;:29:::1;::::0;;::::1;::::0;;;;;;:9;:29:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2072:46:184::1;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1826:301;1821:3;;;;:::i;:::-;;;1786:341;;1599:130:436::0;1513:6;;-1:-1:-1;;;;;1513:6:436;929:10:449;1662:23:436;1654:68;;;;-1:-1:-1;;;1654:68:436;;18024:2:486;1654:68:436;;;18006:21:486;;;18043:18;;;18036:30;18102:34;18082:18;;;18075:62;18154:18;;1654:68:436;17822:356:486;1654:68:436;1599:130::o;562:129:134:-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;638:16:134::1;:14;:16::i;:::-;660:26;679:6;2673:187:436::0;2765:6;;;-1:-1:-1;;;;;2781:17:436;;;-1:-1:-1;;;;;;2781:17:436;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1065:26:436::1;5363:13:439::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1176:32:436::1;929:10:449::0;1176:18:436::1;:32::i;-1:-1:-1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:486;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:486:o;799:258::-;871:1;881:113;895:6;892:1;889:13;881:113;;;971:11;;;965:18;952:11;;;945:39;917:2;910:10;881:113;;;1012:6;1009:1;1006:13;1003:48;;;-1:-1:-1;;1047:1:486;1029:16;;1022:27;799:258::o;1062:::-;1104:3;1142:5;1136:12;1169:6;1164:3;1157:19;1185:63;1241:6;1234:4;1229:3;1225:14;1218:4;1211:5;1207:16;1185:63;:::i;:::-;1302:2;1281:15;-1:-1:-1;;1277:29:486;1268:39;;;;1309:4;1264:50;;1062:258;-1:-1:-1;;1062:258:486:o;1405:1753::-;1625:4;1654:2;1694;1683:9;1679:18;1724:2;1713:9;1706:21;1747:6;1782;1776:13;1813:6;1805;1798:22;1839:2;1829:12;;1872:2;1861:9;1857:18;1850:25;;1934:2;1924:6;1921:1;1917:14;1906:9;1902:30;1898:39;1972:2;1964:6;1960:15;1993:1;2003:1126;2017:6;2014:1;2011:13;2003:1126;;;2082:22;;;-1:-1:-1;;2078:36:486;2066:49;;2138:13;;2252:9;;-1:-1:-1;;;;;2248:18:486;;;2233:34;;2314:11;;;2308:18;2304:27;;2287:15;;;2280:52;2379:11;;;2373:18;2369:27;2352:15;;;2345:52;2420:4;2463:11;;;2457:18;2174:4;2495:15;;;2488:27;;;2174:4;2420;2542:48;2574:15;;;2457:18;2542:48;:::i;:::-;2528:62;;;;2613:4;2666:2;2662;2658:11;2652:18;2719:6;2711;2707:19;2702:2;2694:6;2690:15;2683:44;2754:41;2788:6;2772:14;2754:41;:::i;:::-;2740:55;;;;2818:4;2871:2;2867;2863:11;2857:18;2888:49;2933:2;2925:6;2921:15;2905:14;1392:4;1381:16;1369:29;;1325:75;2888:49;-1:-1:-1;;2960:4:486;3007:11;;;3001:18;2984:15;;;;2977:43;;;;3107:12;;;;3072:15;;;;2039:1;2032:9;2003:1126;;;-1:-1:-1;3146:6:486;;1405:1753;-1:-1:-1;;;;;;;;1405:1753:486:o;3270:787::-;3334:3;3372:5;3366:12;3399:6;3394:3;3387:19;3425:4;3454:2;3449:3;3445:12;3438:19;;3491:2;3484:5;3480:14;3512:1;3522:510;3536:6;3533:1;3530:13;3522:510;;;3595:13;;3679:9;;-1:-1:-1;;;;;3675:18:486;;;3663:31;;3738:11;;;3732:18;-1:-1:-1;;;;;3728:43:486;3714:12;;;3707:65;3795:4;3843:11;;;3837:18;3833:27;;3819:12;;;3812:49;3884:4;3932:11;;;3926:18;3922:27;3908:12;;;3901:49;3979:4;3970:14;;;;4007:15;;;;3648:1;3551:9;3522:510;;;-1:-1:-1;4048:3:486;;3270:787;-1:-1:-1;;;;;3270:787:486:o;4062:2547::-;4260:4;4289:2;4329;4318:9;4314:18;4359:2;4348:9;4341:21;4382:6;4417;4411:13;4448:6;4440;4433:22;4474:2;4464:12;;4507:2;4496:9;4492:18;4485:25;;4569:2;4559:6;4556:1;4552:14;4541:9;4537:30;4533:39;4607:2;4599:6;4595:15;4628:1;4638:1942;4652:6;4649:1;4646:13;4638:1942;;;4717:22;;;-1:-1:-1;;4713:36:486;4701:49;;4773:13;;4847:9;;-1:-1:-1;;;;;756:31:486;744:44;;4809:6;4904:11;;;4898:18;-1:-1:-1;;;;;756:31:486;;4962:15;;;744:44;4929:49;5027:2;5023;5019:11;5013:18;5068:2;5063;5055:6;5051:15;5044:27;5098:50;5144:2;5136:6;5132:15;5116:14;5098:50;:::i;:::-;5084:64;;;5171:4;5224:2;5220;5216:11;5210:18;5241:49;5286:2;5278:6;5274:15;5258:14;1392:4;1381:16;1369:29;;1325:75;5241:49;-1:-1:-1;;5313:4:486;5360:11;;;5354:18;5337:15;;;5330:43;5396:4;5443:11;;;5437:18;5420:15;;;5413:43;5479:4;5526:11;;;5520:18;5503:15;;;5496:43;5562:4;5607:11;;;5601:18;472:13;465:21;5664:15;;;453:34;5704:6;5751:12;;;5745:19;-1:-1:-1;;;;;3228:30:486;;;5811:16;;;3216:43;;;;5852:6;5899:12;;;5893:19;3228:30;;5959:16;;;3216:43;6000:6;6047:12;;;6041:19;3228:30;;6107:16;;;3216:43;6148:6;6195:12;;;6189:19;3228:30;;;6255:16;;;3216:43;6296:6;6343:12;;;6337:19;6394;;;6376:16;;;6369:45;;;;6437:63;6398:6;6337:19;6437:63;:::i;:::-;6558:12;;;;6427:73;-1:-1:-1;;;6523:15:486;;;;4674:1;4667:9;4638:1942;;6614:786;6745:6;6753;6761;6814:2;6802:9;6793:7;6789:23;6785:32;6782:52;;;6830:1;6827;6820:12;6782:52;6869:9;6856:23;6888:31;6913:5;6888:31;:::i;:::-;6938:5;-1:-1:-1;6994:2:486;6979:18;;6966:32;-1:-1:-1;;;;;7047:14:486;;;7044:34;;;7074:1;7071;7064:12;7044:34;7112:6;7101:9;7097:22;7087:32;;7157:7;7150:4;7146:2;7142:13;7138:27;7128:55;;7179:1;7176;7169:12;7128:55;7219:2;7206:16;7245:2;7237:6;7234:14;7231:34;;;7261:1;7258;7251:12;7231:34;7314:7;7309:2;7299:6;7296:1;7292:14;7288:2;7284:23;7280:32;7277:45;7274:65;;;7335:1;7332;7325:12;7274:65;7366:2;7362;7358:11;7348:21;;7388:6;7378:16;;;;;6614:786;;;;;:::o;7405:180::-;7464:6;7517:2;7505:9;7496:7;7492:23;7488:32;7485:52;;;7533:1;7530;7523:12;7485:52;-1:-1:-1;7556:23:486;;7405:180;-1:-1:-1;7405:180:486:o;8037:689::-;8239:2;8291:21;;;8361:13;;8264:18;;;8383:22;;;8210:4;;8239:2;8462:15;;;;8436:2;8421:18;;;8210:4;8505:195;8519:6;8516:1;8513:13;8505:195;;;8584:13;;-1:-1:-1;;;;;8580:39:486;8568:52;;8675:15;;;;8640:12;;;;8616:1;8534:9;8505:195;;;-1:-1:-1;8717:3:486;;8037:689;-1:-1:-1;;;;;;8037:689:486:o;9430:127::-;9491:10;9486:3;9482:20;9479:1;9472:31;9522:4;9519:1;9512:15;9546:4;9543:1;9536:15;9562:127;9623:10;9618:3;9614:20;9611:1;9604:31;9654:4;9651:1;9644:15;9678:4;9675:1;9668:15;9694:135;9733:3;-1:-1:-1;;9754:17:486;;9751:43;;;9774:18;;:::i;:::-;-1:-1:-1;9821:1:486;9810:13;;9694:135::o;9834:292::-;9945:6;9998:2;9986:9;9977:7;9973:23;9969:32;9966:52;;;10014:1;10011;10004:12;9966:52;10046:9;10040:16;10065:31;10090:5;10065:31;:::i;10131:127::-;10192:10;10187:3;10183:20;10180:1;10173:31;10223:4;10220:1;10213:15;10247:4;10244:1;10237:15;10263:275;10334:2;10328:9;10399:2;10380:13;;-1:-1:-1;;10376:27:486;10364:40;;-1:-1:-1;;;;;10419:34:486;;10455:22;;;10416:62;10413:88;;;10481:18;;:::i;:::-;10517:2;10510:22;10263:275;;-1:-1:-1;10263:275:486:o;10543:1034::-;10661:6;10692:2;10735;10723:9;10714:7;10710:23;10706:32;10703:52;;;10751:1;10748;10741:12;10703:52;10784:9;10778:16;-1:-1:-1;;;;;10854:2:486;10846:6;10843:14;10840:34;;;10870:1;10867;10860:12;10840:34;10908:6;10897:9;10893:22;10883:32;;10953:7;10946:4;10942:2;10938:13;10934:27;10924:55;;10975:1;10972;10965:12;10924:55;11004:2;10998:9;11026:2;11022;11019:10;11016:36;;;11032:18;;:::i;:::-;11078:2;11075:1;11071:10;11061:20;;11101:28;11125:2;11121;11117:11;11101:28;:::i;:::-;11163:15;;;11233:11;;;11229:20;;;11194:12;;;;11261:19;;;11258:39;;;11293:1;11290;11283:12;11258:39;11317:11;;;;11337:210;11353:6;11348:3;11345:15;11337:210;;;11426:3;11420:10;11407:23;;11443:31;11468:5;11443:31;:::i;:::-;11487:18;;;11370:12;;;;11525;;;;11337:210;;;11566:5;10543:1034;-1:-1:-1;;;;;;;;10543:1034:486:o;11582:128::-;11622:3;11653:1;11649:6;11646:1;11643:13;11640:39;;;11659:18;;:::i;:::-;-1:-1:-1;11695:9:486;;11582:128::o;12040:184::-;12110:6;12163:2;12151:9;12142:7;12138:23;12134:32;12131:52;;;12179:1;12176;12169:12;12131:52;-1:-1:-1;12202:16:486;;12040:184;-1:-1:-1;12040:184:486:o;12501:706::-;12581:6;12634:2;12622:9;12613:7;12609:23;12605:32;12602:52;;;12650:1;12647;12640:12;12602:52;12683:9;12677:16;-1:-1:-1;;;;;12753:2:486;12745:6;12742:14;12739:34;;;12769:1;12766;12759:12;12739:34;12807:6;12796:9;12792:22;12782:32;;12852:7;12845:4;12841:2;12837:13;12833:27;12823:55;;12874:1;12871;12864:12;12823:55;12903:2;12897:9;12925:2;12921;12918:10;12915:36;;;12931:18;;:::i;:::-;12973:53;13016:2;12997:13;;-1:-1:-1;;12993:27:486;13022:2;12989:36;12973:53;:::i;:::-;12960:66;;13049:2;13042:5;13035:17;13089:7;13084:2;13079;13075;13071:11;13067:20;13064:33;13061:53;;;13110:1;13107;13100:12;13061:53;13123:54;13174:2;13169;13162:5;13158:14;13153:2;13149;13145:11;13123:54;:::i;:::-;-1:-1:-1;13196:5:486;12501:706;-1:-1:-1;;;;12501:706:486:o;13212:273::-;13280:6;13333:2;13321:9;13312:7;13308:23;13304:32;13301:52;;;13349:1;13346;13339:12;13301:52;13381:9;13375:16;13431:4;13424:5;13420:16;13413:5;13410:27;13400:55;;13451:1;13448;13441:12;13970:175;14048:13;;-1:-1:-1;;;;;14090:30:486;;14080:41;;14070:69;;14135:1;14132;14125:12;14150:365;14259:6;14267;14320:2;14308:9;14299:7;14295:23;14291:32;14288:52;;;14336:1;14333;14326:12;14288:52;14368:9;14362:16;14387:31;14412:5;14387:31;:::i;:::-;14437:5;-1:-1:-1;14461:48:486;14505:2;14490:18;;14461:48;:::i;:::-;14451:58;;14150:365;;;;;:::o;15075:456::-;15168:6;15176;15184;15192;15245:3;15233:9;15224:7;15220:23;15216:33;15213:53;;;15262:1;15259;15252:12;15213:53;15285:39;15314:9;15285:39;:::i;:::-;15275:49;;15343:48;15387:2;15376:9;15372:18;15343:48;:::i;:::-;15333:58;;15410:48;15454:2;15443:9;15439:18;15410:48;:::i;:::-;15400:58;;15477:48;15521:2;15510:9;15506:18;15477:48;:::i;:::-;15467:58;;15075:456;;;;;;;:::o;15792:277::-;15859:6;15912:2;15900:9;15891:7;15887:23;15883:32;15880:52;;;15928:1;15925;15918:12;15880:52;15960:9;15954:16;16013:5;16006:13;15999:21;15992:5;15989:32;15979:60;;16035:1;16032;16025:12;17342:125;17382:4;17410:1;17407;17404:8;17401:34;;;17415:18;;:::i;:::-;-1:-1:-1;17452:9:486;;17342:125::o;18183:407::-;18385:2;18367:21;;;18424:2;18404:18;;;18397:30;18463:34;18458:2;18443:18;;18436:62;-1:-1:-1;;;18529:2:486;18514:18;;18507:41;18580:3;18565:19;;18183:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "addVault(address)": "256b5a02", + "getAllVaults()": "97331bf9", + "getClaimableRewards(address)": "308e401e", + "getLatestVaultExtensions(address)": "d9d17645", + "getVaultsData()": "4a672a54", + "initialize()": "8129fc1c", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "removeVault(address)": "ceb68c23", + "renounceOwnership()": "715018a6", + "setEmergencyExit()": "fcf2d0ad", + "setLatestVaultExtensions(address,address[])": "857ecda2", + "transferOwnership(address)": "f2fde38b", + "vaults(uint256)": "8c64ea4a" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/OptimizedVaultsRegistry_Proxy.json b/packages/sdk/deployments/mode/OptimizedVaultsRegistry_Proxy.json new file mode 100644 index 0000000000..38de258217 --- /dev/null +++ b/packages/sdk/deployments/mode/OptimizedVaultsRegistry_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "transactionIndex": 1, + "gasUsed": "771714", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800800000200000000000000000000000000000000000000000000100000000000000000000000200000000000000000000000000002000001000000000000000000000000000000020000020000000000000000000800008000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000080020800000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85", + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000002ddf3ddfe856d1a4e5dbcb324194e2a622aed83c" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + }, + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + }, + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + }, + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + }, + { + "transactionIndex": 1, + "blockNumber": 2097627, + "transactionHash": "0x80f7dfd80e2c6797aa5701189933b723ef9d84ccf1751d49dca08ae5fb2094d7", + "address": "0xA90f1c28F8Bc9C92113e54d0b7d007647Ee216a4", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x81abfe3dcb2a24e74dbcccd46e25c341fb72ddc1db40640065c0dc8051242b85" + } + ], + "blockNumber": 2097627, + "cumulativeGasUsed": "818627", + "status": 1, + "byzantium": true + }, + "args": [ + "0x2DDF3DdFE856D1A4E5DBcb324194E2a622AeD83C", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0x8129fc1c" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/PoolDirectory.json b/packages/sdk/deployments/mode/PoolDirectory.json new file mode 100644 index 0000000000..93df2ecf79 --- /dev/null +++ b/packages/sdk/deployments/mode/PoolDirectory.json @@ -0,0 +1,1105 @@ +{ + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "admins", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "AdminWhitelistUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct PoolDirectory.Pool", + "name": "pool", + "type": "tuple" + } + ], + "name": "PoolRegistered", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + } + ], + "name": "_deprecatePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "_deprecatePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "admins", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "_editAdminWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "deployers", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "_editDeployerWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enforce", + "type": "bool" + } + ], + "name": "_setDeployerWhitelistEnforcement", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "adminWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "enforceWhitelist", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "closeFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationIncentive", + "type": "uint256" + }, + { + "internalType": "address", + "name": "priceOracle", + "type": "address" + } + ], + "name": "deployPool", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "deployerWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enforceDeployerWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getActivePools", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllPools", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getPoolsByAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPoolsOfUser", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPublicPools", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "name": "getPublicPoolsByVerification", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVerifiedPoolsOfWhitelistedAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_enforceDeployerWhitelist", + "type": "bool" + }, + { + "internalType": "address[]", + "name": "_deployerWhitelist", + "type": "address[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "poolExists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pools", + "outputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poolsCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "setPoolName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "transactionIndex": 1, + "gasUsed": "775382", + "logsBloom": "0x00000000000000000000000000000000400000000000000000a00000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000080000000000000800000000800000000000000000400000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000008200000002000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec", + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000020808c1a73737016bbbf8acc6959a30446ea1d2d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + }, + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + }, + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + }, + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + }, + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + } + ], + "blockNumber": 2067120, + "cumulativeGasUsed": "822283", + "status": 1, + "byzantium": true + }, + "args": [ + "0x20808c1A73737016bBBF8Acc6959A30446eA1D2d", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xb86579d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + false, + [] + ] + }, + "implementation": "0x20808c1A73737016bBBF8Acc6959A30446eA1D2d", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/PoolDirectory_Implementation.json b/packages/sdk/deployments/mode/PoolDirectory_Implementation.json new file mode 100644 index 0000000000..b3eec4453d --- /dev/null +++ b/packages/sdk/deployments/mode/PoolDirectory_Implementation.json @@ -0,0 +1,2143 @@ +{ + "address": "0x20808c1A73737016bBBF8Acc6959A30446eA1D2d", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "admins", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "AdminWhitelistUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct PoolDirectory.Pool", + "name": "pool", + "type": "tuple" + } + ], + "name": "PoolRegistered", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + } + ], + "name": "_deprecatePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "_deprecatePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "admins", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "_editAdminWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "deployers", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "_editDeployerWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enforce", + "type": "bool" + } + ], + "name": "_setDeployerWhitelistEnforcement", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "adminWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "enforceWhitelist", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "closeFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationIncentive", + "type": "uint256" + }, + { + "internalType": "address", + "name": "priceOracle", + "type": "address" + } + ], + "name": "deployPool", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "deployerWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enforceDeployerWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getActivePools", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllPools", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getPoolsByAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPoolsOfUser", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPublicPools", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "name": "getPublicPoolsByVerification", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVerifiedPoolsOfWhitelistedAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_enforceDeployerWhitelist", + "type": "bool" + }, + { + "internalType": "address[]", + "name": "_deployerWhitelist", + "type": "address[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "poolExists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pools", + "outputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poolsCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "setPoolName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xf782fc8a6380a7f7c63373557c7926995de3454b22ebd8cee7dfe445661e683d", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x20808c1A73737016bBBF8Acc6959A30446eA1D2d", + "transactionIndex": 1, + "gasUsed": "4557230", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa9364f3d1ee954ae8a1f40e2d0e0a4faae936b503b58149fc3d95c3af95740ad", + "transactionHash": "0xf782fc8a6380a7f7c63373557c7926995de3454b22ebd8cee7dfe445661e683d", + "logs": [], + "blockNumber": 2067117, + "cumulativeGasUsed": "4604131", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address[]", + "name": "admins", + "type": "address[]", + "indexed": false + }, + { + "internalType": "bool", + "name": "status", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "AdminWhitelistUpdated", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256", + "indexed": false + }, + { + "internalType": "struct PoolDirectory.Pool", + "name": "pool", + "type": "tuple", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "indexed": false + } + ], + "type": "event", + "name": "PoolRegistered", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_deprecatePool" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_deprecatePool" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "admins", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_editAdminWhitelist" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "deployers", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_editDeployerWhitelist" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enforce", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setDeployerWhitelistEnforcement" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "adminWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "enforceWhitelist", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "closeFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationIncentive", + "type": "uint256" + }, + { + "internalType": "address", + "name": "priceOracle", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "deployPool", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "deployerWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "enforceDeployerWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getActivePools", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllPools", + "outputs": [ + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPoolsByAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPoolsOfUser", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getPublicPools", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPublicPoolsByVerification", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getVerifiedPoolsOfWhitelistedAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_enforceDeployerWhitelist", + "type": "bool" + }, + { + "internalType": "address[]", + "name": "_deployerWhitelist", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "poolExists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "pools", + "outputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "poolsCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setPoolName" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_editAdminWhitelist(address[],bool)": { + "details": "Adds/removes Ethereum accounts to the admin whitelist.", + "params": { + "admins": "Array of Ethereum accounts to be whitelisted.", + "status": "Whether to add or remove the accounts." + } + }, + "_editDeployerWhitelist(address[],bool)": { + "details": "Adds/removes Ethereum accounts to the deployer whitelist.", + "params": { + "deployers": "Array of Ethereum accounts to be whitelisted.", + "status": "Whether to add or remove the accounts." + } + }, + "_setDeployerWhitelistEnforcement(bool)": { + "details": "Controls if the deployer whitelist is to be enforced.", + "params": { + "enforce": "Boolean indicating if the deployer whitelist is to be enforced." + } + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "deployPool(string,address,bytes,bool,uint256,uint256,address)": { + "details": "Deploys a new Ionic pool and adds to the directory.", + "params": { + "closeFactor": "The pool's close factor (scaled by 1e18).", + "constructorData": "Encoded construction data for `Unitroller constructor()`", + "enforceWhitelist": "Boolean indicating if the pool's supplier/borrower whitelist is to be enforced.", + "implementation": "The Comptroller implementation contract address.", + "liquidationIncentive": "The pool's liquidation incentive (scaled by 1e18).", + "name": "The name of the pool.", + "priceOracle": "The pool's PriceOracle contract address." + }, + "returns": { + "_0": "Index of the registered Ionic pool and the Unitroller proxy address." + } + }, + "getActivePools()": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getAllPools()": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPoolsOfUser(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPublicPools()": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPublicPoolsByVerification(bool)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getVerifiedPoolsOfWhitelistedAccount(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive.", + "params": { + "account": "who is whitelisted in the returned verified whitelist-enabled pools." + } + }, + "initialize(bool,address[])": { + "details": "Initializes a deployer whitelist if desired.", + "params": { + "_deployerWhitelist": "Array of Ethereum accounts to be whitelisted.", + "_enforceDeployerWhitelist": "Boolean indicating if the deployer whitelist is to be enforced." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "getActivePools()": { + "notice": "Returns `ids` and directory information of all non-deprecated Ionic pools." + }, + "getAllPools()": { + "notice": "Returns arrays of all Ionic pools' data." + }, + "getPoolsByAccount(address)": { + "notice": "Returns arrays of Ionic pool indexes and data created by `account`." + }, + "getPoolsOfUser(address)": { + "notice": "Returns arrays of all public Ionic pool indexes and data." + }, + "getPublicPools()": { + "notice": "Returns arrays of all public Ionic pool indexes and data." + }, + "getPublicPoolsByVerification(bool)": { + "notice": "Returns arrays of all Ionic pool indexes and data with whitelisted admins." + }, + "getVerifiedPoolsOfWhitelistedAccount(address)": { + "notice": "Returns arrays of all verified Ionic pool indexes and data for which the account is whitelisted" + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + }, + "setPoolName(uint256,string)": { + "notice": "Modify existing Ionic pool name." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/PoolDirectory.sol": "PoolDirectory" + }, + "libraries": {} + }, + "sources": { + "contracts/PoolDirectory.sol": { + "keccak256": "0xd3d28cd044a0205a86f0c2d82021a36018ec4b0e95f72064c92bcad99f84f6c8", + "urls": [ + "bzz-raw://0c8ab6e3f922b9165cae038507497be2aed81df002ffe7921e0aa1f10f690531", + "dweb:/ipfs/QmNpfDhHaVPyxXZDY7Si2Bpidneh6Ckr8C4dGhRmA9pEEa" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x84edc2b901bfc47df6728100716d0e23de7f095543fcc4b919ae8f5f049a2d08", + "urls": [ + "bzz-raw://dc2a5d197584bf0a6ebe3bbad4a6c97f448cef027d3fc397ce2453b1e87826fa", + "dweb:/ipfs/QmdL2TZVb8W1nM3VMe2eUoXgzUjSb8FBvxmbCPWPWndVTU" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506151a5806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001cc5760003560e01c80638da5cb5b116200010d578063b5f3f64011620000a3578063e30c3978116200007a578063e30c3978146200044a578063f2fde38b146200045e578063f348960d1462000475578063fc4d33f9146200048c57600080fd5b8063b5f3f6401462000403578063b86579d4146200041a578063d88ff1f4146200043157600080fd5b8063a155497c11620000e4578063a155497c1462000385578063a3ed91c6146200039c578063a970e76c14620003b3578063ac4afa3814620003d957600080fd5b80638da5cb5b146200033e5780638ec0835414620003645780639b29177f146200036e57600080fd5b806343e20a1d116200018357806358b896d3116200015a57806358b896d314620002cf5780635d0eb31a14620003045780636e96dfd7146200031d578063715018a6146200033457600080fd5b806343e20a1d1462000288578063448ca55814620002ae5780634ae26ea114620002c557600080fd5b806304f03c6f14620001d15780630a83d1b014620001ea5780631e1c6a07146200020157806320c32bfe146200023c578063218a3bbe146200025357806326bb81d7146200027a575b600080fd5b620001e8620001e236600462002fec565b62000496565b005b620001e8620001fb3660046200300c565b620004b3565b6200022762000212366004620030bb565b60686020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b620001e86200024d36600462003126565b620005c3565b6200026a6200026436600462002fec565b62000769565b6040516200023392919062003284565b606954620002279060ff1681565b6200022762000299366004620030bb565b606b6020526000908152604090205460ff1681565b6200026a620002bf366004620030bb565b62000a75565b6200026a62000e21565b620002e6620002e036600462003328565b620010de565b604080519283526001600160a01b0390911660208301520162000233565b6200030e606c5481565b60405190815260200162000233565b620001e86200032e366004620030bb565b620016d7565b620001e862001743565b6033546001600160a01b03165b6040516001600160a01b03909116815260200162000233565b6200026a62001789565b620001e86200037f366004620030bb565b62001a74565b620001e8620003963660046200300c565b62001af4565b6200026a620003ad366004620030bb565b62001bc6565b62000227620003c4366004620030bb565b606a6020526000908152604090205460ff1681565b620003f0620003ea3660046200343b565b62001dce565b6040516200023395949392919062003455565b620001e8620004143660046200343b565b62001eb4565b620001e86200042b36600462003497565b620020a3565b6200043b6200223b565b6040516200023391906200356c565b6065546200034b906001600160a01b031681565b620001e86200046f366004620030bb565b620024b0565b6200026a62000486366004620030bb565b62002523565b620001e862002807565b620004a062002921565b6069805460ff1916911515919091179055565b620004bd62002921565b81620005065760405162461bcd60e51b815260206004820152601360248201527227379030b236b4b7399039bab8383634b2b21760691b60448201526064015b60405180910390fd5b60005b82811015620005805781606b60008686858181106200052c576200052c62003581565b9050602002016020810190620005439190620030bb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806200057781620035ad565b91505062000509565b507f31b67e6853df85403a8c4f4f46dc53f48f700d6917c8e3ec8c77a0e6fd56793b838383604051620005b693929190620035cb565b60405180910390a1505050565b600060668481548110620005db57620005db62003581565b600091825260209182902060026005909202010154604080516303e1469160e61b815290516001600160a01b039092169350839263f851a440926004808401938290030181865afa15801562000635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200065b919062003628565b6001600160a01b0316336001600160a01b0316148015620006dc5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006dc919062003648565b80620006f257506033546001600160a01b031633145b6200072e5760405162461bcd60e51b815260206004820152600b60248201526a10b832b936b4b9b9b4b7b760a91b6044820152606401620004fd565b82826066868154811062000746576200074662003581565b6000918252602090912062000762936005909202019162002e59565b5050505050565b6060806000806200077962001789565b91505060005b81518110156200086d576000828281518110620007a057620007a062003581565b6020026020010151604001519050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200080b575060408051601f3d908101601f19168201909252620008089181019062003628565b60015b620008165762000847565b6001600160a01b0381166000908152606b602052604090205460ff161515881515146200084557505062000858565b505b836200085381620035ad565b945050505b806200086481620035ad565b9150506200077f565b506000826001600160401b038111156200088b576200088b620032df565b604051908082528060200260200182016040528015620008b5578160200160208202803683370190505b5090506000836001600160401b03811115620008d557620008d5620032df565b6040519080825280602002602001820160405280156200091257816020015b620008fe62002ee8565b815260200190600190039081620008f45790505b5090506000805b845181101562000a675760008582815181106200093a576200093a62003581565b6020026020010151604001519050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015620009a5575060408051601f3d908101601f19168201909252620009a29181019062003628565b60015b620009b057620009e1565b6001600160a01b0381166000908152606b602052604090205460ff1615158b151514620009df57505062000a52565b505b81858481518110620009f757620009f762003581565b60200260200101818152505085828151811062000a185762000a1862003581565b602002602001015184848151811062000a355762000a3562003581565b6020026020010181905250828062000a4d90620035ad565b935050505b8062000a5e81620035ad565b91505062000919565b509197909650945050505050565b60608060008062000a8562001789565b91505060005b815181101562000bd057600082828151811062000aac5762000aac62003581565b6020026020010151604001519050806001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000b17575060408051601f3d908101601f1916820190925262000b149181019062003648565b60015b62000b225762000baa565b80158062000b9a5750604051634d8c928d60e11b81526001600160a01b038981166004830152831690639b19251a90602401602060405180830381865afa15801562000b72573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b98919062003648565b155b1562000ba857505062000bbb565b505b8362000bb681620035ad565b945050505b8062000bc781620035ad565b91505062000a8b565b506000826001600160401b0381111562000bee5762000bee620032df565b60405190808252806020026020018201604052801562000c18578160200160208202803683370190505b5090506000836001600160401b0381111562000c385762000c38620032df565b60405190808252806020026020018201604052801562000c7557816020015b62000c6162002ee8565b81526020019060019003908162000c575790505b5090506000805b845181101562000a6757600085828151811062000c9d5762000c9d62003581565b6020026020010151604001519050806001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000d08575060408051601f3d908101601f1916820190925262000d059181019062003648565b60015b62000d135762000d9b565b80158062000d8b5750604051634d8c928d60e11b81526001600160a01b038c81166004830152831690639b19251a90602401602060405180830381865afa15801562000d63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d89919062003648565b155b1562000d9957505062000e0c565b505b8185848151811062000db15762000db162003581565b60200260200101818152505085828151811062000dd25762000dd262003581565b602002602001015184848151811062000def5762000def62003581565b6020026020010181905250828062000e0790620035ad565b935050505b8062000e1881620035ad565b91505062000c7c565b60608060008062000e3162001789565b91505060005b815181101562000efe5781818151811062000e565762000e5662003581565b6020026020010151604001516001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000ebe575060408051601f3d908101601f1916820190925262000ebb9181019062003648565b60015b62000ec95762000ed9565b801562000ed7575062000ee9565b505b8262000ee581620035ad565b9350505b8062000ef581620035ad565b91505062000e37565b506000826001600160401b0381111562000f1c5762000f1c620032df565b60405190808252806020026020018201604052801562000f46578160200160208202803683370190505b5090506000836001600160401b0381111562000f665762000f66620032df565b60405190808252806020026020018201604052801562000fa357816020015b62000f8f62002ee8565b81526020019060019003908162000f855790505b5090506000805b8451811015620010d15784818151811062000fc95762000fc962003581565b6020026020010151604001516001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562001031575060408051601f3d908101601f191682019092526200102e9181019062003648565b60015b6200103c576200104c565b80156200104a5750620010bc565b505b8084838151811062001062576200106262003581565b60200260200101818152505084818151811062001083576200108362003581565b6020026020010151838381518110620010a057620010a062003581565b60200260200101819052508180620010b890620035ad565b9250505b80620010c881620035ad565b91505062000faa565b5091969095509350505050565b6000806001600160a01b0389166200115f5760405162461bcd60e51b815260206004820152603960248201527f4e6f20436f6d7074726f6c6c657220696d706c656d656e746174696f6e20636f60448201527f6e74726163742061646472657373207370656369666965642e000000000000006064820152608401620004fd565b6001600160a01b038316620011ca5760405162461bcd60e51b815260206004820152602a60248201527f4e6f2050726963654f7261636c6520636f6e747261637420616464726573732060448201526939b832b1b4b334b2b21760b11b6064820152608401620004fd565b600060405180602001620011de9062002f29565b601f1982820381018352601f9091011660408190526200120691908b908b9060200162003668565b60405160208183030381529060405290506000620012686000338e606c600081546200123290620035ad565b91829055506040516200124b9392919060200162003692565b60405160208183030381529060405280519060200120846200297f565b90506000819050806001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012ab57600080fd5b505af1158015620012c0573d6000803e3d6000fd5b505060405163317b0b7760e01b8152600481018b90526001600160a01b038416925063317b0b7791506024016020604051808303816000875af11580156200130c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013329190620036d3565b15620013815760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f2073657420706f6f6c20636c6f736520666163746f722e6044820152606401620004fd565b604051634fd42e1760e01b8152600481018890526001600160a01b03821690634fd42e17906024016020604051808303816000875af1158015620013c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ef9190620036d3565b15620014505760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f2073657420706f6f6c206c69717569646174696f6e20696044820152683731b2b73a34bb329760b91b6064820152608401620004fd565b6040516355ee1fe160e01b81526001600160a01b0387811660048301528216906355ee1fe1906024016020604051808303816000875af115801562001499573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014bf9190620036d3565b156200150e5760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f2073657420706f6f6c207072696365206f7261636c652e6044820152606401620004fd565b8815620015e957604051634a956fad60e11b8152600160048201526001600160a01b0382169063952adf5a906024016020604051808303816000875af11580156200155d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015839190620036d3565b15620015e95760405162461bcd60e51b815260206004820152602e60248201527f4661696c656420746f20656e666f72636520737570706c6965722f626f72726f60448201526d3bb2b9103bb434ba32b634b9ba1760911b6064820152608401620004fd565b604051632dc7468360e21b81523360048201526001600160a01b0382169063b71d1a0c906024016020604051808303816000875af115801562001630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016569190620036d3565b15620016b85760405162461bcd60e51b815260206004820152602a60248201527f4661696c656420746f207365742070656e64696e672061646d696e206f6e20556044820152693734ba3937b63632b91760b11b6064820152608401620004fd565b620016c48d8362002a8d565b9d919c50909a5050505050505050505050565b620016e162002921565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6200174d62002921565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b6044820152606401620004fd565b6060806000805b606654811015620018045760006001600160a01b031660668281548110620017bc57620017bc62003581565b60009182526020909120600260059092020101546001600160a01b031614620017ef5781620017eb81620035ad565b9250505b80620017fb81620035ad565b91505062001790565b506000816001600160401b03811115620018225762001822620032df565b6040519080825280602002602001820160405280156200185f57816020015b6200184b62002ee8565b815260200190600190039081620018415790505b5090506000826001600160401b038111156200187f576200187f620032df565b604051908082528060200260200182016040528015620018a9578160200160208202803683370190505b5090506000805b60665481101562001a675760006001600160a01b031660668281548110620018dc57620018dc62003581565b60009182526020909120600260059092020101546001600160a01b03161462001a52578083838151811062001915576200191562003581565b6020026020010181815250506066818154811062001937576200193762003581565b90600052602060002090600502016040518060a00160405290816000820180546200196290620036ed565b80601f01602080910402602001604051908101604052809291908181526020018280546200199090620036ed565b8015620019e15780601f10620019b557610100808354040283529160200191620019e1565b820191906000526020600020905b815481529060010190602001808311620019c357829003601f168201915b505050918352505060018201546001600160a01b039081166020830152600283015416604082015260038201546060820152600490910154608090910152845185908490811062001a365762001a3662003581565b6020026020010181905250818062001a4e90620035ad565b9250505b8062001a5e81620035ad565b915050620018b0565b5090959194509092505050565b62001a7e62002921565b60005b60665481101562001adb57816001600160a01b03166066828154811062001aac5762001aac62003581565b60009182526020909120600260059092020101546001600160a01b0316141562001adf5762001adb8162001eb4565b5050565b8062001aeb81620035ad565b91505062001a81565b62001afe62002921565b8162001b465760405162461bcd60e51b81526020600482015260166024820152752737903232b83637bcb2b9399039bab8383634b2b21760511b6044820152606401620004fd565b60005b8281101562001bc05781606a600086868581811062001b6c5762001b6c62003581565b905060200201602081019062001b839190620030bb565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558062001bb781620035ad565b91505062001b49565b50505050565b6001600160a01b03811660009081526067602052604081205460609182916001600160401b0381111562001bfe5762001bfe620032df565b60405190808252806020026020018201604052801562001c28578160200160208202803683370190505b506001600160a01b038516600090815260676020526040812054919250906001600160401b0381111562001c605762001c60620032df565b60405190808252806020026020018201604052801562001c9d57816020015b62001c8962002ee8565b81526020019060019003908162001c7f5790505b509050600062001cac62001789565b91505060005b6001600160a01b03871660009081526067602052604090205481101562001dc2576001600160a01b038716600090815260676020526040902080548290811062001d005762001d0062003581565b906000526020600020015484828151811062001d205762001d2062003581565b6020026020010181815250508160676000896001600160a01b03166001600160a01b03168152602001908152602001600020828154811062001d665762001d6662003581565b90600052602060002001548151811062001d845762001d8462003581565b602002602001015183828151811062001da15762001da162003581565b6020026020010181905250808062001db990620035ad565b91505062001cb2565b50919590945092505050565b6066818154811062001ddf57600080fd5b906000526020600020906005020160009150905080600001805462001e0490620036ed565b80601f016020809104026020016040519081016040528092919081815260200182805462001e3290620036ed565b801562001e835780601f1062001e575761010080835404028352916020019162001e83565b820191906000526020600020905b81548152906001019060200180831162001e6557829003601f168201915b5050505060018301546002840154600385015460049095015493946001600160a01b03928316949290911692509085565b62001ebe62002921565b60006066828154811062001ed65762001ed662003581565b6000918252602090912060059091020160028101549091506001600160a01b031662001f455760405162461bcd60e51b815260206004820152601760248201527f706f6f6c20616c726561647920646570726563617465640000000000000000006044820152606401620004fd565b60018101546001600160a01b03166000908152606760205260408120905b81548110156200202c578382828154811062001f835762001f8362003581565b9060005260206000200154141562002017578154829062001fa7906001906200372a565b8154811062001fba5762001fba62003581565b906000526020600020015482828154811062001fda5762001fda62003581565b90600052602060002001819055508180548062001ffb5762001ffb62003744565b600190038181906000526020600020016000905590556200202c565b806200202381620035ad565b91505062001f63565b506002820180546001600160a01b03166000908152606860209081526040808320805460ff1916600190811790915584546001600160a01b0319908116909555860180549094169093558251908101928390528190526200208f91849162002f37565b505060006003820181905560049091015550565b600054610100900460ff1615808015620020c45750600054600160ff909116105b80620020e05750303b158015620020e0575060005460ff166001145b620021455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620004fd565b6000805460ff19166001179055801562002169576000805461ff0019166101001790555b620021743362002d62565b6069805460ff191684151517905560005b8251811015620021f1576001606a6000858481518110620021aa57620021aa62003581565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620021e881620035ad565b91505062002185565b50801562002236576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001620005b6565b505050565b60606000805b606654811015620022b55760006001600160a01b0316606682815481106200226d576200226d62003581565b60009182526020909120600260059092020101546001600160a01b031614620022a057816200229c81620035ad565b9250505b80620022ac81620035ad565b91505062002241565b506000816001600160401b03811115620022d357620022d3620032df565b6040519080825280602002602001820160405280156200231057816020015b620022fc62002ee8565b815260200190600190039081620022f25790505b5090506000805b606654811015620024a75760006001600160a01b03166066828154811062002343576200234362003581565b60009182526020909120600260059092020101546001600160a01b0316146200249257606681815481106200237c576200237c62003581565b90600052602060002090600502016040518060a0016040529081600082018054620023a790620036ed565b80601f0160208091040260200160405190810160405280929190818152602001828054620023d590620036ed565b8015620024265780601f10620023fa5761010080835404028352916020019162002426565b820191906000526020600020905b8154815290600101906020018083116200240857829003601f168201915b505050918352505060018201546001600160a01b03908116602083015260028301541660408201526003820154606082015260049091015460809091015283836200247181620035ad565b94508151811062002486576200248662003581565b60200260200101819052505b806200249e81620035ad565b91505062002317565b50909392505050565b620024ba62002921565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6060806000806200253362001789565b91505060005b81518110156200261a5781818151811062002558576200255862003581565b6020026020010151604001516001600160a01b031663d9e0ea6b876040518263ffffffff1660e01b81526004016200259f91906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015620025db575060408051601f3d908101601f19168201909252620025d89181019062003648565b60015b620025e657620025f5565b80620025f3575062002605565b505b826200260181620035ad565b9350505b806200261181620035ad565b91505062002539565b506000826001600160401b03811115620026385762002638620032df565b60405190808252806020026020018201604052801562002662578160200160208202803683370190505b5090506000836001600160401b03811115620026825762002682620032df565b604051908082528060200260200182016040528015620026bf57816020015b620026ab62002ee8565b815260200190600190039081620026a15790505b5090506000805b845181101562000a6757848181518110620026e557620026e562003581565b6020026020010151604001516001600160a01b031663d9e0ea6b8a6040518263ffffffff1660e01b81526004016200272c91906001600160a01b0391909116815260200190565b602060405180830381865afa92505050801562002768575060408051601f3d908101601f19168201909252620027659181019062003648565b60015b620027735762002782565b80620027805750620027f2565b505b8084838151811062002798576200279862003581565b602002602001018181525050848181518110620027b957620027b962003581565b6020026020010151838381518110620027d657620027d662003581565b60200260200101819052508180620027ee90620035ad565b9250505b80620027fe81620035ad565b915050620026c6565b6065546001600160a01b031633146200285b5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401620004fd565b6000620028706033546001600160a01b031690565b6065549091506001600160a01b03166200288a8162002da4565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910162001737565b6033546001600160a01b031633146200297d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004fd565b565b600083471015620029d35760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401620004fd565b815162002a235760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401620004fd565b8282516020840186f590506001600160a01b03811662002a865760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401620004fd565b9392505050565b6001600160a01b03811660009081526068602052604081205460ff161562002b065760405162461bcd60e51b815260206004820152602560248201527f506f6f6c20616c72656164792065786973747320696e207468652064697265636044820152643a37b93c9760d91b6064820152608401620004fd565b60695460ff16158062002b285750336000908152606a602052604090205460ff165b62002b825760405162461bcd60e51b8152602060048201526024808201527f53656e646572206973206e6f74206f6e206465706c6f7965722077686974656c60448201526334b9ba1760e11b6064820152608401620004fd565b60648351111562002bcf5760405162461bcd60e51b81526020600482015260166024820152752737903837b7b6103730b6b29039bab8383634b2b21760511b6044820152606401620004fd565b6040805160a081018252848152336020808301919091526001600160a01b0385169282019290925243606082015242608082015260668054600181018255600091909152815180519293849360059093027f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354019262002c52928492019062002f37565b50602082810151600183810180546001600160a01b03199081166001600160a01b0394851617909155604080870151600287018054909316941693909317905560608501516003850155608090940151600490930192909255336000908152606790915220606654909162002cc7916200372a565b81546001818101845560009384526020808520909201929092556001600160a01b0386168352606890526040909120805460ff1916821790556066547f18075ab463b4dc5842f37ecd67abeb192eda5d073f2c08509e189ad173d5c0209162002d30916200372a565b8260405162002d419291906200375a565b60405180910390a160665462002d5a906001906200372a565b949350505050565b600054610100900460ff1662002d8c5760405162461bcd60e51b8152600401620004fd9062003775565b62002d9662002df6565b62002da18162002da4565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1662002e205760405162461bcd60e51b8152600401620004fd9062003775565b6200297d600054610100900460ff1662002e4e5760405162461bcd60e51b8152600401620004fd9062003775565b6200297d3362002da4565b82805462002e6790620036ed565b90600052602060002090601f01602090048101928262002e8b576000855562002ed6565b82601f1062002ea65782800160ff1982351617855562002ed6565b8280016001018555821562002ed6579182015b8281111562002ed657823582559160200191906001019062002eb9565b5062002ee492915062002fb4565b5090565b6040518060a001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b6119d880620037c183390190565b82805462002f4590620036ed565b90600052602060002090601f01602090048101928262002f69576000855562002ed6565b82601f1062002f8457805160ff191683800117855562002ed6565b8280016001018555821562002ed6579182015b8281111562002ed657825182559160200191906001019062002f97565b5b8082111562002ee4576000815560010162002fb5565b801515811462002da157600080fd5b803562002fe78162002fcb565b919050565b60006020828403121562002fff57600080fd5b813562002a868162002fcb565b6000806000604084860312156200302257600080fd5b83356001600160401b03808211156200303a57600080fd5b818601915086601f8301126200304f57600080fd5b8135818111156200305f57600080fd5b8760208260051b85010111156200307557600080fd5b602092830195509350508401356200308d8162002fcb565b809150509250925092565b6001600160a01b038116811462002da157600080fd5b803562002fe78162003098565b600060208284031215620030ce57600080fd5b813562002a868162003098565b60008083601f840112620030ee57600080fd5b5081356001600160401b038111156200310657600080fd5b6020830191508360208285010111156200311f57600080fd5b9250929050565b6000806000604084860312156200313c57600080fd5b8335925060208401356001600160401b038111156200315a57600080fd5b6200316886828701620030db565b9497909650939450505050565b60005b838110156200319257818101518382015260200162003178565b8381111562001bc05750506000910152565b60008151808452620031be81602086016020860162003175565b601f01601f19169290920160200192915050565b6000815160a08452620031e960a0850182620031a4565b9050602083015160018060a01b038082166020870152806040860151166040870152505060608301516060850152608083015160808501528091505092915050565b600081518084526020808501808196508360051b8101915082860160005b858110156200327757828403895262003264848351620031d2565b9885019893509084019060010162003249565b5091979650505050505050565b604080825283519082018190526000906020906060840190828701845b82811015620032bf57815184529284019290840190600101620032a1565b50505083810382850152620032d581866200322b565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620033205762003320620032df565b604052919050565b60008060008060008060008060e0898b0312156200334557600080fd5b88356001600160401b03808211156200335d57600080fd5b818b0191508b601f8301126200337257600080fd5b8135602082821115620033895762003389620032df565b6200339d601f8301601f19168201620032f5565b8281528e82848701011115620033b257600080fd5b828286018383013760008184018301529b50620033d18d8201620030ae565b9a50505060408b0135915080821115620033ea57600080fd5b50620033f98b828c01620030db565b90975095506200340e905060608a0162002fda565b93506080890135925060a089013591506200342c60c08a01620030ae565b90509295985092959890939650565b6000602082840312156200344e57600080fd5b5035919050565b60a0815260006200346a60a0830188620031a4565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b60008060408385031215620034ab57600080fd5b8235620034b88162002fcb565b91506020838101356001600160401b0380821115620034d657600080fd5b818601915086601f830112620034eb57600080fd5b813581811115620035005762003500620032df565b8060051b915062003513848301620032f5565b81815291830184019184810190898411156200352e57600080fd5b938501935b838510156200355c57843592506200354b8362003098565b828252938501939085019062003533565b8096505050505050509250929050565b60208152600062002a8660208301846200322b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415620035c457620035c462003597565b5060010190565b6040808252810183905260008460608301825b8681101562003612578235620035f48162003098565b6001600160a01b0316825260209283019290910190600101620035de565b5080925050508215156020830152949350505050565b6000602082840312156200363b57600080fd5b815162002a868162003098565b6000602082840312156200365b57600080fd5b815162002a868162002fcb565b600084516200367c81846020890162003175565b8201838582376000930192835250909392505050565b6bffffffffffffffffffffffff198460601b16815260008351620036be81601485016020880162003175565b60149201918201929092526034019392505050565b600060208284031215620036e657600080fd5b5051919050565b600181811c908216806200370257607f821691505b602082108114156200372457634e487b7160e01b600052602260045260246000fd5b50919050565b6000828210156200373f576200373f62003597565b500390565b634e487b7160e01b600052603160045260246000fd5b82815260406020820152600062002d5a6040830184620031d2565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe60806040526002805461ffff60a01b191661010160a01b17905534801561002557600080fd5b506040516119d83803806119d883398101604081905261004491610077565b60018054336001600160a01b031991821617909155600080549091166001600160a01b03929092169190911790556100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b611922806100b66000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806387f7630311610130578063bb82aa5e116100b8578063dce154491161007c578063dce154491461060e578063e6653f3d14610621578063e875544614610635578063e9c714f21461063e578063f851a4401461064657610232565b8063bb82aa5e146105b9578063c6c5b0dd146105c1578063c91a424f146105d4578063cf6bfd2d146105e7578063d251fefc146105fb57610232565b80639b19251a116100ff5780639b19251a1461055a578063ac0b0bb71461057d578063b095721014610591578063b71d1a0c1461059e578063ba49f54a146105b157610232565b806387f76303146104c257806389cd9855146104d65780638e8f294b146104eb578063940cd6f11461052f57610232565b80633c94786f116101be5780636bd02b8a116101825780636bd02b8a146104435780636d154ea514610456578063731f0c2b146104795780637515bafa1461049c5780637dc0d1d0146104af57610232565b80633c94786f146103de5780634a584432146103f25780634ada90af1461041257806352d84d1e1461041b5780636333d0011461042e57610232565b80631c819e43116102055780631c819e431461033657806321af45691461036457806324a3d6221461038f57806326782247146103a257806331ff47fa146103b557610232565b80630225ab9d146102a957806302c3bcbb146102cf5780630a755ec2146102ef57806316dc15fe14610313575b60006102496000356001600160e01b031916610659565b90506001600160a01b03811661028557604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156102a4573d6000f35b3d6000fd5b6102bc6102b736600461148a565b610679565b6040519081526020015b60405180910390f35b6102bc6102dd3660046114c4565b60186020526000908152604090205481565b60025461030390600160a81b900460ff1681565b60405190151581526020016102c6565b6103036103213660046114c4565b600d6020526000908152604090205460ff1681565b6103036103443660046114e1565b601d60209081526000928352604080842090915290825290205460ff1681565b601654610377906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b601354610377906001600160a01b031681565b600254610377906001600160a01b031681565b6103776103c33660046114c4565b600e602052600090815260409020546001600160a01b031681565b60135461030390600160a01b900460ff1681565b6102bc6104003660046114c4565b60176020526000908152604090205481565b6102bc60055481565b61037761042936600461151a565b61070f565b610436610739565b6040516102c69190611533565b61037761045136600461151a565b610748565b6103036104643660046114c4565b60156020526000908152604090205460ff1681565b6103036104873660046114c4565b60146020526000908152604090205460ff1681565b6103776104aa36600461151a565b610758565b600354610377906001600160a01b031681565b60135461030390600160b01b900460ff1681565b6104e96104e43660046114e1565b610768565b005b6105186104f93660046114c4565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102c6565b6102bc61053d3660046114e1565b601c60209081526000928352604080842090915290825290205481565b6103036105683660046114c4565b60106020526000908152604090205460ff1681565b60135461030390600160b81b900460ff1681565b600f546103039060ff1681565b6102bc6105ac3660046114c4565b6107ba565b6104e961083b565b610377610984565b6103776105cf36600461151a565b6109ae565b600054610377906001600160a01b031681565b60025461030390600160a01b900460ff1681565b61037761060936600461151a565b6109be565b61037761061c366004611580565b6109ce565b60135461030390600160a81b900460ff1681565b6102bc60045481565b6102bc610a06565b600154610377906001600160a01b031681565b6000610673826000805160206118ce833981519152610aec565b92915050565b6000610683610b92565b6106935761067360016005610be4565b60025460ff600160a81b90910416151582151514156106b3576000610673565b60028054831515600160a81b0260ff60a81b199091161790556040517f10f9a0a95673b0837d1dce21fd3bffcb6d760435e9b5300b75a271182f75f8229061070090841515815260200190565b60405180910390a16000610673565b6009818154811061071f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060610743610c5d565b905090565b601b818154811061071f57600080fd5b600b818154811061071f57600080fd5b610770610b92565b6107ac5760405162461bcd60e51b815260206004820152600d60248201526c085d5b985d5d1a1bdc9a5e9959609a1b604482015260640161027c565b6107b68282610ccf565b5050565b60006107c4610b92565b6107d4576106736001600f610be4565b600280546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160005b9392505050565b3330148061084c575061084c610b92565b61088a5760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b604482015260640161027c565b6000610894610984565b6000805460405163bbcdd6d360e01b81526001600160a01b0380851660048301529394509192169063bbcdd6d390602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090691906115c2565b905061091181610cf0565b806001600160a01b0316826001600160a01b0316146107b6576040805160048152602481018252602080820180516001600160e01b0316632eb96f3160e11b1790528251808401909352600c83526b08589958dbdb59481a5b5c1b60a21b9083015261097f91309190610df8565b505050565b60006107436040518060600160405280602881526020016118ee6028913980519060200120610659565b6019818154811061071f57600080fd5b6011818154811061071f57600080fd5b600760205281600052604060002081815481106109ea57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6002546000906001600160a01b031633141580610a21575033155b15610a325761074360016000610be4565b60018054600280546001600160a01b038082166001600160a01b031980861682179096559490911690915560408051919092168082526020820184905292917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600254604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b8054600090815b81811015610b8757846001600160e01b031916846000018281548110610b1b57610b1b6115df565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610b7557836000018181548110610b5657610b566115df565b6000918252602090912001546001600160a01b03169250610673915050565b80610b7f8161160b565b915050610af3565b506000949350505050565b6001546000906001600160a01b031633148015610bb85750600254600160a81b900460ff165b8061074357506000546001600160a01b031633148015610743575050600254600160a01b900460ff1690565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836014811115610c1957610c196115ac565b83601a811115610c2b57610c2b6115ac565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610834576108346115ac565b60606000805160206118ce833981519152600101805480602002602001604051908101604052809291908181526020018280548015610cc557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ca7575b5050505050905090565b6001600160a01b03811615610ce757610ce781610e94565b6107b682610fc4565b60008054604051631978a0bf60e31b81526001600160a01b0384811660048301529091169063cbc505f890602401600060405180830381865afa158015610d3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d639190810190611691565b90506000610d6f610c5d565b905060005b8151811015610db157610d9f828281518110610d9257610d926115df565b6020026020010151610e94565b80610da98161160b565b915050610d74565b5060005b8251811015610df257610de0838281518110610dd357610dd36115df565b6020026020010151610fc4565b80610dea8161160b565b915050610db5565b50505050565b6060600080856001600160a01b031685604051610e15919061175c565b6000604051808303816000865af19150503d8060008114610e52576040519150601f19603f3d011682016040523d82523d6000602084013e610e57565b606091505b509150915081610e8b57805115610e715780518082602001fd5b8360405162461bcd60e51b815260040161027c9190611778565b95945050505050565b6000805160206118ce833981519152610eac826110bc565b60005b600182015460ff8216101561097f57826001600160a01b0316826001018260ff1681548110610ee057610ee06115df565b6000918252602090912001546001600160a01b03161415610fb257600180830180549091610f0d916117ab565b81548110610f1d57610f1d6115df565b6000918252602090912001546001830180546001600160a01b039092169160ff8416908110610f4e57610f4e6115df565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600101805480610f8f57610f8f6117c2565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610fbc816117d8565b915050610eaf565b6000805160206118ce83398151915260005b600182015460ff8216101561107c57826001600160a01b0316826001018260ff1681548110611007576110076115df565b6000918252602090912001546001600160a01b0316141561106a5760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c7265616479206164646564000000000000000000604482015260640161027c565b80611074816117d8565b915050610fd6565b506110868261127b565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261112491908101906117f8565b90506000805160206118ce83398151915260005b82518161ffff161015610df2576000838261ffff168151811061115d5761115d6115df565b602002602001015190506111718184610aec565b6001600160a01b0316856001600160a01b03161461119157611191611895565b600061119d8285611402565b845490915084906111b0906001906117ab565b815481106111c0576111c06115df565b90600052602060002001846000018261ffff16815481106111e3576111e36115df565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080611244576112446117c2565b600082815260209020810160001990810180546001600160c01b031916905501905550819050611273816118ab565b915050611138565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e391908101906117f8565b6000805160206118ce83398151915280549192509060005b83518110156113fb576000848281518110611318576113186115df565b60200260200101519050600061132e8286610aec565b90506001600160a01b0381161561137357604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b038216602482015260440161027c565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b03199092169390921692909217919091179055836113e3816118ab565b945050505080806113f39061160b565b9150506112fb565b5050505050565b8054600090815b8161ffff168161ffff16101561147e57846001600160e01b031916846000018261ffff168154811061143d5761143d6115df565b600091825260209091200154600160a01b900460e01b6001600160e01b031916141561146c5791506106739050565b80611476816118ab565b915050611409565b5061ffff949350505050565b60006020828403121561149c57600080fd5b8135801515811461083457600080fd5b6001600160a01b03811681146114c157600080fd5b50565b6000602082840312156114d657600080fd5b8135610834816114ac565b600080604083850312156114f457600080fd5b82356114ff816114ac565b9150602083013561150f816114ac565b809150509250929050565b60006020828403121561152c57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156115745783516001600160a01b03168352928401929184019160010161154f565b50909695505050505050565b6000806040838503121561159357600080fd5b823561159e816114ac565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156115d457600080fd5b8151610834816114ac565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561161f5761161f6115f5565b5060010190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561166557611665611626565b604052919050565b600067ffffffffffffffff82111561168757611687611626565b5060051b60200190565b600060208083850312156116a457600080fd5b825167ffffffffffffffff8111156116bb57600080fd5b8301601f810185136116cc57600080fd5b80516116df6116da8261166d565b61163c565b81815260059190911b820183019083810190878311156116fe57600080fd5b928401925b82841015611725578351611716816114ac565b82529284019290840190611703565b979650505050505050565b60005b8381101561174b578181015183820152602001611733565b83811115610df25750506000910152565b6000825161176e818460208701611730565b9190910192915050565b6020815260008251806020840152611797816040850160208701611730565b601f01601f19169190910160400192915050565b6000828210156117bd576117bd6115f5565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156117ef576117ef6115f5565b60010192915050565b6000602080838503121561180b57600080fd5b825167ffffffffffffffff81111561182257600080fd5b8301601f8101851361183357600080fd5b80516118416116da8261166d565b81815260059190911b8201830190838101908783111561186057600080fd5b928401925b828410156117255783516001600160e01b0319811681146118865760008081fd5b82529284019290840190611865565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156118c3576118c36115f5565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b26155f6465706c6f794d61726b65742875696e74382c62797465732c62797465732c75696e7432353629a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "607:14954:2:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040523480156200001157600080fd5b5060043610620001cc5760003560e01c80638da5cb5b116200010d578063b5f3f64011620000a3578063e30c3978116200007a578063e30c3978146200044a578063f2fde38b146200045e578063f348960d1462000475578063fc4d33f9146200048c57600080fd5b8063b5f3f6401462000403578063b86579d4146200041a578063d88ff1f4146200043157600080fd5b8063a155497c11620000e4578063a155497c1462000385578063a3ed91c6146200039c578063a970e76c14620003b3578063ac4afa3814620003d957600080fd5b80638da5cb5b146200033e5780638ec0835414620003645780639b29177f146200036e57600080fd5b806343e20a1d116200018357806358b896d3116200015a57806358b896d314620002cf5780635d0eb31a14620003045780636e96dfd7146200031d578063715018a6146200033457600080fd5b806343e20a1d1462000288578063448ca55814620002ae5780634ae26ea114620002c557600080fd5b806304f03c6f14620001d15780630a83d1b014620001ea5780631e1c6a07146200020157806320c32bfe146200023c578063218a3bbe146200025357806326bb81d7146200027a575b600080fd5b620001e8620001e236600462002fec565b62000496565b005b620001e8620001fb3660046200300c565b620004b3565b6200022762000212366004620030bb565b60686020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b620001e86200024d36600462003126565b620005c3565b6200026a6200026436600462002fec565b62000769565b6040516200023392919062003284565b606954620002279060ff1681565b6200022762000299366004620030bb565b606b6020526000908152604090205460ff1681565b6200026a620002bf366004620030bb565b62000a75565b6200026a62000e21565b620002e6620002e036600462003328565b620010de565b604080519283526001600160a01b0390911660208301520162000233565b6200030e606c5481565b60405190815260200162000233565b620001e86200032e366004620030bb565b620016d7565b620001e862001743565b6033546001600160a01b03165b6040516001600160a01b03909116815260200162000233565b6200026a62001789565b620001e86200037f366004620030bb565b62001a74565b620001e8620003963660046200300c565b62001af4565b6200026a620003ad366004620030bb565b62001bc6565b62000227620003c4366004620030bb565b606a6020526000908152604090205460ff1681565b620003f0620003ea3660046200343b565b62001dce565b6040516200023395949392919062003455565b620001e8620004143660046200343b565b62001eb4565b620001e86200042b36600462003497565b620020a3565b6200043b6200223b565b6040516200023391906200356c565b6065546200034b906001600160a01b031681565b620001e86200046f366004620030bb565b620024b0565b6200026a62000486366004620030bb565b62002523565b620001e862002807565b620004a062002921565b6069805460ff1916911515919091179055565b620004bd62002921565b81620005065760405162461bcd60e51b815260206004820152601360248201527227379030b236b4b7399039bab8383634b2b21760691b60448201526064015b60405180910390fd5b60005b82811015620005805781606b60008686858181106200052c576200052c62003581565b9050602002016020810190620005439190620030bb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806200057781620035ad565b91505062000509565b507f31b67e6853df85403a8c4f4f46dc53f48f700d6917c8e3ec8c77a0e6fd56793b838383604051620005b693929190620035cb565b60405180910390a1505050565b600060668481548110620005db57620005db62003581565b600091825260209182902060026005909202010154604080516303e1469160e61b815290516001600160a01b039092169350839263f851a440926004808401938290030181865afa15801562000635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200065b919062003628565b6001600160a01b0316336001600160a01b0316148015620006dc5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006dc919062003648565b80620006f257506033546001600160a01b031633145b6200072e5760405162461bcd60e51b815260206004820152600b60248201526a10b832b936b4b9b9b4b7b760a91b6044820152606401620004fd565b82826066868154811062000746576200074662003581565b6000918252602090912062000762936005909202019162002e59565b5050505050565b6060806000806200077962001789565b91505060005b81518110156200086d576000828281518110620007a057620007a062003581565b6020026020010151604001519050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200080b575060408051601f3d908101601f19168201909252620008089181019062003628565b60015b620008165762000847565b6001600160a01b0381166000908152606b602052604090205460ff161515881515146200084557505062000858565b505b836200085381620035ad565b945050505b806200086481620035ad565b9150506200077f565b506000826001600160401b038111156200088b576200088b620032df565b604051908082528060200260200182016040528015620008b5578160200160208202803683370190505b5090506000836001600160401b03811115620008d557620008d5620032df565b6040519080825280602002602001820160405280156200091257816020015b620008fe62002ee8565b815260200190600190039081620008f45790505b5090506000805b845181101562000a675760008582815181106200093a576200093a62003581565b6020026020010151604001519050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015620009a5575060408051601f3d908101601f19168201909252620009a29181019062003628565b60015b620009b057620009e1565b6001600160a01b0381166000908152606b602052604090205460ff1615158b151514620009df57505062000a52565b505b81858481518110620009f757620009f762003581565b60200260200101818152505085828151811062000a185762000a1862003581565b602002602001015184848151811062000a355762000a3562003581565b6020026020010181905250828062000a4d90620035ad565b935050505b8062000a5e81620035ad565b91505062000919565b509197909650945050505050565b60608060008062000a8562001789565b91505060005b815181101562000bd057600082828151811062000aac5762000aac62003581565b6020026020010151604001519050806001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000b17575060408051601f3d908101601f1916820190925262000b149181019062003648565b60015b62000b225762000baa565b80158062000b9a5750604051634d8c928d60e11b81526001600160a01b038981166004830152831690639b19251a90602401602060405180830381865afa15801562000b72573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b98919062003648565b155b1562000ba857505062000bbb565b505b8362000bb681620035ad565b945050505b8062000bc781620035ad565b91505062000a8b565b506000826001600160401b0381111562000bee5762000bee620032df565b60405190808252806020026020018201604052801562000c18578160200160208202803683370190505b5090506000836001600160401b0381111562000c385762000c38620032df565b60405190808252806020026020018201604052801562000c7557816020015b62000c6162002ee8565b81526020019060019003908162000c575790505b5090506000805b845181101562000a6757600085828151811062000c9d5762000c9d62003581565b6020026020010151604001519050806001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000d08575060408051601f3d908101601f1916820190925262000d059181019062003648565b60015b62000d135762000d9b565b80158062000d8b5750604051634d8c928d60e11b81526001600160a01b038c81166004830152831690639b19251a90602401602060405180830381865afa15801562000d63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d89919062003648565b155b1562000d9957505062000e0c565b505b8185848151811062000db15762000db162003581565b60200260200101818152505085828151811062000dd25762000dd262003581565b602002602001015184848151811062000def5762000def62003581565b6020026020010181905250828062000e0790620035ad565b935050505b8062000e1881620035ad565b91505062000c7c565b60608060008062000e3162001789565b91505060005b815181101562000efe5781818151811062000e565762000e5662003581565b6020026020010151604001516001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000ebe575060408051601f3d908101601f1916820190925262000ebb9181019062003648565b60015b62000ec95762000ed9565b801562000ed7575062000ee9565b505b8262000ee581620035ad565b9350505b8062000ef581620035ad565b91505062000e37565b506000826001600160401b0381111562000f1c5762000f1c620032df565b60405190808252806020026020018201604052801562000f46578160200160208202803683370190505b5090506000836001600160401b0381111562000f665762000f66620032df565b60405190808252806020026020018201604052801562000fa357816020015b62000f8f62002ee8565b81526020019060019003908162000f855790505b5090506000805b8451811015620010d15784818151811062000fc95762000fc962003581565b6020026020010151604001516001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562001031575060408051601f3d908101601f191682019092526200102e9181019062003648565b60015b6200103c576200104c565b80156200104a5750620010bc565b505b8084838151811062001062576200106262003581565b60200260200101818152505084818151811062001083576200108362003581565b6020026020010151838381518110620010a057620010a062003581565b60200260200101819052508180620010b890620035ad565b9250505b80620010c881620035ad565b91505062000faa565b5091969095509350505050565b6000806001600160a01b0389166200115f5760405162461bcd60e51b815260206004820152603960248201527f4e6f20436f6d7074726f6c6c657220696d706c656d656e746174696f6e20636f60448201527f6e74726163742061646472657373207370656369666965642e000000000000006064820152608401620004fd565b6001600160a01b038316620011ca5760405162461bcd60e51b815260206004820152602a60248201527f4e6f2050726963654f7261636c6520636f6e747261637420616464726573732060448201526939b832b1b4b334b2b21760b11b6064820152608401620004fd565b600060405180602001620011de9062002f29565b601f1982820381018352601f9091011660408190526200120691908b908b9060200162003668565b60405160208183030381529060405290506000620012686000338e606c600081546200123290620035ad565b91829055506040516200124b9392919060200162003692565b60405160208183030381529060405280519060200120846200297f565b90506000819050806001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012ab57600080fd5b505af1158015620012c0573d6000803e3d6000fd5b505060405163317b0b7760e01b8152600481018b90526001600160a01b038416925063317b0b7791506024016020604051808303816000875af11580156200130c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013329190620036d3565b15620013815760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f2073657420706f6f6c20636c6f736520666163746f722e6044820152606401620004fd565b604051634fd42e1760e01b8152600481018890526001600160a01b03821690634fd42e17906024016020604051808303816000875af1158015620013c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ef9190620036d3565b15620014505760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f2073657420706f6f6c206c69717569646174696f6e20696044820152683731b2b73a34bb329760b91b6064820152608401620004fd565b6040516355ee1fe160e01b81526001600160a01b0387811660048301528216906355ee1fe1906024016020604051808303816000875af115801562001499573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014bf9190620036d3565b156200150e5760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f2073657420706f6f6c207072696365206f7261636c652e6044820152606401620004fd565b8815620015e957604051634a956fad60e11b8152600160048201526001600160a01b0382169063952adf5a906024016020604051808303816000875af11580156200155d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015839190620036d3565b15620015e95760405162461bcd60e51b815260206004820152602e60248201527f4661696c656420746f20656e666f72636520737570706c6965722f626f72726f60448201526d3bb2b9103bb434ba32b634b9ba1760911b6064820152608401620004fd565b604051632dc7468360e21b81523360048201526001600160a01b0382169063b71d1a0c906024016020604051808303816000875af115801562001630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016569190620036d3565b15620016b85760405162461bcd60e51b815260206004820152602a60248201527f4661696c656420746f207365742070656e64696e672061646d696e206f6e20556044820152693734ba3937b63632b91760b11b6064820152608401620004fd565b620016c48d8362002a8d565b9d919c50909a5050505050505050505050565b620016e162002921565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6200174d62002921565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b6044820152606401620004fd565b6060806000805b606654811015620018045760006001600160a01b031660668281548110620017bc57620017bc62003581565b60009182526020909120600260059092020101546001600160a01b031614620017ef5781620017eb81620035ad565b9250505b80620017fb81620035ad565b91505062001790565b506000816001600160401b03811115620018225762001822620032df565b6040519080825280602002602001820160405280156200185f57816020015b6200184b62002ee8565b815260200190600190039081620018415790505b5090506000826001600160401b038111156200187f576200187f620032df565b604051908082528060200260200182016040528015620018a9578160200160208202803683370190505b5090506000805b60665481101562001a675760006001600160a01b031660668281548110620018dc57620018dc62003581565b60009182526020909120600260059092020101546001600160a01b03161462001a52578083838151811062001915576200191562003581565b6020026020010181815250506066818154811062001937576200193762003581565b90600052602060002090600502016040518060a00160405290816000820180546200196290620036ed565b80601f01602080910402602001604051908101604052809291908181526020018280546200199090620036ed565b8015620019e15780601f10620019b557610100808354040283529160200191620019e1565b820191906000526020600020905b815481529060010190602001808311620019c357829003601f168201915b505050918352505060018201546001600160a01b039081166020830152600283015416604082015260038201546060820152600490910154608090910152845185908490811062001a365762001a3662003581565b6020026020010181905250818062001a4e90620035ad565b9250505b8062001a5e81620035ad565b915050620018b0565b5090959194509092505050565b62001a7e62002921565b60005b60665481101562001adb57816001600160a01b03166066828154811062001aac5762001aac62003581565b60009182526020909120600260059092020101546001600160a01b0316141562001adf5762001adb8162001eb4565b5050565b8062001aeb81620035ad565b91505062001a81565b62001afe62002921565b8162001b465760405162461bcd60e51b81526020600482015260166024820152752737903232b83637bcb2b9399039bab8383634b2b21760511b6044820152606401620004fd565b60005b8281101562001bc05781606a600086868581811062001b6c5762001b6c62003581565b905060200201602081019062001b839190620030bb565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558062001bb781620035ad565b91505062001b49565b50505050565b6001600160a01b03811660009081526067602052604081205460609182916001600160401b0381111562001bfe5762001bfe620032df565b60405190808252806020026020018201604052801562001c28578160200160208202803683370190505b506001600160a01b038516600090815260676020526040812054919250906001600160401b0381111562001c605762001c60620032df565b60405190808252806020026020018201604052801562001c9d57816020015b62001c8962002ee8565b81526020019060019003908162001c7f5790505b509050600062001cac62001789565b91505060005b6001600160a01b03871660009081526067602052604090205481101562001dc2576001600160a01b038716600090815260676020526040902080548290811062001d005762001d0062003581565b906000526020600020015484828151811062001d205762001d2062003581565b6020026020010181815250508160676000896001600160a01b03166001600160a01b03168152602001908152602001600020828154811062001d665762001d6662003581565b90600052602060002001548151811062001d845762001d8462003581565b602002602001015183828151811062001da15762001da162003581565b6020026020010181905250808062001db990620035ad565b91505062001cb2565b50919590945092505050565b6066818154811062001ddf57600080fd5b906000526020600020906005020160009150905080600001805462001e0490620036ed565b80601f016020809104026020016040519081016040528092919081815260200182805462001e3290620036ed565b801562001e835780601f1062001e575761010080835404028352916020019162001e83565b820191906000526020600020905b81548152906001019060200180831162001e6557829003601f168201915b5050505060018301546002840154600385015460049095015493946001600160a01b03928316949290911692509085565b62001ebe62002921565b60006066828154811062001ed65762001ed662003581565b6000918252602090912060059091020160028101549091506001600160a01b031662001f455760405162461bcd60e51b815260206004820152601760248201527f706f6f6c20616c726561647920646570726563617465640000000000000000006044820152606401620004fd565b60018101546001600160a01b03166000908152606760205260408120905b81548110156200202c578382828154811062001f835762001f8362003581565b9060005260206000200154141562002017578154829062001fa7906001906200372a565b8154811062001fba5762001fba62003581565b906000526020600020015482828154811062001fda5762001fda62003581565b90600052602060002001819055508180548062001ffb5762001ffb62003744565b600190038181906000526020600020016000905590556200202c565b806200202381620035ad565b91505062001f63565b506002820180546001600160a01b03166000908152606860209081526040808320805460ff1916600190811790915584546001600160a01b0319908116909555860180549094169093558251908101928390528190526200208f91849162002f37565b505060006003820181905560049091015550565b600054610100900460ff1615808015620020c45750600054600160ff909116105b80620020e05750303b158015620020e0575060005460ff166001145b620021455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620004fd565b6000805460ff19166001179055801562002169576000805461ff0019166101001790555b620021743362002d62565b6069805460ff191684151517905560005b8251811015620021f1576001606a6000858481518110620021aa57620021aa62003581565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620021e881620035ad565b91505062002185565b50801562002236576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001620005b6565b505050565b60606000805b606654811015620022b55760006001600160a01b0316606682815481106200226d576200226d62003581565b60009182526020909120600260059092020101546001600160a01b031614620022a057816200229c81620035ad565b9250505b80620022ac81620035ad565b91505062002241565b506000816001600160401b03811115620022d357620022d3620032df565b6040519080825280602002602001820160405280156200231057816020015b620022fc62002ee8565b815260200190600190039081620022f25790505b5090506000805b606654811015620024a75760006001600160a01b03166066828154811062002343576200234362003581565b60009182526020909120600260059092020101546001600160a01b0316146200249257606681815481106200237c576200237c62003581565b90600052602060002090600502016040518060a0016040529081600082018054620023a790620036ed565b80601f0160208091040260200160405190810160405280929190818152602001828054620023d590620036ed565b8015620024265780601f10620023fa5761010080835404028352916020019162002426565b820191906000526020600020905b8154815290600101906020018083116200240857829003601f168201915b505050918352505060018201546001600160a01b03908116602083015260028301541660408201526003820154606082015260049091015460809091015283836200247181620035ad565b94508151811062002486576200248662003581565b60200260200101819052505b806200249e81620035ad565b91505062002317565b50909392505050565b620024ba62002921565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6060806000806200253362001789565b91505060005b81518110156200261a5781818151811062002558576200255862003581565b6020026020010151604001516001600160a01b031663d9e0ea6b876040518263ffffffff1660e01b81526004016200259f91906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015620025db575060408051601f3d908101601f19168201909252620025d89181019062003648565b60015b620025e657620025f5565b80620025f3575062002605565b505b826200260181620035ad565b9350505b806200261181620035ad565b91505062002539565b506000826001600160401b03811115620026385762002638620032df565b60405190808252806020026020018201604052801562002662578160200160208202803683370190505b5090506000836001600160401b03811115620026825762002682620032df565b604051908082528060200260200182016040528015620026bf57816020015b620026ab62002ee8565b815260200190600190039081620026a15790505b5090506000805b845181101562000a6757848181518110620026e557620026e562003581565b6020026020010151604001516001600160a01b031663d9e0ea6b8a6040518263ffffffff1660e01b81526004016200272c91906001600160a01b0391909116815260200190565b602060405180830381865afa92505050801562002768575060408051601f3d908101601f19168201909252620027659181019062003648565b60015b620027735762002782565b80620027805750620027f2565b505b8084838151811062002798576200279862003581565b602002602001018181525050848181518110620027b957620027b962003581565b6020026020010151838381518110620027d657620027d662003581565b60200260200101819052508180620027ee90620035ad565b9250505b80620027fe81620035ad565b915050620026c6565b6065546001600160a01b031633146200285b5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401620004fd565b6000620028706033546001600160a01b031690565b6065549091506001600160a01b03166200288a8162002da4565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910162001737565b6033546001600160a01b031633146200297d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004fd565b565b600083471015620029d35760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401620004fd565b815162002a235760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401620004fd565b8282516020840186f590506001600160a01b03811662002a865760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401620004fd565b9392505050565b6001600160a01b03811660009081526068602052604081205460ff161562002b065760405162461bcd60e51b815260206004820152602560248201527f506f6f6c20616c72656164792065786973747320696e207468652064697265636044820152643a37b93c9760d91b6064820152608401620004fd565b60695460ff16158062002b285750336000908152606a602052604090205460ff165b62002b825760405162461bcd60e51b8152602060048201526024808201527f53656e646572206973206e6f74206f6e206465706c6f7965722077686974656c60448201526334b9ba1760e11b6064820152608401620004fd565b60648351111562002bcf5760405162461bcd60e51b81526020600482015260166024820152752737903837b7b6103730b6b29039bab8383634b2b21760511b6044820152606401620004fd565b6040805160a081018252848152336020808301919091526001600160a01b0385169282019290925243606082015242608082015260668054600181018255600091909152815180519293849360059093027f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354019262002c52928492019062002f37565b50602082810151600183810180546001600160a01b03199081166001600160a01b0394851617909155604080870151600287018054909316941693909317905560608501516003850155608090940151600490930192909255336000908152606790915220606654909162002cc7916200372a565b81546001818101845560009384526020808520909201929092556001600160a01b0386168352606890526040909120805460ff1916821790556066547f18075ab463b4dc5842f37ecd67abeb192eda5d073f2c08509e189ad173d5c0209162002d30916200372a565b8260405162002d419291906200375a565b60405180910390a160665462002d5a906001906200372a565b949350505050565b600054610100900460ff1662002d8c5760405162461bcd60e51b8152600401620004fd9062003775565b62002d9662002df6565b62002da18162002da4565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1662002e205760405162461bcd60e51b8152600401620004fd9062003775565b6200297d600054610100900460ff1662002e4e5760405162461bcd60e51b8152600401620004fd9062003775565b6200297d3362002da4565b82805462002e6790620036ed565b90600052602060002090601f01602090048101928262002e8b576000855562002ed6565b82601f1062002ea65782800160ff1982351617855562002ed6565b8280016001018555821562002ed6579182015b8281111562002ed657823582559160200191906001019062002eb9565b5062002ee492915062002fb4565b5090565b6040518060a001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b6119d880620037c183390190565b82805462002f4590620036ed565b90600052602060002090601f01602090048101928262002f69576000855562002ed6565b82601f1062002f8457805160ff191683800117855562002ed6565b8280016001018555821562002ed6579182015b8281111562002ed657825182559160200191906001019062002f97565b5b8082111562002ee4576000815560010162002fb5565b801515811462002da157600080fd5b803562002fe78162002fcb565b919050565b60006020828403121562002fff57600080fd5b813562002a868162002fcb565b6000806000604084860312156200302257600080fd5b83356001600160401b03808211156200303a57600080fd5b818601915086601f8301126200304f57600080fd5b8135818111156200305f57600080fd5b8760208260051b85010111156200307557600080fd5b602092830195509350508401356200308d8162002fcb565b809150509250925092565b6001600160a01b038116811462002da157600080fd5b803562002fe78162003098565b600060208284031215620030ce57600080fd5b813562002a868162003098565b60008083601f840112620030ee57600080fd5b5081356001600160401b038111156200310657600080fd5b6020830191508360208285010111156200311f57600080fd5b9250929050565b6000806000604084860312156200313c57600080fd5b8335925060208401356001600160401b038111156200315a57600080fd5b6200316886828701620030db565b9497909650939450505050565b60005b838110156200319257818101518382015260200162003178565b8381111562001bc05750506000910152565b60008151808452620031be81602086016020860162003175565b601f01601f19169290920160200192915050565b6000815160a08452620031e960a0850182620031a4565b9050602083015160018060a01b038082166020870152806040860151166040870152505060608301516060850152608083015160808501528091505092915050565b600081518084526020808501808196508360051b8101915082860160005b858110156200327757828403895262003264848351620031d2565b9885019893509084019060010162003249565b5091979650505050505050565b604080825283519082018190526000906020906060840190828701845b82811015620032bf57815184529284019290840190600101620032a1565b50505083810382850152620032d581866200322b565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620033205762003320620032df565b604052919050565b60008060008060008060008060e0898b0312156200334557600080fd5b88356001600160401b03808211156200335d57600080fd5b818b0191508b601f8301126200337257600080fd5b8135602082821115620033895762003389620032df565b6200339d601f8301601f19168201620032f5565b8281528e82848701011115620033b257600080fd5b828286018383013760008184018301529b50620033d18d8201620030ae565b9a50505060408b0135915080821115620033ea57600080fd5b50620033f98b828c01620030db565b90975095506200340e905060608a0162002fda565b93506080890135925060a089013591506200342c60c08a01620030ae565b90509295985092959890939650565b6000602082840312156200344e57600080fd5b5035919050565b60a0815260006200346a60a0830188620031a4565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b60008060408385031215620034ab57600080fd5b8235620034b88162002fcb565b91506020838101356001600160401b0380821115620034d657600080fd5b818601915086601f830112620034eb57600080fd5b813581811115620035005762003500620032df565b8060051b915062003513848301620032f5565b81815291830184019184810190898411156200352e57600080fd5b938501935b838510156200355c57843592506200354b8362003098565b828252938501939085019062003533565b8096505050505050509250929050565b60208152600062002a8660208301846200322b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415620035c457620035c462003597565b5060010190565b6040808252810183905260008460608301825b8681101562003612578235620035f48162003098565b6001600160a01b0316825260209283019290910190600101620035de565b5080925050508215156020830152949350505050565b6000602082840312156200363b57600080fd5b815162002a868162003098565b6000602082840312156200365b57600080fd5b815162002a868162002fcb565b600084516200367c81846020890162003175565b8201838582376000930192835250909392505050565b6bffffffffffffffffffffffff198460601b16815260008351620036be81601485016020880162003175565b60149201918201929092526034019392505050565b600060208284031215620036e657600080fd5b5051919050565b600181811c908216806200370257607f821691505b602082108114156200372457634e487b7160e01b600052602260045260246000fd5b50919050565b6000828210156200373f576200373f62003597565b500390565b634e487b7160e01b600052603160045260246000fd5b82815260406020820152600062002d5a6040830184620031d2565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe60806040526002805461ffff60a01b191661010160a01b17905534801561002557600080fd5b506040516119d83803806119d883398101604081905261004491610077565b60018054336001600160a01b031991821617909155600080549091166001600160a01b03929092169190911790556100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b611922806100b66000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806387f7630311610130578063bb82aa5e116100b8578063dce154491161007c578063dce154491461060e578063e6653f3d14610621578063e875544614610635578063e9c714f21461063e578063f851a4401461064657610232565b8063bb82aa5e146105b9578063c6c5b0dd146105c1578063c91a424f146105d4578063cf6bfd2d146105e7578063d251fefc146105fb57610232565b80639b19251a116100ff5780639b19251a1461055a578063ac0b0bb71461057d578063b095721014610591578063b71d1a0c1461059e578063ba49f54a146105b157610232565b806387f76303146104c257806389cd9855146104d65780638e8f294b146104eb578063940cd6f11461052f57610232565b80633c94786f116101be5780636bd02b8a116101825780636bd02b8a146104435780636d154ea514610456578063731f0c2b146104795780637515bafa1461049c5780637dc0d1d0146104af57610232565b80633c94786f146103de5780634a584432146103f25780634ada90af1461041257806352d84d1e1461041b5780636333d0011461042e57610232565b80631c819e43116102055780631c819e431461033657806321af45691461036457806324a3d6221461038f57806326782247146103a257806331ff47fa146103b557610232565b80630225ab9d146102a957806302c3bcbb146102cf5780630a755ec2146102ef57806316dc15fe14610313575b60006102496000356001600160e01b031916610659565b90506001600160a01b03811661028557604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156102a4573d6000f35b3d6000fd5b6102bc6102b736600461148a565b610679565b6040519081526020015b60405180910390f35b6102bc6102dd3660046114c4565b60186020526000908152604090205481565b60025461030390600160a81b900460ff1681565b60405190151581526020016102c6565b6103036103213660046114c4565b600d6020526000908152604090205460ff1681565b6103036103443660046114e1565b601d60209081526000928352604080842090915290825290205460ff1681565b601654610377906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b601354610377906001600160a01b031681565b600254610377906001600160a01b031681565b6103776103c33660046114c4565b600e602052600090815260409020546001600160a01b031681565b60135461030390600160a01b900460ff1681565b6102bc6104003660046114c4565b60176020526000908152604090205481565b6102bc60055481565b61037761042936600461151a565b61070f565b610436610739565b6040516102c69190611533565b61037761045136600461151a565b610748565b6103036104643660046114c4565b60156020526000908152604090205460ff1681565b6103036104873660046114c4565b60146020526000908152604090205460ff1681565b6103776104aa36600461151a565b610758565b600354610377906001600160a01b031681565b60135461030390600160b01b900460ff1681565b6104e96104e43660046114e1565b610768565b005b6105186104f93660046114c4565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102c6565b6102bc61053d3660046114e1565b601c60209081526000928352604080842090915290825290205481565b6103036105683660046114c4565b60106020526000908152604090205460ff1681565b60135461030390600160b81b900460ff1681565b600f546103039060ff1681565b6102bc6105ac3660046114c4565b6107ba565b6104e961083b565b610377610984565b6103776105cf36600461151a565b6109ae565b600054610377906001600160a01b031681565b60025461030390600160a01b900460ff1681565b61037761060936600461151a565b6109be565b61037761061c366004611580565b6109ce565b60135461030390600160a81b900460ff1681565b6102bc60045481565b6102bc610a06565b600154610377906001600160a01b031681565b6000610673826000805160206118ce833981519152610aec565b92915050565b6000610683610b92565b6106935761067360016005610be4565b60025460ff600160a81b90910416151582151514156106b3576000610673565b60028054831515600160a81b0260ff60a81b199091161790556040517f10f9a0a95673b0837d1dce21fd3bffcb6d760435e9b5300b75a271182f75f8229061070090841515815260200190565b60405180910390a16000610673565b6009818154811061071f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060610743610c5d565b905090565b601b818154811061071f57600080fd5b600b818154811061071f57600080fd5b610770610b92565b6107ac5760405162461bcd60e51b815260206004820152600d60248201526c085d5b985d5d1a1bdc9a5e9959609a1b604482015260640161027c565b6107b68282610ccf565b5050565b60006107c4610b92565b6107d4576106736001600f610be4565b600280546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160005b9392505050565b3330148061084c575061084c610b92565b61088a5760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b604482015260640161027c565b6000610894610984565b6000805460405163bbcdd6d360e01b81526001600160a01b0380851660048301529394509192169063bbcdd6d390602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090691906115c2565b905061091181610cf0565b806001600160a01b0316826001600160a01b0316146107b6576040805160048152602481018252602080820180516001600160e01b0316632eb96f3160e11b1790528251808401909352600c83526b08589958dbdb59481a5b5c1b60a21b9083015261097f91309190610df8565b505050565b60006107436040518060600160405280602881526020016118ee6028913980519060200120610659565b6019818154811061071f57600080fd5b6011818154811061071f57600080fd5b600760205281600052604060002081815481106109ea57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6002546000906001600160a01b031633141580610a21575033155b15610a325761074360016000610be4565b60018054600280546001600160a01b038082166001600160a01b031980861682179096559490911690915560408051919092168082526020820184905292917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600254604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b8054600090815b81811015610b8757846001600160e01b031916846000018281548110610b1b57610b1b6115df565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610b7557836000018181548110610b5657610b566115df565b6000918252602090912001546001600160a01b03169250610673915050565b80610b7f8161160b565b915050610af3565b506000949350505050565b6001546000906001600160a01b031633148015610bb85750600254600160a81b900460ff165b8061074357506000546001600160a01b031633148015610743575050600254600160a01b900460ff1690565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836014811115610c1957610c196115ac565b83601a811115610c2b57610c2b6115ac565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610834576108346115ac565b60606000805160206118ce833981519152600101805480602002602001604051908101604052809291908181526020018280548015610cc557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ca7575b5050505050905090565b6001600160a01b03811615610ce757610ce781610e94565b6107b682610fc4565b60008054604051631978a0bf60e31b81526001600160a01b0384811660048301529091169063cbc505f890602401600060405180830381865afa158015610d3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d639190810190611691565b90506000610d6f610c5d565b905060005b8151811015610db157610d9f828281518110610d9257610d926115df565b6020026020010151610e94565b80610da98161160b565b915050610d74565b5060005b8251811015610df257610de0838281518110610dd357610dd36115df565b6020026020010151610fc4565b80610dea8161160b565b915050610db5565b50505050565b6060600080856001600160a01b031685604051610e15919061175c565b6000604051808303816000865af19150503d8060008114610e52576040519150601f19603f3d011682016040523d82523d6000602084013e610e57565b606091505b509150915081610e8b57805115610e715780518082602001fd5b8360405162461bcd60e51b815260040161027c9190611778565b95945050505050565b6000805160206118ce833981519152610eac826110bc565b60005b600182015460ff8216101561097f57826001600160a01b0316826001018260ff1681548110610ee057610ee06115df565b6000918252602090912001546001600160a01b03161415610fb257600180830180549091610f0d916117ab565b81548110610f1d57610f1d6115df565b6000918252602090912001546001830180546001600160a01b039092169160ff8416908110610f4e57610f4e6115df565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600101805480610f8f57610f8f6117c2565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610fbc816117d8565b915050610eaf565b6000805160206118ce83398151915260005b600182015460ff8216101561107c57826001600160a01b0316826001018260ff1681548110611007576110076115df565b6000918252602090912001546001600160a01b0316141561106a5760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c7265616479206164646564000000000000000000604482015260640161027c565b80611074816117d8565b915050610fd6565b506110868261127b565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261112491908101906117f8565b90506000805160206118ce83398151915260005b82518161ffff161015610df2576000838261ffff168151811061115d5761115d6115df565b602002602001015190506111718184610aec565b6001600160a01b0316856001600160a01b03161461119157611191611895565b600061119d8285611402565b845490915084906111b0906001906117ab565b815481106111c0576111c06115df565b90600052602060002001846000018261ffff16815481106111e3576111e36115df565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080611244576112446117c2565b600082815260209020810160001990810180546001600160c01b031916905501905550819050611273816118ab565b915050611138565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e391908101906117f8565b6000805160206118ce83398151915280549192509060005b83518110156113fb576000848281518110611318576113186115df565b60200260200101519050600061132e8286610aec565b90506001600160a01b0381161561137357604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b038216602482015260440161027c565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b03199092169390921692909217919091179055836113e3816118ab565b945050505080806113f39061160b565b9150506112fb565b5050505050565b8054600090815b8161ffff168161ffff16101561147e57846001600160e01b031916846000018261ffff168154811061143d5761143d6115df565b600091825260209091200154600160a01b900460e01b6001600160e01b031916141561146c5791506106739050565b80611476816118ab565b915050611409565b5061ffff949350505050565b60006020828403121561149c57600080fd5b8135801515811461083457600080fd5b6001600160a01b03811681146114c157600080fd5b50565b6000602082840312156114d657600080fd5b8135610834816114ac565b600080604083850312156114f457600080fd5b82356114ff816114ac565b9150602083013561150f816114ac565b809150509250929050565b60006020828403121561152c57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156115745783516001600160a01b03168352928401929184019160010161154f565b50909695505050505050565b6000806040838503121561159357600080fd5b823561159e816114ac565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156115d457600080fd5b8151610834816114ac565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561161f5761161f6115f5565b5060010190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561166557611665611626565b604052919050565b600067ffffffffffffffff82111561168757611687611626565b5060051b60200190565b600060208083850312156116a457600080fd5b825167ffffffffffffffff8111156116bb57600080fd5b8301601f810185136116cc57600080fd5b80516116df6116da8261166d565b61163c565b81815260059190911b820183019083810190878311156116fe57600080fd5b928401925b82841015611725578351611716816114ac565b82529284019290840190611703565b979650505050505050565b60005b8381101561174b578181015183820152602001611733565b83811115610df25750506000910152565b6000825161176e818460208701611730565b9190910192915050565b6020815260008251806020840152611797816040850160208701611730565b601f01601f19169190910160400192915050565b6000828210156117bd576117bd6115f5565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156117ef576117ef6115f5565b60010192915050565b6000602080838503121561180b57600080fd5b825167ffffffffffffffff81111561182257600080fd5b8301601f8101851361183357600080fd5b80516118416116da8261166d565b81815260059190911b8201830190838101908783111561186057600080fd5b928401925b828410156117255783516001600160e01b0319811681146118865760008081fd5b82529284019290840190611865565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156118c3576118c36115f5565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b26155f6465706c6f794d61726b65742875696e74382c62797465732c62797465732c75696e7432353629a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "607:14954:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2389:120;;;;;;:::i;:::-;;:::i;:::-;;12547:280;;;;;;:::i;:::-;;:::i;1771:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1963:14:486;;1956:22;1938:41;;1926:2;1911:18;1771:42:2;;;;;;;;11634:324;;;;;;:::i;:::-;;:::i;13027:1056::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2029:36::-;;;;;;;;;12063:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14393:1166;;;;;;:::i;:::-;;:::i;8958:907::-;;;:::i;5623:1773::-;;;;;;:::i;:::-;;:::i;:::-;;;;7391:25:486;;;-1:-1:-1;;;;;7452:32:486;;;7447:2;7432:18;;7425:60;7364:18;5623:1773:2;7217:274:486;12179:27:2;;;;;;;;;7642:25:486;;;7630:2;7615:18;12179:27:2;7496:177:486;1602:386:134;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;1441:85:436:-;1513:6;;-1:-1:-1;;;;;1513:6:436;1441:85;;;-1:-1:-1;;;;;7842:32:486;;;7824:51;;7812:2;7797:18;1441:85:436;7678:203:486;7596:578:2;;;:::i;3873:223::-;;;;;;:::i;:::-;;:::i;2719:253::-;;;;;;:::i;:::-;;:::i;11030:542::-;;;;;;:::i;:::-;;:::i;2175:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1483:19;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;4100:839::-;;;;;;:::i;:::-;;:::i;906:316::-;;;;;;:::i;:::-;;:::i;8340:435::-;;;:::i;:::-;;;;;;;:::i;530:27:134:-;;;;;-1:-1:-1;;;;;530:27:134;;;2839:155;;;;;;:::i;:::-;;:::i;10048:885:2:-;;;;;;:::i;:::-;;:::i;2158:541:134:-;;;:::i;2389:120:2:-;1334:13:436;:11;:13::i;:::-;2470:24:2::1;:34:::0;;-1:-1:-1;;2470:34:2::1;::::0;::::1;;::::0;;;::::1;::::0;;2389:120::o;12547:280::-;1334:13:436;:11;:13::i;:::-;12649:17:2;12641:49:::1;;;::::0;-1:-1:-1;;;12641:49:2;;10316:2:486;12641:49:2::1;::::0;::::1;10298:21:486::0;10355:2;10335:18;;;10328:30;-1:-1:-1;;;10374:18:486;;;10367:49;10433:18;;12641:49:2::1;;;;;;;;;12701:9;12696:78;12716:17:::0;;::::1;12696:78;;;12768:6;12740:14;:25;12755:6;;12762:1;12755:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12740:25:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12740:25:2;:34;;-1:-1:-1;;12740:34:2::1;::::0;::::1;;::::0;;;::::1;::::0;;12735:3;::::1;::::0;::::1;:::i;:::-;;;;12696:78;;;;12785:37;12807:6;;12815;12785:37;;;;;;;;:::i;:::-;;;;;;;;12547:280:::0;;;:::o;11634:324::-;11707:29;11756:5;11762;11756:12;;;;;;;;:::i;:::-;;;;;;;;;;:24;:12;;;;;:24;;11817:20;;;-1:-1:-1;;;11817:20:2;;;;-1:-1:-1;;;;;11756:24:2;;;;-1:-1:-1;11756:24:2;;11817:18;;:20;;;;;;;;;;11756:24;11817:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11803:34:2;:10;-1:-1:-1;;;;;11803:34:2;;:67;;;;;11841:12;-1:-1:-1;;;;;11841:27:2;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11802:94;;;-1:-1:-1;1513:6:436;;-1:-1:-1;;;;;1513:6:436;11875:10:2;:21;11802:94;11787:136;;;;-1:-1:-1;;;11787:136:2;;12373:2:486;11787:136:2;;;12355:21:486;12412:2;12392:18;;;12385:30;-1:-1:-1;;;12431:18:486;;;12424:41;12482:18;;11787:136:2;12171:335:486;11787:136:2;11949:4;;11929:5;11935;11929:12;;;;;;;;:::i;:::-;;;;;;;;;:24;;:12;;;;;;:24;:::i;:::-;;11701:257;11634:324;;;:::o;13027:1056::-;13111:16;13129:13;13150:19;13183:25;13212:16;:14;:16::i;:::-;13180:48;;;13239:9;13234:300;13258:11;:18;13254:1;:22;13234:300;;;13291:28;13339:11;13351:1;13339:14;;;;;;;;:::i;:::-;;;;;;;:26;;;13291:75;;13379:11;-1:-1:-1;;;;;13379:17:2;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13379:19:2;;;;;;;;-1:-1:-1;;13379:19:2;;;;;;;;;;;;:::i;:::-;;;13375:131;;;;;-1:-1:-1;;;;;13457:21:2;;;;;;:14;:21;;;;;;;;13437:41;;;;;;13433:55;;13480:8;;;;13433:55;13399:98;13375:131;13514:13;;;;:::i;:::-;;;;13283:251;13234:300;13278:3;;;;:::i;:::-;;;;13234:300;;;;13540:24;13581:11;-1:-1:-1;;;;;13567:26:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13567:26:2;;13540:53;;13599:25;13638:11;-1:-1:-1;;;;;13627:23:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;13599:51;;13656:13;13685:9;13680:363;13704:11;:18;13700:1;:22;13680:363;;;13737:28;13785:11;13797:1;13785:14;;;;;;;;:::i;:::-;;;;;;;:26;;;13737:75;;13825:11;-1:-1:-1;;;;;13825:17:2;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13825:19:2;;;;;;;;-1:-1:-1;;13825:19:2;;;;;;;;;;;;:::i;:::-;;;13821:131;;;;;-1:-1:-1;;;;;13903:21:2;;;;;;:14;:21;;;;;;;;13883:41;;;;;;13879:55;;13926:8;;;;13879:55;13845:98;13821:131;13977:1;13960:7;13968:5;13960:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;14007:11;14019:1;14007:14;;;;;;;;:::i;:::-;;;;;;;13986:11;13998:5;13986:18;;;;;;;;:::i;:::-;;;;;;:35;;;;14029:7;;;;;:::i;:::-;;;;13729:314;13680:363;13724:3;;;;:::i;:::-;;;;13680:363;;;-1:-1:-1;14057:7:2;;14066:11;;-1:-1:-1;13027:1056:2;-1:-1:-1;;;;;13027:1056:2:o;14393:1166::-;14491:16;14509:13;14532:19;14564:25;14593:16;:14;:16::i;:::-;14561:48;;;14620:9;14615:330;14639:11;:18;14635:1;:22;14615:330;;;14672:28;14720:11;14732:1;14720:14;;;;;;;;:::i;:::-;;;;;;;:26;;;14672:75;;14760:11;-1:-1:-1;;;;;14760:28:2;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14760:30:2;;;;;;;;-1:-1:-1;;14760:30:2;;;;;;;;;;;;:::i;:::-;;;14756:161;;;;;14838:16;14837:17;:52;;;-1:-1:-1;14859:30:2;;-1:-1:-1;;;14859:30:2;;-1:-1:-1;;;;;7842:32:486;;;14859:30:2;;;7824:51:486;14859:21:2;;;;;7797:18:486;;14859:30:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14858:31;14837:52;14833:66;;;14891:8;;;;14833:66;14791:117;14756:161;14925:13;;;;:::i;:::-;;;;14664:281;14615:330;14659:3;;;;:::i;:::-;;;;14615:330;;;;14951:24;14992:11;-1:-1:-1;;;;;14978:26:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14978:26:2;;14951:53;;15010:37;15061:11;-1:-1:-1;;;;;15050:23:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15010:63;;15079:13;15108:9;15103:404;15127:11;:18;15123:1;:22;15103:404;;;15160:28;15208:11;15220:1;15208:14;;;;;;;;:::i;:::-;;;;;;;:26;;;15160:75;;15247:11;-1:-1:-1;;;;;15247:28:2;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15247:30:2;;;;;;;;-1:-1:-1;;15247:30:2;;;;;;;;;;;;:::i;:::-;;;15243:161;;;;;15325:16;15324:17;:52;;;-1:-1:-1;15346:30:2;;-1:-1:-1;;;15346:30:2;;-1:-1:-1;;;;;7842:32:486;;;15346:30:2;;;7824:51:486;15346:21:2;;;;;7797:18:486;;15346:30:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15345:31;15324:52;15320:66;;;15378:8;;;;15320:66;15278:117;15243:161;15429:1;15412:7;15420:5;15412:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;15471:11;15483:1;15471:14;;;;;;;;:::i;:::-;;;;;;;15438:23;15462:5;15438:30;;;;;;;;:::i;:::-;;;;;;:47;;;;15493:7;;;;;:::i;:::-;;;;15152:355;15103:404;15147:3;;;;:::i;:::-;;;;15103:404;;8958:907;9007:16;9025:13;9046:19;9079:25;9108:16;:14;:16::i;:::-;9076:48;;;9135:9;9130:243;9154:11;:18;9150:1;:22;9130:243;;;9208:11;9220:1;9208:14;;;;;;;;:::i;:::-;;;;;;;:26;;;-1:-1:-1;;;;;9191:61:2;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9191:63:2;;;;;;;;-1:-1:-1;;9191:63:2;;;;;;;;;;;;:::i;:::-;;;9187:158;;;;;9301:16;9297:30;;;9319:8;;;9297:30;9255:81;9187:158;9353:13;;;;:::i;:::-;;;;9130:243;9174:3;;;;:::i;:::-;;;;9130:243;;;;9379:24;9420:11;-1:-1:-1;;;;;9406:26:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9406:26:2;;9379:53;;9438:25;9477:11;-1:-1:-1;;;;;9466:23:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;9438:51;;9495:13;9524:9;9519:306;9543:11;:18;9539:1;:22;9519:306;;;9597:11;9609:1;9597:14;;;;;;;;:::i;:::-;;;;;;;:26;;;-1:-1:-1;;;;;9580:61:2;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9580:63:2;;;;;;;;-1:-1:-1;;9580:63:2;;;;;;;;;;;;:::i;:::-;;;9576:158;;;;;9690:16;9686:30;;;9708:8;;;9686:30;9644:81;9576:158;9759:1;9742:7;9750:5;9742:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;9789:11;9801:1;9789:14;;;;;;;;:::i;:::-;;;;;;;9768:11;9780:5;9768:18;;;;;;;;:::i;:::-;;;;;;:35;;;;9811:7;;;;;:::i;:::-;;;;9519:306;9563:3;;;;:::i;:::-;;;;9519:306;;;-1:-1:-1;9839:7:2;;9848:11;;-1:-1:-1;8958:907:2;-1:-1:-1;;;;8958:907:2:o;5623:1773::-;5864:7;;-1:-1:-1;;;;;5920:28:2;;5912:98;;;;-1:-1:-1;;;5912:98:2;;12713:2:486;5912:98:2;;;12695:21:486;12752:2;12732:18;;;12725:30;12791:34;12771:18;;;12764:62;12862:27;12842:18;;;12835:55;12907:19;;5912:98:2;12511:421:486;5912:98:2;-1:-1:-1;;;;;6024:25:2;;6016:80;;;;-1:-1:-1;;;6016:80:2;;13139:2:486;6016:80:2;;;13121:21:486;13178:2;13158:18;;;13151:30;13217:34;13197:18;;;13190:62;-1:-1:-1;;;13268:18:486;;;13261:40;13318:19;;6016:80:2;12937:406:486;6016:80:2;6179:35;6234:29;;;;;;;;:::i;:::-;-1:-1:-1;;6234:29:2;;;;;;;;;;;;;;;;6217:64;;6234:29;6265:15;;;;6234:29;6217:64;;:::i;:::-;;;;;;;;;;;;;6179:102;;6287:13;6303:139;6336:1;6372:10;6384:4;6392:12;;6390:14;;;;;:::i;:::-;;;;;-1:-1:-1;6355:50:2;;;;;;6390:14;6355:50;;;:::i;:::-;;;;;;;;;;;;;6345:61;;;;;;6414:22;6303:25;:139::i;:::-;6287:155;;6471:33;6524:5;6471:59;;6565:16;-1:-1:-1;;;;;6565:25:2;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6634:45:2;;-1:-1:-1;;;6634:45:2;;;;;7642:25:486;;;-1:-1:-1;;;;;6634:32:2;;;-1:-1:-1;6634:32:2;;-1:-1:-1;7615:18:486;;6634:45:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;6626:95;;;;-1:-1:-1;;;6626:95:2;;14688:2:486;6626:95:2;;;14670:21:486;;;14707:18;;;14700:30;14766:34;14746:18;;;14739:62;14818:18;;6626:95:2;14486:356:486;6626:95:2;6742:63;;-1:-1:-1;;;6742:63:2;;;;;7642:25:486;;;-1:-1:-1;;;;;6742:41:2;;;;;7615:18:486;;6742:63:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;6727:140;;;;-1:-1:-1;;;6727:140:2;;15049:2:486;6727:140:2;;;15031:21:486;15088:2;15068:18;;;15061:30;15127:34;15107:18;;;15100:62;-1:-1:-1;;;15178:18:486;;;15171:39;15227:19;;6727:140:2;14847:405:486;6727:140:2;6881:62;;-1:-1:-1;;;6881:62:2;;-1:-1:-1;;;;;7842:32:486;;;6881:62:2;;;7824:51:486;6881:32:2;;;;;7797:18:486;;6881:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;6873:112;;;;-1:-1:-1;;;6873:112:2;;15692:2:486;6873:112:2;;;15674:21:486;;;15711:18;;;15704:30;15770:34;15750:18;;;15743:62;15822:18;;6873:112:2;15490:356:486;6873:112:2;7013:16;7009:139;;;7045:47;;-1:-1:-1;;;7045:47:2;;7087:4;7045:47;;;1938:41:486;-1:-1:-1;;;;;7045:41:2;;;;;1911:18:486;;7045:47:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;7037:111;;;;-1:-1:-1;;;7037:111:2;;16053:2:486;7037:111:2;;;16035:21:486;16092:2;16072:18;;;16065:30;16131:34;16111:18;;;16104:62;-1:-1:-1;;;16182:18:486;;;16175:44;16236:19;;7037:111:2;15851:410:486;7037:111:2;7196:45;;-1:-1:-1;;;7196:45:2;;7230:10;7196:45;;;7824:51:486;-1:-1:-1;;;;;7196:33:2;;;;;7797:18:486;;7196:45:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;7188:105;;;;-1:-1:-1;;;7188:105:2;;16468:2:486;7188:105:2;;;16450:21:486;16507:2;16487:18;;;16480:30;16546:34;16526:18;;;16519:62;-1:-1:-1;;;16597:18:486;;;16590:40;16647:19;;7188:105:2;16266:406:486;7188:105:2;7357:26;7371:4;7377:5;7357:13;:26::i;:::-;7349:42;7385:5;;-1:-1:-1;5623:1773:2;;-1:-1:-1;;;;;;;;;;;5623:1773:2:o;1602:386:134:-;1334:13:436;:11;:13::i;:::-;1758:12:134::1;::::0;;-1:-1:-1;;;;;1830:30:134;;::::1;-1:-1:-1::0;;;;;;1830:30:134;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;16889:34:486::0;;;16954:2;16939:18;;16932:43;;;;1934:49:134::1;::::0;16824:18:486;1934:49:134::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:436;:11;:13::i;:::-;2804:26:134::1;::::0;-1:-1:-1;;;2804:26:134;;17188:2:486;2804:26:134::1;::::0;::::1;17170:21:486::0;17227:2;17207:18;;;17200:30;-1:-1:-1;;;17246:18:486;;;17239:46;17302:18;;2804:26:134::1;16986:340:486::0;7596:578:2;7643:16;7661:13;7682;7710:9;7705:105;7729:5;:12;7725:16;;7705:105;;;7792:1;-1:-1:-1;;;;;7760:34:2;:5;7766:1;7760:8;;;;;;;;:::i;:::-;;;;;;;;;:20;:8;;;;;:20;;-1:-1:-1;;;;;7760:20:2;:34;7756:47;;7796:7;;;;:::i;:::-;;;;7756:47;7743:3;;;;:::i;:::-;;;;7705:105;;;;7816:25;7855:5;-1:-1:-1;;;;;7844:17:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;7816:45;;7867:24;7908:5;-1:-1:-1;;;;;7894:20:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7894:20:2;;7867:47;;7921:13;7949:9;7944:190;7968:5;:12;7964:16;;7944:190;;;8031:1;-1:-1:-1;;;;;7999:34:2;:5;8005:1;7999:8;;;;;;;;:::i;:::-;;;;;;;;;:20;:8;;;;;:20;;-1:-1:-1;;;;;7999:20:2;:34;7995:133;;8062:1;8045:7;8053:5;8045:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;8094:5;8100:1;8094:8;;;;;;;;:::i;:::-;;;;;;;;;;;8073:29;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8073:29:2;;;-1:-1:-1;;8073:29:2;;;;-1:-1:-1;;;;;8073:29:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18;;:11;;8085:5;;8073:18;;;;;;:::i;:::-;;;;;;:29;;;;8112:7;;;;;:::i;:::-;;;;7995:133;7982:3;;;;:::i;:::-;;;;7944:190;;;-1:-1:-1;8148:7:2;;8157:11;;-1:-1:-1;7596:578:2;;-1:-1:-1;;;7596:578:2:o;3873:223::-;1334:13:436;:11;:13::i;:::-;3948:9:2::1;3943:149;3967:5;:12:::0;3963:16;::::1;3943:149;;;4022:11;-1:-1:-1::0;;;;;3998:35:2::1;:5;4004:1;3998:8;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:20:::1;:8;::::0;;::::1;;:20;::::0;-1:-1:-1;;;;;3998:20:2::1;:35;3994:92;;;4045:17;4060:1;4045:14;:17::i;:::-;3943:149;3873:223:::0;:::o;3994:92::-:1;3981:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3943:149;;2719:253:::0;1334:13:436;:11;:13::i;:::-;2827:20:2;2819:55:::1;;;::::0;-1:-1:-1;;;2819:55:2;;17918:2:486;2819:55:2::1;::::0;::::1;17900:21:486::0;17957:2;17937:18;;;17930:30;-1:-1:-1;;;17976:18:486;;;17969:52;18038:18;;2819:55:2::1;17716:346:486::0;2819:55:2::1;2885:9;2880:87;2900:20:::0;;::::1;2880:87;;;2961:6;2927:17;:31;2945:9;;2955:1;2945:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2927:31:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2927:31:2;:40;;-1:-1:-1;;2927:40:2::1;::::0;::::1;;::::0;;;::::1;::::0;;2922:3;::::1;::::0;::::1;:::i;:::-;;;;2880:87;;;;2719:253:::0;;;:::o;11030:542::-;-1:-1:-1;;;;;11177:24:2;;11136;11177;;;:15;:24;;;;;:31;11097:16;;;;-1:-1:-1;;;;;11163:46:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11163:46:2;-1:-1:-1;;;;;;11255:24:2;;11215:26;11255:24;;;:15;:24;;;;;:31;11136:73;;-1:-1:-1;11215:26:2;-1:-1:-1;;;;;11244:43:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11215:72;;11296:25;11325:16;:14;:16::i;:::-;11293:48;;;11353:9;11348:183;-1:-1:-1;;;;;11372:24:2;;;;;;:15;:24;;;;;:31;11368:35;;11348:183;;;-1:-1:-1;;;;;11431:24:2;;;;;;:15;:24;;;;;:27;;11456:1;;11431:27;;;;;;:::i;:::-;;;;;;;;;11418:7;11426:1;11418:10;;;;;;;;:::i;:::-;;;;;;:40;;;;;11484:11;11496:15;:24;11512:7;-1:-1:-1;;;;;11496:24:2;-1:-1:-1;;;;;11496:24:2;;;;;;;;;;;;11521:1;11496:27;;;;;;;;:::i;:::-;;;;;;;;;11484:40;;;;;;;;:::i;:::-;;;;;;;11466:12;11479:1;11466:15;;;;;;;;:::i;:::-;;;;;;:58;;;;11405:3;;;;;:::i;:::-;;;;11348:183;;;-1:-1:-1;11545:7:2;;11554:12;;-1:-1:-1;11030:542:2;-1:-1:-1;;;11030:542:2:o;1483:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1483:19:2;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1483:19:2;;;;;;;;;-1:-1:-1;1483:19:2;;:::o;4100:839::-;1334:13:436;:11;:13::i;:::-;4162:22:2::1;4187:5;4193;4187:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;4214:21;::::0;::::1;::::0;4187:12;;-1:-1:-1;;;;;;4214:21:2::1;4206:71;;;::::0;-1:-1:-1;;;4206:71:2;;18269:2:486;4206:71:2::1;::::0;::::1;18251:21:486::0;18308:2;18288:18;;;18281:30;18347:25;18327:18;;;18320:53;18390:18;;4206:71:2::1;18067:347:486::0;4206:71:2::1;4390:17;::::0;::::1;::::0;-1:-1:-1;;;;;4390:17:2::1;4341:30;4374:34:::0;;;:15:::1;:34;::::0;;;;;4414:211:::1;4438:19:::0;;4434:23;::::1;4414:211;;;4495:5;4476:12;4489:1;4476:15;;;;;;;;:::i;:::-;;;;;;;;;:24;4472:147;;;4543:19:::0;;4530:12;;4543:23:::1;::::0;4565:1:::1;::::0;4543:23:::1;:::i;:::-;4530:37;;;;;;;;:::i;:::-;;;;;;;;;4512:12;4525:1;4512:15;;;;;;;;:::i;:::-;;;;;;;;:55;;;;4577:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4605:5;;4472:147;4459:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4414:211;;;-1:-1:-1::0;4710:21:2::1;::::0;::::1;::::0;;-1:-1:-1;;;;;4710:21:2::1;4699:33;::::0;;;:10:::1;:33;::::0;;;;;;;:40;;-1:-1:-1;;4699:40:2::1;4735:4;4699:40:::0;;::::1;::::0;;;4773:34;;-1:-1:-1;;;;;;4773:34:2;;::::1;::::0;;;4813:17;::::1;:30:::0;;;;::::1;::::0;;;4849:19;;;;::::1;::::0;;;;;;;::::1;::::0;4710:9;;4849:19:::1;:::i;:::-;-1:-1:-1::0;;4898:1:2::1;4874:21;::::0;::::1;:25:::0;;;4905::::1;::::0;;::::1;:29:::0;-1:-1:-1;4100:839:2:o;906:316::-;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;18883:2:486;3314:201:439;;;18865:21:486;18922:2;18902:18;;;18895:30;18961:34;18941:18;;;18934:62;-1:-1:-1;;;19012:18:486;;;19005:44;19066:19;;3314:201:439;18681:410:486;3314:201:439;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;1020:30:2::1;1039:10;1020:18;:30::i;:::-;1056:24;:52:::0;;-1:-1:-1;;1056:52:2::1;::::0;::::1;;;::::0;;-1:-1:-1;1114:103:2::1;1138:18;:25;1134:1;:29;1114:103;;;1213:4;1170:17;:40;1188:18;1207:1;1188:21;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;1170:40:2::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;1170:40:2;:47;;-1:-1:-1;;1170:47:2::1;::::0;::::1;;::::0;;;::::1;::::0;;1165:3;::::1;::::0;::::1;:::i;:::-;;;;1114:103;;;;3640:14:439::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;19248:36:486;;3710:14:439;;19236:2:486;19221:18;3710:14:439;19096:194:486;3636:99:439;3258:483;906:316:2;;:::o;8340:435::-;8384:13;8405;8433:9;8428:105;8452:5;:12;8448:16;;8428:105;;;8515:1;-1:-1:-1;;;;;8483:34:2;:5;8489:1;8483:8;;;;;;;;:::i;:::-;;;;;;;;;:20;:8;;;;;:20;;-1:-1:-1;;;;;8483:20:2;:34;8479:47;;8519:7;;;;:::i;:::-;;;;8479:47;8466:3;;;;:::i;:::-;;;;8428:105;;;;8539:20;8573:5;-1:-1:-1;;;;;8562:17:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;8539:40;;8586:13;8614:9;8609:142;8633:5;:12;8629:16;;8609:142;;;8696:1;-1:-1:-1;;;;;8664:34:2;:5;8670:1;8664:8;;;;;;;;:::i;:::-;;;;;;;;;:20;:8;;;;;:20;;-1:-1:-1;;;;;8664:20:2;:34;8660:85;;8728:5;8734:1;8728:8;;;;;;;;:::i;:::-;;;;;;;;;;;8710:26;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8710:26:2;;;-1:-1:-1;;8710:26:2;;;;-1:-1:-1;;;;;8710:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;8717:7;;;;:::i;:::-;;;8710:15;;;;;;;;:::i;:::-;;;;;;:26;;;;8660:85;8647:3;;;;:::i;:::-;;;;8609:142;;;-1:-1:-1;8764:6:2;;8340:435;-1:-1:-1;;;8340:435:2:o;2839:155:134:-;1334:13:436;:11;:13::i;:::-;2937:12:134::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:134;;::::1;16889:34:486::0;;16959:15;;;16954:2;16939:18;;16932:43;2921:39:134::1;::::0;16824:18:486;2921:39:134::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:134::1;-1:-1:-1::0;;;;;2966:23:134;;;::::1;::::0;;;::::1;::::0;;2839:155::o;10048:885:2:-;10109:16;10127:13;10148:19;10181:25;10210:16;:14;:16::i;:::-;10178:48;;;10237:9;10232:226;10256:11;:18;10252:1;:22;10232:226;;;10310:11;10322:1;10310:14;;;;;;;;:::i;:::-;;;;;;;:26;;;-1:-1:-1;;;;;10293:57:2;;10351:4;10293:63;;;;;;;;;;;;;;-1:-1:-1;;;;;7842:32:486;;;;7824:51;;7812:2;7797:18;;7678:203;10293:63:2;;;;;;;;;;;;;;;;;;;-1:-1:-1;10293:63:2;;;;;;;;-1:-1:-1;;10293:63:2;;;;;;;;;;;;:::i;:::-;;;10289:141;;;;;10395:7;10390:22;;10404:8;;;10390:22;10357:64;10289:141;10438:13;;;;:::i;:::-;;;;10232:226;10276:3;;;;:::i;:::-;;;;10232:226;;;;10464:24;10505:11;-1:-1:-1;;;;;10491:26:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10491:26:2;;10464:53;;10523:25;10562:11;-1:-1:-1;;;;;10551:23:2;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10523:51;;10580:13;10609:9;10604:289;10628:11;:18;10624:1;:22;10604:289;;;10682:11;10694:1;10682:14;;;;;;;;:::i;:::-;;;;;;;:26;;;-1:-1:-1;;;;;10665:57:2;;10723:4;10665:63;;;;;;;;;;;;;;-1:-1:-1;;;;;7842:32:486;;;;7824:51;;7812:2;7797:18;;7678:203;10665:63:2;;;;;;;;;;;;;;;;;;;-1:-1:-1;10665:63:2;;;;;;;;-1:-1:-1;;10665:63:2;;;;;;;;;;;;:::i;:::-;;;10661:141;;;;;10767:7;10762:22;;10776:8;;;10762:22;10729:64;10661:141;10827:1;10810:7;10818:5;10810:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;10857:11;10869:1;10857:14;;;;;;;;:::i;:::-;;;;;;;10836:11;10848:5;10836:18;;;;;;;;:::i;:::-;;;;;;:35;;;;10879:7;;;;;:::i;:::-;;;;10604:289;10648:3;;;;:::i;:::-;;;;10604:289;;2158:541:134;2285:12;;-1:-1:-1;;;;;2285:12:134;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:134;;19497:2:486;2263:60:134;;;19479:21:486;19536:2;19516:18;;;19509:30;-1:-1:-1;;;19555:18:486;;;19548:51;19616:18;;2263:60:134;19295:345:486;2263:60:134;2378:16;2397:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;2397:7:134;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:134;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:134;;;2605:32;;;-1:-1:-1;;;;;16907:15:486;;16889:34;;-1:-1:-1;16954:2:486;16939:18;;16932:43;2605:32:134;;16824:18:486;2605:32:134;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;16907:15:486;;;16889:34;;2681:12:134;;;16954:2:486;16939:18;;16932:43;2648:46:134;;16824:18:486;2648:46:134;16677:304:486;1599:130:436;1513:6;;-1:-1:-1;;;;;1513:6:436;929:10:449;1662:23:436;1654:68;;;;-1:-1:-1;;;1654:68:436;;19847:2:486;1654:68:436;;;19829:21:486;;;19866:18;;;19859:30;19925:34;19905:18;;;19898:62;19977:18;;1654:68:436;19645:356:486;1654:68:436;1599:130::o;1092:514:450:-;1209:12;1266:6;1241:21;:31;;1233:73;;;;-1:-1:-1;;;1233:73:450;;20208:2:486;1233:73:450;;;20190:21:486;20247:2;20227:18;;;20220:30;20286:31;20266:18;;;20259:59;20335:18;;1233:73:450;20006:353:486;1233:73:450;1324:15;;1316:65;;;;-1:-1:-1;;;1316:65:450;;20566:2:486;1316:65:450;;;20548:21:486;;;20585:18;;;20578:30;20644:34;20624:18;;;20617:62;20696:18;;1316:65:450;20364:356:486;1316:65:450;1519:4;1508:8;1502:15;1495:4;1485:8;1481:19;1473:6;1465:59;1457:67;-1:-1:-1;;;;;;1551:18:450;;1543:56;;;;-1:-1:-1;;;1543:56:450;;20927:2:486;1543:56:450;;;20909:21:486;20966:2;20946:18;;;20939:30;21005:27;20985:18;;;20978:55;21050:18;;1543:56:450;20725:349:486;1543:56:450;1092:514;;;;;:::o;3231:638:2:-;-1:-1:-1;;;;;3337:23:2;;3313:7;3337:23;;;:10;:23;;;;;;;;3336:24;3328:74;;;;-1:-1:-1;;;3328:74:2;;21281:2:486;3328:74:2;;;21263:21:486;21320:2;21300:18;;;21293:30;21359:34;21339:18;;;21332:62;-1:-1:-1;;;21410:18:486;;;21403:35;21455:19;;3328:74:2;21079:401:486;3328:74:2;3417:24;;;;3416:25;;:58;;-1:-1:-1;3463:10:2;3445:29;;;;:17;:29;;;;;;;;3416:58;3408:107;;;;-1:-1:-1;;;3408:107:2;;21687:2:486;3408:107:2;;;21669:21:486;21726:2;21706:18;;;21699:30;21765:34;21745:18;;;21738:62;-1:-1:-1;;;21816:18:486;;;21809:34;21860:19;;3408:107:2;21485:400:486;3408:107:2;3551:3;3535:4;3529:18;:25;;3521:60;;;;-1:-1:-1;;;3521:60:2;;22092:2:486;3521:60:2;;;22074:21:486;22131:2;22111:18;;;22104:30;-1:-1:-1;;;22150:18:486;;;22143:52;22212:18;;3521:60:2;21890:346:486;3521:60:2;3606:66;;;;;;;;;;;3617:10;3606:66;;;;;;;;-1:-1:-1;;;;;3606:66:2;;;;;;;;;3642:12;3606:66;;;;3656:15;3606:66;;;;3678:5;:16;;;;;;;3587;3678;;;;;;;;3606:66;;;;3678:16;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3678:16:2;;;;;;;;;;;-1:-1:-1;;;;;;3678:16:2;;;-1:-1:-1;;;;;3678:16:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3716:10;-1:-1:-1;3700:27:2;;;:15;:27;;;;3733:5;:12;3700:27;;3733:16;;;:::i;:::-;3700:50;;;;;;;;-1:-1:-1;3700:50:2;;;;;;;;;;;;;;-1:-1:-1;;;;;3756:23:2;;;;:10;:23;;;;;;:30;;-1:-1:-1;;3756:30:2;;;;;3812:5;:12;3797:38;;3812:16;;;:::i;:::-;3830:4;3797:38;;;;;;;:::i;:::-;;;;;;;;3848:5;:12;:16;;3863:1;;3848:16;:::i;:::-;3841:23;3231:638;-1:-1:-1;;;;3231:638:2:o;562:129:134:-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;638:16:134::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;:::-;562:129:::0;:::o;2673:187:436:-;2765:6;;;-1:-1:-1;;;;;2781:17:436;;;-1:-1:-1;;;;;;2781:17:436;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1065:26:436::1;5363:13:439::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1176:32:436::1;929:10:449::0;1176:18:436::1;:32::i;-1:-1:-1:-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:118:486;100:5;93:13;86:21;79:5;76:32;66:60;;122:1;119;112:12;137:128;202:20;;231:28;202:20;231:28;:::i;:::-;137:128;;;:::o;270:241::-;326:6;379:2;367:9;358:7;354:23;350:32;347:52;;;395:1;392;385:12;347:52;434:9;421:23;453:28;475:5;453:28;:::i;516:750::-;608:6;616;624;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;733:9;720:23;-1:-1:-1;;;;;803:2:486;795:6;792:14;789:34;;;819:1;816;809:12;789:34;857:6;846:9;842:22;832:32;;902:7;895:4;891:2;887:13;883:27;873:55;;924:1;921;914:12;873:55;964:2;951:16;990:2;982:6;979:14;976:34;;;1006:1;1003;996:12;976:34;1061:7;1054:4;1044:6;1041:1;1037:14;1033:2;1029:23;1025:34;1022:47;1019:67;;;1082:1;1079;1072:12;1019:67;1113:4;1105:13;;;;-1:-1:-1;1137:6:486;-1:-1:-1;;1178:20:486;;1165:34;1208:28;1165:34;1208:28;:::i;:::-;1255:5;1245:15;;;516:750;;;;;:::o;1271:131::-;-1:-1:-1;;;;;1346:31:486;;1336:42;;1326:70;;1392:1;1389;1382:12;1407:134;1475:20;;1504:31;1475:20;1504:31;:::i;1546:247::-;1605:6;1658:2;1646:9;1637:7;1633:23;1629:32;1626:52;;;1674:1;1671;1664:12;1626:52;1713:9;1700:23;1732:31;1757:5;1732:31;:::i;1990:348::-;2042:8;2052:6;2106:3;2099:4;2091:6;2087:17;2083:27;2073:55;;2124:1;2121;2114:12;2073:55;-1:-1:-1;2147:20:486;;-1:-1:-1;;;;;2179:30:486;;2176:50;;;2222:1;2219;2212:12;2176:50;2259:4;2251:6;2247:17;2235:29;;2311:3;2304:4;2295:6;2287;2283:19;2279:30;2276:39;2273:59;;;2328:1;2325;2318:12;2273:59;1990:348;;;;;:::o;2343:479::-;2423:6;2431;2439;2492:2;2480:9;2471:7;2467:23;2463:32;2460:52;;;2508:1;2505;2498:12;2460:52;2544:9;2531:23;2521:33;;2605:2;2594:9;2590:18;2577:32;-1:-1:-1;;;;;2624:6:486;2621:30;2618:50;;;2664:1;2661;2654:12;2618:50;2703:59;2754:7;2745:6;2734:9;2730:22;2703:59;:::i;:::-;2343:479;;2781:8;;-1:-1:-1;2677:85:486;;-1:-1:-1;;;;2343:479:486:o;2827:258::-;2899:1;2909:113;2923:6;2920:1;2917:13;2909:113;;;2999:11;;;2993:18;2980:11;;;2973:39;2945:2;2938:10;2909:113;;;3040:6;3037:1;3034:13;3031:48;;;-1:-1:-1;;3075:1:486;3057:16;;3050:27;2827:258::o;3090:::-;3132:3;3170:5;3164:12;3197:6;3192:3;3185:19;3213:63;3269:6;3262:4;3257:3;3253:14;3246:4;3239:5;3235:16;3213:63;:::i;:::-;3330:2;3309:15;-1:-1:-1;;3305:29:486;3296:39;;;;3337:4;3292:50;;3090:258;-1:-1:-1;;3090:258:486:o;3353:542::-;3400:3;3444:5;3438:12;3471:4;3466:3;3459:17;3497:47;3538:4;3533:3;3529:14;3515:12;3497:47;:::i;:::-;3485:59;;3592:4;3585:5;3581:16;3575:23;3634:1;3630;3625:3;3621:11;3617:19;3688:2;3672:14;3668:23;3661:4;3656:3;3652:14;3645:47;3753:2;3745:4;3738:5;3734:16;3728:23;3724:32;3717:4;3712:3;3708:14;3701:56;;;3806:4;3799:5;3795:16;3789:23;3782:4;3777:3;3773:14;3766:47;3862:4;3855:5;3851:16;3845:23;3838:4;3833:3;3829:14;3822:47;3885:4;3878:11;;;3353:542;;;;:::o;3900:626::-;3957:3;3995:5;3989:12;4022:6;4017:3;4010:19;4048:4;4089:2;4084:3;4080:12;4114:11;4141;4134:18;;4191:6;4188:1;4184:14;4177:5;4173:26;4161:38;;4233:2;4226:5;4222:14;4254:1;4264:236;4278:6;4275:1;4272:13;4264:236;;;4349:5;4343:4;4339:16;4334:3;4327:29;4377:43;4415:4;4406:6;4400:13;4377:43;:::i;:::-;4478:12;;;;4369:51;-1:-1:-1;4443:15:486;;;;4300:1;4293:9;4264:236;;;-1:-1:-1;4516:4:486;;3900:626;-1:-1:-1;;;;;;;3900:626:486:o;4531:854::-;4843:2;4855:21;;;4925:13;;4828:18;;;4947:22;;;4795:4;;5022;;5000:2;4985:18;;;5049:15;;;4795:4;5092:169;5106:6;5103:1;5100:13;5092:169;;;5167:13;;5155:26;;5201:12;;;;5236:15;;;;5128:1;5121:9;5092:169;;;5096:3;;;5306:9;5301:3;5297:19;5292:2;5281:9;5277:18;5270:47;5334:45;5375:3;5367:6;5334:45;:::i;:::-;5326:53;4531:854;-1:-1:-1;;;;;;4531:854:486:o;5390:127::-;5451:10;5446:3;5442:20;5439:1;5432:31;5482:4;5479:1;5472:15;5506:4;5503:1;5496:15;5522:275;5593:2;5587:9;5658:2;5639:13;;-1:-1:-1;;5635:27:486;5623:40;;-1:-1:-1;;;;;5678:34:486;;5714:22;;;5675:62;5672:88;;;5740:18;;:::i;:::-;5776:2;5769:22;5522:275;;-1:-1:-1;5522:275:486:o;5802:1410::-;5933:6;5941;5949;5957;5965;5973;5981;5989;6042:3;6030:9;6021:7;6017:23;6013:33;6010:53;;;6059:1;6056;6049:12;6010:53;6099:9;6086:23;-1:-1:-1;;;;;6169:2:486;6161:6;6158:14;6155:34;;;6185:1;6182;6175:12;6155:34;6223:6;6212:9;6208:22;6198:32;;6268:7;6261:4;6257:2;6253:13;6249:27;6239:55;;6290:1;6287;6280:12;6239:55;6326:2;6313:16;6348:4;6371:2;6367;6364:10;6361:36;;;6377:18;;:::i;:::-;6419:53;6462:2;6443:13;;-1:-1:-1;;6439:27:486;6435:36;;6419:53;:::i;:::-;6495:2;6488:5;6481:17;6535:7;6530:2;6525;6521;6517:11;6513:20;6510:33;6507:53;;;6556:1;6553;6546:12;6507:53;6611:2;6606;6602;6598:11;6593:2;6586:5;6582:14;6569:45;6655:1;6634:14;;;6630:23;;6623:34;6638:5;-1:-1:-1;6700:38:486;6719:18;;;6700:38;:::i;:::-;6690:48;;;;6791:2;6780:9;6776:18;6763:32;6747:48;;6820:2;6810:8;6807:16;6804:36;;;6836:1;6833;6826:12;6804:36;;6875:61;6928:7;6917:8;6906:9;6902:24;6875:61;:::i;:::-;6955:8;;-1:-1:-1;6849:87:486;-1:-1:-1;7009:35:486;;-1:-1:-1;7040:2:486;7025:18;;7009:35;:::i;:::-;6999:45;;7091:3;7080:9;7076:19;7063:33;7053:43;;7143:3;7132:9;7128:19;7115:33;7105:43;;7167:39;7201:3;7190:9;7186:19;7167:39;:::i;:::-;7157:49;;5802:1410;;;;;;;;;;;:::o;7886:180::-;7945:6;7998:2;7986:9;7977:7;7973:23;7969:32;7966:52;;;8014:1;8011;8004:12;7966:52;-1:-1:-1;8037:23:486;;7886:180;-1:-1:-1;7886:180:486:o;8071:563::-;8332:3;8321:9;8314:22;8295:4;8353:46;8394:3;8383:9;8379:19;8371:6;8353:46;:::i;:::-;-1:-1:-1;;;;;8473:15:486;;;8468:2;8453:18;;8446:43;8525:15;;;;8520:2;8505:18;;8498:43;8572:2;8557:18;;8550:34;;;;8615:3;8600:19;;;8593:35;8345:54;8071:563;-1:-1:-1;;8071:563:486:o;8639:1156::-;8729:6;8737;8790:2;8778:9;8769:7;8765:23;8761:32;8758:52;;;8806:1;8803;8796:12;8758:52;8845:9;8832:23;8864:28;8886:5;8864:28;:::i;:::-;8911:5;-1:-1:-1;8935:2:486;8973:18;;;8960:32;-1:-1:-1;;;;;9041:14:486;;;9038:34;;;9068:1;9065;9058:12;9038:34;9106:6;9095:9;9091:22;9081:32;;9151:7;9144:4;9140:2;9136:13;9132:27;9122:55;;9173:1;9170;9163:12;9122:55;9209:2;9196:16;9231:2;9227;9224:10;9221:36;;;9237:18;;:::i;:::-;9283:2;9280:1;9276:10;9266:20;;9306:28;9330:2;9326;9322:11;9306:28;:::i;:::-;9368:15;;;9438:11;;;9434:20;;;9399:12;;;;9466:19;;;9463:39;;;9498:1;9495;9488:12;9463:39;9522:11;;;;9542:223;9558:6;9553:3;9550:15;9542:223;;;9640:3;9627:17;9612:32;;9657:33;9682:7;9657:33;:::i;:::-;9703:20;;;9575:12;;;;9743;;;;9542:223;;;9784:5;9774:15;;;;;;;;8639:1156;;;;;:::o;9800:309::-;10023:2;10012:9;10005:21;9986:4;10043:60;10099:2;10088:9;10084:18;10076:6;10043:60;:::i;10462:127::-;10523:10;10518:3;10514:20;10511:1;10504:31;10554:4;10551:1;10544:15;10578:4;10575:1;10568:15;10594:127;10655:10;10650:3;10646:20;10643:1;10636:31;10686:4;10683:1;10676:15;10710:4;10707:1;10700:15;10726:135;10765:3;-1:-1:-1;;10786:17:486;;10783:43;;;10806:18;;:::i;:::-;-1:-1:-1;10853:1:486;10842:13;;10726:135::o;10866:794::-;11088:2;11100:21;;;11073:18;;11156:22;;;11040:4;11235:6;11209:2;11194:18;;11040:4;11269:304;11283:6;11280:1;11277:13;11269:304;;;11358:6;11345:20;11378:31;11403:5;11378:31;:::i;:::-;-1:-1:-1;;;;;11434:31:486;11422:44;;11489:4;11548:15;;;;11513:12;;;;11462:1;11298:9;11269:304;;;11273:3;11590;11582:11;;;;11645:6;11638:14;11631:22;11624:4;11613:9;11609:20;11602:52;10866:794;;;;;;:::o;11665:251::-;11735:6;11788:2;11776:9;11767:7;11763:23;11759:32;11756:52;;;11804:1;11801;11794:12;11756:52;11836:9;11830:16;11855:31;11880:5;11855:31;:::i;11921:245::-;11988:6;12041:2;12029:9;12020:7;12016:23;12012:32;12009:52;;;12057:1;12054;12047:12;12009:52;12089:9;12083:16;12108:28;12130:5;12108:28;:::i;13348:457::-;13533:3;13571:6;13565:13;13587:53;13633:6;13628:3;13621:4;13613:6;13609:17;13587:53;:::i;:::-;13662:16;;13715:6;13707;13662:16;13687:35;13779:1;13741:18;;13768:13;;;-1:-1:-1;13741:18:486;;13348:457;-1:-1:-1;;;13348:457:486:o;13810:482::-;14052:26;14048:31;14039:6;14035:2;14031:15;14027:53;14022:3;14015:66;13997:3;14110:6;14104:13;14126:62;14181:6;14176:2;14171:3;14167:12;14160:4;14152:6;14148:17;14126:62;:::i;:::-;14247:2;14207:16;;14239:11;;;14232:27;;;;14283:2;14275:11;;13810:482;-1:-1:-1;;;13810:482:486:o;14297:184::-;14367:6;14420:2;14408:9;14399:7;14395:23;14391:32;14388:52;;;14436:1;14433;14426:12;14388:52;-1:-1:-1;14459:16:486;;14297:184;-1:-1:-1;14297:184:486:o;17331:380::-;17410:1;17406:12;;;;17453;;;17474:61;;17528:4;17520:6;17516:17;17506:27;;17474:61;17581:2;17573:6;17570:14;17550:18;17547:38;17544:161;;;17627:10;17622:3;17618:20;17615:1;17608:31;17662:4;17659:1;17652:15;17690:4;17687:1;17680:15;17544:161;;17331:380;;;:::o;18419:125::-;18459:4;18487:1;18484;18481:8;18478:34;;;18492:18;;:::i;:::-;-1:-1:-1;18529:9:486;;18419:125::o;18549:127::-;18610:10;18605:3;18601:20;18598:1;18591:31;18641:4;18638:1;18631:15;18665:4;18662:1;18655:15;22241:320;22442:6;22431:9;22424:25;22485:2;22480;22469:9;22465:18;22458:30;22405:4;22505:50;22551:2;22540:9;22536:18;22528:6;22505:50;:::i;22566:407::-;22768:2;22750:21;;;22807:2;22787:18;;;22780:30;22846:34;22841:2;22826:18;;22819:62;-1:-1:-1;;;22912:2:486;22897:18;;22890:41;22963:3;22948:19;;22566:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_deprecatePool(address)": "9b29177f", + "_deprecatePool(uint256)": "b5f3f640", + "_editAdminWhitelist(address[],bool)": "0a83d1b0", + "_editDeployerWhitelist(address[],bool)": "a155497c", + "_setDeployerWhitelistEnforcement(bool)": "04f03c6f", + "_setPendingOwner(address)": "6e96dfd7", + "adminWhitelist(address)": "43e20a1d", + "deployPool(string,address,bytes,bool,uint256,uint256,address)": "58b896d3", + "deployerWhitelist(address)": "a970e76c", + "enforceDeployerWhitelist()": "26bb81d7", + "getActivePools()": "8ec08354", + "getAllPools()": "d88ff1f4", + "getPoolsByAccount(address)": "a3ed91c6", + "getPoolsOfUser(address)": "f348960d", + "getPublicPools()": "4ae26ea1", + "getPublicPoolsByVerification(bool)": "218a3bbe", + "getVerifiedPoolsOfWhitelistedAccount(address)": "448ca558", + "initialize(bool,address[])": "b86579d4", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "poolExists(address)": "1e1c6a07", + "pools(uint256)": "ac4afa38", + "poolsCounter()": "5d0eb31a", + "renounceOwnership()": "715018a6", + "setPoolName(uint256,string)": "20c32bfe", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/PoolDirectory_Proxy.json b/packages/sdk/deployments/mode/PoolDirectory_Proxy.json new file mode 100644 index 0000000000..7024a61117 --- /dev/null +++ b/packages/sdk/deployments/mode/PoolDirectory_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "transactionIndex": 1, + "gasUsed": "775382", + "logsBloom": "0x00000000000000000000000000000000400000000000000000a00000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000080000000000000800000000800000000000000000400000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000008200000002000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec", + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000020808c1a73737016bbbf8acc6959a30446ea1d2d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + }, + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + }, + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + }, + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + }, + { + "transactionIndex": 1, + "blockNumber": 2067120, + "transactionHash": "0xd1c516cdaba55a2559f746d144c69839ffa6ac0529712f65c80694d3cc0b100a", + "address": "0x39C353Cf9041CcF467A04d0e78B63d961E81458a", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x14b097144e0a835cada92df0e7cff475fdbe9d2cecd834600c5d5642eff6a4ec" + } + ], + "blockNumber": 2067120, + "cumulativeGasUsed": "822283", + "status": 1, + "byzantium": true + }, + "args": [ + "0x20808c1A73737016bBBF8Acc6959A30446eA1D2d", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xb86579d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/PoolLens.json b/packages/sdk/deployments/mode/PoolLens.json new file mode 100644 index 0000000000..66e6c35184 --- /dev/null +++ b/packages/sdk/deployments/mode/PoolLens.json @@ -0,0 +1,2660 @@ +{ + "address": "0x431C87E08e2636733a945D742d25Ba77577ED480", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "errCode", + "type": "uint256" + } + ], + "name": "ComptrollerError", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "inputs": [], + "name": "directory", + "outputs": [ + { + "internalType": "contract PoolDirectory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "asset", + "type": "address" + } + ], + "name": "getBorrowCapsDataForAsset", + "outputs": [ + { + "internalType": "address[]", + "name": "collateral", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "borrowCapsPerCollateral", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "collateralBlacklisted", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "totalBorrowCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonWhitelistedTotalBorrows", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "asset", + "type": "address" + } + ], + "name": "getBorrowCapsForAsset", + "outputs": [ + { + "internalType": "address[]", + "name": "collateral", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "borrowCapsPerCollateral", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "collateralBlacklisted", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "totalBorrowCap", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IonicComptroller", + "name": "pool", + "type": "address" + } + ], + "name": "getHealthFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPoolAssetsByUser", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + }, + { + "internalType": "string", + "name": "underlyingName", + "type": "string" + }, + { + "internalType": "string", + "name": "underlyingSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "underlyingDecimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "membership", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "exchangeRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "internalType": "uint256", + "name": "collateralFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ionicFee", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "borrowGuardianPaused", + "type": "bool" + }, + { + "internalType": "bool", + "name": "mintGuardianPaused", + "type": "bool" + } + ], + "internalType": "struct PoolLens.PoolAsset[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "name": "getPoolAssetsWithData", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + }, + { + "internalType": "string", + "name": "underlyingName", + "type": "string" + }, + { + "internalType": "string", + "name": "underlyingSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "underlyingDecimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "membership", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "exchangeRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "internalType": "uint256", + "name": "collateralFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ionicFee", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "borrowGuardianPaused", + "type": "bool" + }, + { + "internalType": "bool", + "name": "mintGuardianPaused", + "type": "bool" + } + ], + "internalType": "struct PoolLens.PoolAsset[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "name": "getPoolSummary", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getPoolsByAccountWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPoolsOIonicrWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "name": "getPublicPoolsByVerificationWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getPublicPoolsWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "name": "getSupplyCapsDataForPool", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "name": "getSupplyCapsForPool", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getWhitelistedPoolsByAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getWhitelistedPoolsByAccountWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]" + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract PoolDirectory", + "name": "_directory", + "type": "address" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "address[]", + "name": "_hardcodedAddresses", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "_hardcodedNames", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_hardcodedSymbols", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_uniswapLPTokenNames", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_uniswapLPTokenSymbols", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_uniswapLPTokenDisplayNames", + "type": "string[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x76278f47e11d8c46bb4e40762344c50c9c891e7195f8d9cbd9da011a7f8dc5f3", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x431C87E08e2636733a945D742d25Ba77577ED480", + "transactionIndex": 1, + "gasUsed": "3853785", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x0e1ee2f9be624e0d786944e63af23a8734e6826681600c8e326ccffd42d09c49", + "transactionHash": "0x76278f47e11d8c46bb4e40762344c50c9c891e7195f8d9cbd9da011a7f8dc5f3", + "logs": [], + "blockNumber": 2095692, + "cumulativeGasUsed": "3900698", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "errCode", + "type": "uint256" + } + ], + "type": "error", + "name": "ComptrollerError" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "directory", + "outputs": [ + { + "internalType": "contract PoolDirectory", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowCapsDataForAsset", + "outputs": [ + { + "internalType": "address[]", + "name": "collateral", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "borrowCapsPerCollateral", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "collateralBlacklisted", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "totalBorrowCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonWhitelistedTotalBorrows", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowCapsForAsset", + "outputs": [ + { + "internalType": "address[]", + "name": "collateral", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "borrowCapsPerCollateral", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "collateralBlacklisted", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "totalBorrowCap", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IonicComptroller", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getHealthFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolAssetsByUser", + "outputs": [ + { + "internalType": "struct PoolLens.PoolAsset[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + }, + { + "internalType": "string", + "name": "underlyingName", + "type": "string" + }, + { + "internalType": "string", + "name": "underlyingSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "underlyingDecimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "membership", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "exchangeRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "internalType": "uint256", + "name": "collateralFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ionicFee", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "borrowGuardianPaused", + "type": "bool" + }, + { + "internalType": "bool", + "name": "mintGuardianPaused", + "type": "bool" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolAssetsWithData", + "outputs": [ + { + "internalType": "struct PoolLens.PoolAsset[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + }, + { + "internalType": "string", + "name": "underlyingName", + "type": "string" + }, + { + "internalType": "string", + "name": "underlyingSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "underlyingDecimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "membership", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "exchangeRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "internalType": "uint256", + "name": "collateralFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ionicFee", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "borrowGuardianPaused", + "type": "bool" + }, + { + "internalType": "bool", + "name": "mintGuardianPaused", + "type": "bool" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolSummary", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolsByAccountWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolsOIonicrWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPublicPoolsByVerificationWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPublicPoolsWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSupplyCapsDataForPool", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSupplyCapsForPool", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getWhitelistedPoolsByAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getWhitelistedPoolsByAccountWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract PoolDirectory", + "name": "_directory", + "type": "address" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "address[]", + "name": "_hardcodedAddresses", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "_hardcodedNames", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_hardcodedSymbols", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_uniswapLPTokenNames", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_uniswapLPTokenSymbols", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_uniswapLPTokenDisplayNames", + "type": "string[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getBorrowCapsDataForAsset(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getBorrowCapsForAsset(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPoolAssetsByUser(address,address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPoolAssetsWithData(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state.", + "params": { + "comptroller": "The Comptroller proxy contract of the Ionic pool." + }, + "returns": { + "_0": "An array of Ionic pool assets." + } + }, + "getPoolsByAccountWithData(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getPoolsOIonicrWithData(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getPublicPoolsByVerificationWithData(bool)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getPublicPoolsWithData()": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getSupplyCapsDataForPool(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getSupplyCapsForPool(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getWhitelistedPoolsByAccount(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getWhitelistedPoolsByAccountWithData(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "initialize(address,string,string,address[],string[],string[],string[],string[],string[])": { + "params": { + "_directory": "The PoolDirectory", + "_hardcodedAddresses": "Underlying token addresses for a token like maker which are DSToken and/or use bytes32 for `symbol`", + "_hardcodedNames": "Harcoded name for these tokens", + "_hardcodedSymbols": "Harcoded symbol for these tokens", + "_name": "Name for the nativeToken", + "_symbol": "Symbol for the nativeToken", + "_uniswapLPTokenDisplayNames": "Harcoded display names for underlying uniswap LpToken", + "_uniswapLPTokenNames": "Harcoded names for underlying uniswap LpToken", + "_uniswapLPTokenSymbols": "Harcoded symbols for underlying uniswap LpToken" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "directory()": { + "notice": "`PoolDirectory` contract object." + }, + "getBorrowCapsDataForAsset(address)": { + "notice": "returns the total borrow cap, the per collateral borrowing cap/blacklist for the asset and the total non-whitelist borrows" + }, + "getBorrowCapsForAsset(address)": { + "notice": "returns the total borrow cap and the per collateral borrowing cap/blacklist for the asset" + }, + "getPoolAssetsByUser(address,address)": { + "notice": "Returns arrays of PoolAsset for a specific user" + }, + "getPoolAssetsWithData(address)": { + "notice": "Returns the assets of the specified Ionic pool." + }, + "getPoolSummary(address)": { + "notice": "Returns total supply balance (in ETH), total borrow balance (in ETH), underlying token addresses, and underlying token symbols of a Ionic pool." + }, + "getPoolsByAccountWithData(address)": { + "notice": "Returns arrays of the indexes of Ionic pools created by `account`, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "getPoolsOIonicrWithData(address)": { + "notice": "Returns arrays of the indexes of Ionic pools used by `user`, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "getPublicPoolsByVerificationWithData(bool)": { + "notice": "Returns arrays of all whitelisted public Ionic pool indexes, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "getPublicPoolsWithData()": { + "notice": "Returns arrays of all public Ionic pool indexes, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "getSupplyCapsDataForPool(address)": { + "notice": "returns the total supply cap for each asset in the pool and the total non-whitelist supplied assets" + }, + "getSupplyCapsForPool(address)": { + "notice": "returns the total supply cap for each asset in the pool" + }, + "getWhitelistedPoolsByAccount(address)": { + "notice": "Returns arrays of Ionic pool indexes and data with a whitelist containing `account`. Note that the whitelist does not have to be enforced." + }, + "getWhitelistedPoolsByAccountWithData(address)": { + "notice": "Returns arrays of the indexes of Ionic pools with a whitelist containing `account`, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "initialize(address,string,string,address[],string[],string[],string[],string[],string[])": { + "notice": "Initialize the `PoolDirectory` contract object." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/PoolLens.sol": "PoolLens" + }, + "libraries": {} + }, + "sources": { + "contracts/PoolDirectory.sol": { + "keccak256": "0xd3d28cd044a0205a86f0c2d82021a36018ec4b0e95f72064c92bcad99f84f6c8", + "urls": [ + "bzz-raw://0c8ab6e3f922b9165cae038507497be2aed81df002ffe7921e0aa1f10f690531", + "dweb:/ipfs/QmNpfDhHaVPyxXZDY7Si2Bpidneh6Ckr8C4dGhRmA9pEEa" + ], + "license": "UNLICENSED" + }, + "contracts/PoolLens.sol": { + "keccak256": "0x6b53050b040af96521818af36fb7e4596064cd73ba96d1f69672a5955b835050", + "urls": [ + "bzz-raw://c1dcc7f879203c23e9a81e31b3c24c2c88dc634beb1d0e89e0cd4dacf02440c7", + "dweb:/ipfs/QmS673Ukt15CFK9jpEwzpHtxFyp6RfedmqcHpB2s5xTr3o" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x84edc2b901bfc47df6728100716d0e23de7f095543fcc4b919ae8f5f049a2d08", + "urls": [ + "bzz-raw://dc2a5d197584bf0a6ebe3bbad4a6c97f448cef027d3fc397ce2453b1e87826fa", + "dweb:/ipfs/QmdL2TZVb8W1nM3VMe2eUoXgzUjSb8FBvxmbCPWPWndVTU" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x9807f66d6f8aa8005c3e4da70b7dc64d16daeccd02bc865a49d809e0094a81a2", + "urls": [ + "bzz-raw://12d8bf913ca8d8051c62a803204ed899e011efeda842e90639f3c8e5fe0270cf", + "dweb:/ipfs/Qmd8bXgWwamyWgk4AGFQE4N6JGMtXBw9mDqAYH27sVPLKY" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506144c0806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063798b9780116100a2578063c3530a6311610071578063c3530a631461028e578063c41c2f24146102af578063d0a164fb146102da578063d64996e5146102e2578063ef88b53c146102f557600080fd5b8063798b97801461021f57806395d89b4114610240578063a079548714610248578063a505596a1461026a57600080fd5b80633a1eb656116100e95780633a1eb6561461018f57806351678684146101a457806357c89a7d146101c757806359d2fea6146101e8578063707333751461020c57600080fd5b806306fdde031461011b5780630c5eb5a4146101395780631568683a1461015957806327e16c1f1461017c575b600080fd5b610123610308565b6040516101309190613542565b60405180910390f35b61014c610147366004613574565b610396565b60405161013091906135ad565b61016c61016736600461373a565b610420565b60405161013094939291906137fd565b61014c61018a36600461373a565b610513565b6101a261019d366004613a54565b610585565b005b6101b76101b236600461373a565b6109fa565b6040516101309493929190613c76565b6101da6101d5366004613574565b610a9d565b604051908152602001610130565b6101fb6101f636600461373a565b610bab565b604051610130959493929190613d56565b6101b761021a36600461373a565b61130e565b61023261022d36600461373a565b611320565b604051610130929190613d9c565b610123611543565b61025b61025636600461373a565b611550565b60405161013093929190613dca565b61027d61027836600461373a565b611930565b604051610130959493929190613e0d565b6102a161029c36600461373a565b611b1c565b604051610130929190613e5b565b6005546102c2906001600160a01b031681565b6040516001600160a01b039091168152602001610130565b6101b7611e84565b6101b76102f0366004613e8e565b611f29565b6101b761030336600461373a565b611f69565b6001805461031590613eab565b80601f016020809104026020016040519081016040528092919081815260200182805461034190613eab565b801561038e5780601f106103635761010080835404028352916020019161038e565b820191906000526020600020905b81548152906001019060200180831161037157829003601f168201915b505050505081565b604051632aff3bff60e21b81526001600160a01b03828116600483015260609160009161041691869182169063abfceffc90602401600060405180830381865afa1580156103e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104109190810190613ee6565b85611fa9565b9150505b92915050565b6060806060600080856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a9190613f7f565b90506104968682612c3f565b60405163252c221960e11b81526001600160a01b038a81166004830152939850919650945090821690634a58443290602401602060405180830381865afa1580156104e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105099190613f9c565b9150509193509193565b606061041a82836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610557573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261057f9190810190613ee6565b33611fa9565b600054610100900460ff16158080156105a55750600054600160ff909116105b806105bf5750303b1580156105bf575060005460ff166001145b6106275760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561064a576000805461ff0019166101001790555b6001600160a01b038a166106bb5760405162461bcd60e51b815260206004820152603260248201527f506f6f6c4469726563746f727920696e7374616e63652063616e6e6f74206265604482015271103a3432903d32b9379030b2323932b9b99760711b606482015260840161061e565b855187511480156106cd575084518751145b6107285760405162461bcd60e51b815260206004820152602660248201527f48617264636f64656420616464726573736573206c656e67746873206e6f742060448201526532b8bab0b61760d11b606482015260840161061e565b8251845114801561073a575081518451145b6107985760405162461bcd60e51b815260206004820152602960248201527f556e6973776170204c5020746f6b656e206e616d6573206c656e67746873206e60448201526837ba1032b8bab0b61760b91b606482015260840161061e565b600580546001600160a01b0319166001600160a01b038c1617905588516107c69060019060208c019061337e565b5087516107da9060029060208b019061337e565b5060005b87518110156108b857604051806040016040528088838151811061080457610804613fb5565b6020026020010151815260200187838151811061082357610823613fb5565b6020026020010151815250600360008a848151811061084457610844613fb5565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001908051906020019061088892919061337e565b5060208281015180516108a1926001850192019061337e565b5090505080806108b090613fe1565b9150506107de565b5060005b84518110156109a757600460405180606001604052808784815181106108e4576108e4613fb5565b6020026020010151815260200186848151811061090357610903613fb5565b6020026020010151815260200185848151811061092257610922613fb5565b60209081029190910181015190915282546001810184556000938452928190208251805193946003029091019261095c928492019061337e565b506020828101518051610975926001850192019061337e565b506040820151805161099191600284019160209091019061337e565b505050808061099f90613fe1565b9150506108bc565b5080156109ee576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6005546040516351f6c8e360e11b81526001600160a01b03838116600483015260609283928392839260009283929091169063a3ed91c6906024015b600060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a7b919081019061413e565b91509150600080610a8b83612f22565b949a9399509750929550909350505050565b604051635ec88c7960e01b81526001600160a01b038381166004830152600091829182918291829190871690635ec88c7990602401608060405180830381865afa158015610aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1391906141f9565b935093509350935083600014610b3f5760405163255a0eef60e11b81526004810185905260240161061e565b8015610b8b57808311610b5957600094505050505061041a565b82610b64828261422f565b610b7690670de0b6b3a7640000614246565b610b809190614265565b94505050505061041a565b818311610ba05760001994505050505061041a565b82610b64838261422f565b60008060608060008060009050600080886001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c219190810190613ee6565b9050600081516001600160401b03811115610c3e57610c3e613858565b604051908082528060200260200182016040528015610c67578160200160208202803683370190505b509050600082516001600160401b03811115610c8557610c85613858565b604051908082528060200260200182016040528015610cb857816020015b6060815260200190600190039081610ca35790505b50905060008b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f9190613f7f565b905060005b8451811015611206576000858281518110610d4157610d41613fb5565b6020026020010151905060008e6001600160a01b0316638e8f294b836040518263ffffffff1660e01b8152600401610d8891906001600160a01b0391909116815260200190565b6040805180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc89190614292565b50905080610dd75750506111f4565b816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3b9190613f9c565b506000826001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea09190613f9c565b90506000836001600160a01b0316639826394b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f069190613f9c565b846001600160a01b03166361feacff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f689190613f9c565b856001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190613f9c565b610fd491906142c0565b610fde91906142c0565b82856001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561101d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110419190613f9c565b61104b91906142c0565b611055919061422f565b60405163fc57d4df60e01b81526001600160a01b03868116600483015291925060009188169063fc57d4df90602401602060405180830381865afa1580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c59190613f9c565b9050670de0b6b3a76400006110da8285614246565b6110e49190614265565b6110ee908d6142c0565b9b50670de0b6b3a76400006111038284614246565b61110d9190614265565b611117908c6142c0565b9a50846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b9190613f7f565b89878151811061118d5761118d613fb5565b60200260200101906001600160a01b031690816001600160a01b0316815250506111cf8987815181106111c2576111c2613fb5565b6020026020010151613129565b90508887815181106111e3576111e3613fb5565b602002602001018190525050505050505b806111fe81613fe1565b915050610d24565b506000600560009054906101000a90046001600160a01b03166001600160a01b03166343e20a1d8e6001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128f9190613f7f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156112d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f791906142d8565b959d969c50929a5090985092965092945050505050565b606080606080600080610a7b87611b1c565b6060806000836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261138b9190810190613ee6565b9050600081516001600160401b038111156113a8576113a8613858565b6040519080825280602002602001820160405280156113d1578160200160208202803683370190505b509050600082516001600160401b038111156113ef576113ef613858565b604051908082528060200260200182016040528015611418578160200160208202803683370190505b50905060005b83518110156115375783818151811061143957611439613fb5565b602002602001015183828151811061145357611453613fb5565b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b03166302c3bcbb84838151811061149457611494613fb5565b60200260200101516040518263ffffffff1660e01b81526004016114c791906001600160a01b0391909116815260200190565b602060405180830381865afa1580156114e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115089190613f9c565b82828151811061151a5761151a613fb5565b60209081029190910101528061152f81613fe1565b91505061141e565b50909590945092505050565b6002805461031590613eab565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611595573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115bd9190810190613ee6565b9050600081516001600160401b038111156115da576115da613858565b604051908082528060200260200182016040528015611603578160200160208202803683370190505b509050600082516001600160401b0381111561162157611621613858565b60405190808252806020026020018201604052801561164a578160200160208202803683370190505b509050600083516001600160401b0381111561166857611668613858565b604051908082528060200260200182016040528015611691578160200160208202803683370190505b50905060005b8451811015611921578481815181106116b2576116b2613fb5565b60200260200101518482815181106116cc576116cc613fb5565b60200260200101906001600160a01b031690816001600160a01b031681525050886001600160a01b03166302c3bcbb85838151811061170d5761170d613fb5565b60200260200101516040518263ffffffff1660e01b815260040161174091906001600160a01b0391909116815260200190565b602060405180830381865afa15801561175d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117819190613f9c565b83828151811061179357611793613fb5565b60200260200101818152505060008582815181106117b3576117b3613fb5565b60200260200101516001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190613f9c565b905060008a6001600160a01b031663fb6243fa87858151811061184157611841613fb5565b60200260200101516040518263ffffffff1660e01b815260040161187491906001600160a01b0391909116815260200190565b602060405180830381865afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190613f9c565b90508181106118e35760008484815181106118d2576118d2613fb5565b60200260200101818152505061190c565b6118ed818361422f565b8484815181106118ff576118ff613fb5565b6020026020010181815250505b5050808061191990613fe1565b915050611697565b50919790965090945092505050565b60608060606000806000866001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613f7f565b90506119a88782612c3f565b60405163252c221960e11b81526001600160a01b038b81166004830152939950919750955090821690634a58443290602401602060405180830381865afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190613f9c565b92506000876001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190613f9c565b604051631d3965af60e11b81526001600160a01b038a81166004830152919250600091841690633a72cb5e90602401602060405180830381865afa158015611acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af19190613f9c565b9050818110611b035760009350611b10565b611b0d818361422f565b93505b50505091939590929450565b6060806000600560009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b9c919081019061413e565b9150506000805b8251811015611c70576000838281518110611bc057611bc0613fb5565b6020026020010151604001519050806001600160a01b0316639b19251a886040518263ffffffff1660e01b8152600401611c0991906001600160a01b0391909116815260200190565b602060405180830381865afa158015611c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4a91906142d8565b15611c5d5782611c5981613fe1565b9350505b5080611c6881613fe1565b915050611ba3565b506000816001600160401b03811115611c8b57611c8b613858565b604051908082528060200260200182016040528015611cb4578160200160208202803683370190505b5090506000826001600160401b03811115611cd157611cd1613858565b604051908082528060200260200182016040528015611d4657816020015b611d336040518060a001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611cef5790505b5090506000805b8551811015611e76576000868281518110611d6a57611d6a613fb5565b6020026020010151604001519050806001600160a01b0316639b19251a8b6040518263ffffffff1660e01b8152600401611db391906001600160a01b0391909116815260200190565b602060405180830381865afa158015611dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df491906142d8565b15611e635781858481518110611e0c57611e0c613fb5565b602002602001018181525050868281518110611e2a57611e2a613fb5565b6020026020010151848481518110611e4457611e44613fb5565b60200260200101819052508280611e5a90613fe1565b93505050611e76565b5080611e6e81613fe1565b915050611d4d565b509197909650945050505050565b606080606080600080600560009054906101000a90046001600160a01b03166001600160a01b0316634ae26ea16040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ee0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f08919081019061413e565b91509150600080611f1883612f22565b949993985096509294509092505050565b6005546040516310c51ddf60e11b8152821515600482015260609182918291829160009182916001600160a01b039091169063218a3bbe90602401610a36565b60055460405163f348960d60e01b81526001600160a01b03838116600483015260609283928392839260009283929091169063f348960d90602401610a36565b60606000805b8451811015612078576000866001600160a01b0316638e8f294b878481518110611fdb57611fdb613fb5565b60200260200101516040518263ffffffff1660e01b815260040161200e91906001600160a01b0391909116815260200190565b6040805180830381865afa15801561202a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204e9190614292565b5090508015612065578261206181613fe1565b9350505b508061207081613fe1565b915050611faf565b506000816001600160401b0381111561209357612093613858565b6040519080825280602002602001820160405280156120cc57816020015b6120b9613402565b8152602001906001900390816120b15790505b509050600080876001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121349190613f7f565b905060005b8751811015612c32576000808a6001600160a01b0316638e8f294b8b858151811061216657612166613fb5565b60200260200101516040518263ffffffff1660e01b815260040161219991906001600160a01b0391909116815260200190565b6040805180830381865afa1580156121b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d99190614292565b91509150816121e9575050612c20565b6121f1613402565b60008b858151811061220557612205613fb5565b6020908102919091018101516001600160a01b0381168085526040805163a6afed9560e01b81529051929450909263a6afed959260048084019382900301816000875af115801561225a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227e9190613f9c565b50806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e19190613f7f565b6001600160a01b0316602083018190526122fa81613129565b84604001856060018290528290525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236c91906142f5565b60ff1660808401526040516370a0823160e01b81526001600160a01b038d811660048301528216906370a0823190602401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190613f9c565b8360a0018181525050816001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124499190613f9c565b8360c0018181525050816001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa158015612490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b49190613f9c565b8360e0018181525050816001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613f9c565b83610180018181525050816001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015612567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258b9190613f9c565b83610120018181525050816001600160a01b0316639826394b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f79190613f9c565b826001600160a01b03166361feacff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126599190613f9c565b836001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bb9190613f9c565b6126c591906142c0565b6126cf91906142c0565b8361012001518461018001516126e591906142c0565b6126ef919061422f565b610100840152604051633af9e66960e01b81526001600160a01b038d81166004830152831690633af9e66990602401602060405180830381865afa15801561273b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275f9190613f9c565b6101408401526040516305eff7ef60e21b81526001600160a01b038d811660048301528316906317bfdfbc90602401602060405180830381865afa1580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf9190613f9c565b61016084015260405163929fe9a160e01b81526001600160a01b038d8116600483015283811660248301528f169063929fe9a190604401602060405180830381865afa158015612823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284791906142d8565b15156101a08401526040805163bd6d894d60e01b815290516001600160a01b0384169163bd6d894d9160048083019260209291908290030181865afa158015612894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b89190613f9c565b6101c084015260208301516040516315d5220f60e31b81526001600160a01b0391821660048201529088169063aea9107890602401602060405180830381865afa15801561290a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292e9190613f9c565b6101e08401526001600160a01b038781166102008501819052602085015160405163addd509960e01b8152921660048301529063addd509990602401602060405180830381865afa9250505080156129a3575060408051601f3d908101601f191682019092526129a091810190613f7f565b60015b6129ac576129bc565b6001600160a01b03166102008401525b8383610220018181525050816001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a299190613f9c565b83610240018181525050816001600160a01b0316638d02d9a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a959190613f9c565b83610260018181525050816001600160a01b031663c3bf11cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b019190613f9c565b610280840152604051636d154ea560e01b81526001600160a01b0383811660048301528f1690636d154ea590602401602060405180830381865afa158015612b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7191906142d8565b15156102a084015260405163731f0c2b60e01b81526001600160a01b0383811660048301528f169063731f0c2b90602401602060405180830381865afa158015612bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be391906142d8565b15156102c0840152885183908a908a908110612c0157612c01613fb5565b60200260200101819052508780612c1790613fe1565b98505050505050505b80612c2a81613fe1565b915050612139565b5091979650505050505050565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cac9190810190613ee6565b905080516001600160401b03811115612cc757612cc7613858565b604051908082528060200260200182016040528015612cf0578160200160208202803683370190505b50935080516001600160401b03811115612d0c57612d0c613858565b604051908082528060200260200182016040528015612d35578160200160208202803683370190505b50925080516001600160401b03811115612d5157612d51613858565b604051908082528060200260200182016040528015612d7a578160200160208202803683370190505b50915060005b8151811015612f19576000828281518110612d9d57612d9d613fb5565b60200260200101519050876001600160a01b0316816001600160a01b031614612f065780868381518110612dd357612dd3613fb5565b6001600160a01b03928316602091820292909201015260405163940cd6f160e01b8152898216600482015282821660248201529088169063940cd6f190604401602060405180830381865afa158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e549190613f9c565b858381518110612e6657612e66613fb5565b6020908102919091010152604051631c819e4360e01b81526001600160a01b0389811660048301528281166024830152881690631c819e4390604401602060405180830381865afa158015612ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee391906142d8565b848381518110612ef557612ef5613fb5565b911515602092830291909101909101525b5080612f1181613fe1565b915050612d80565b50509250925092565b606080600083516001600160401b03811115612f4057612f40613858565b604051908082528060200260200182016040528015612fa557816020015b612f926040518060a00160405280600081526020016000815260200160608152602001606081526020016000151581525090565b815260200190600190039081612f5e5790505b509050600084516001600160401b03811115612fc357612fc3613858565b604051908082528060200260200182016040528015612fec578160200160208202803683370190505b50905060005b855181101561311e57306001600160a01b03166359d2fea687838151811061301c5761301c613fb5565b6020026020010151604001516040518263ffffffff1660e01b815260040161305391906001600160a01b0391909116815260200190565b6000604051808303816000875af192505050801561309357506040513d6000823e601f3d908101601f191682016040526130909190810190614397565b60015b6130c05760018282815181106130ab576130ab613fb5565b9115156020928302919091019091015261310c565b6040518060a001604052808681526020018581526020018481526020018381526020018215158152508887815181106130fb576130fb613fb5565b602002602001018190525050505050505b8061311681613fe1565b915050612ff2565b509094909350915050565b6001600160a01b03811660009081526003602052604090206001018054606091829161315490613eab565b15905061329a576001600160a01b038316600090815260036020526040902080546001820190829061318590613eab565b80601f01602080910402602001604051908101604052809291908181526020018280546131b190613eab565b80156131fe5780601f106131d3576101008083540402835291602001916131fe565b820191906000526020600020905b8154815290600101906020018083116131e157829003601f168201915b5050505050915080805461321190613eab565b80601f016020809104026020016040519081016040528092919081815260200182805461323d90613eab565b801561328a5780601f1061325f5761010080835404028352916020019161328a565b820191906000526020600020905b81548152906001019060200180831161326d57829003601f168201915b5050505050905091509150915091565b60008390506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156132df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613307919081019061447f565b90506000826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015613349573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613371919081019061447f565b9196919550909350505050565b82805461338a90613eab565b90600052602060002090601f0160209004810192826133ac57600085556133f2565b82601f106133c557805160ff19168380011785556133f2565b828001600101855582156133f2579182015b828111156133f25782518255916020019190600101906133d7565b506133fe9291506134d1565b5090565b604051806102e0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b5b808211156133fe57600081556001016134d2565b60005b838110156135015781810151838201526020016134e9565b83811115613510576000848401525b50505050565b6000815180845261352e8160208601602086016134e6565b601f01601f19169290920160200192915050565b6020815260006135556020830184613516565b9392505050565b6001600160a01b038116811461357157600080fd5b50565b6000806040838503121561358757600080fd5b82356135928161355c565b915060208301356135a28161355c565b809150509250929050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561372c57888303603f19018552815180516001600160a01b031684526102e0818901516001600160a01b038116868b01525087820151818987015261361f82870182613516565b915050606080830151868303828801526136398382613516565b6080858101519089015260a0808601519089015260c0808601519089015260e08086015190890152610100808601519089015261012080860151908901526101408086015190890152610160808601519089015261018080860151908901526101a0808601511515908901526101c080860151908901526101e08086015190890152610200808601516001600160a01b03169089015261022080860151908901526102408086015190890152610260808601519089015261028080860151908901526102a0808601511515908901526102c0948501511515949097019390935250505093860193908601906001016135d4565b509098975050505050505050565b60006020828403121561374c57600080fd5b81356135558161355c565b600081518084526020808501945080840160005b838110156137905781516001600160a01b03168752958201959082019060010161376b565b509495945050505050565b600081518084526020808501945080840160005b83811015613790578151875295820195908201906001016137af565b600081518084526020808501945080840160005b838110156137905781511515875295820195908201906001016137df565b6080815260006138106080830187613757565b8281036020840152613822818761379b565b9050828103604084015261383681866137cb565b91505082606083015295945050505050565b80356138538161355c565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561389057613890613858565b60405290565b604051601f8201601f191681016001600160401b03811182821017156138be576138be613858565b604052919050565b60006001600160401b038211156138df576138df613858565b50601f01601f191660200190565b600082601f8301126138fe57600080fd5b813561391161390c826138c6565b613896565b81815284602083860101111561392657600080fd5b816020850160208301376000918101602001919091529392505050565b60006001600160401b0382111561395c5761395c613858565b5060051b60200190565b600082601f83011261397757600080fd5b8135602061398761390c83613943565b82815260059290921b840181019181810190868411156139a657600080fd5b8286015b848110156139ca5780356139bd8161355c565b83529183019183016139aa565b509695505050505050565b600082601f8301126139e657600080fd5b813560206139f661390c83613943565b82815260059290921b84018101918181019086841115613a1557600080fd5b8286015b848110156139ca5780356001600160401b03811115613a385760008081fd5b613a468986838b01016138ed565b845250918301918301613a19565b60008060008060008060008060006101208a8c031215613a7357600080fd5b613a7c8a613848565b985060208a01356001600160401b0380821115613a9857600080fd5b613aa48d838e016138ed565b995060408c0135915080821115613aba57600080fd5b613ac68d838e016138ed565b985060608c0135915080821115613adc57600080fd5b613ae88d838e01613966565b975060808c0135915080821115613afe57600080fd5b613b0a8d838e016139d5565b965060a08c0135915080821115613b2057600080fd5b613b2c8d838e016139d5565b955060c08c0135915080821115613b4257600080fd5b613b4e8d838e016139d5565b945060e08c0135915080821115613b6457600080fd5b613b708d838e016139d5565b93506101008c0135915080821115613b8757600080fd5b50613b948c828d016139d5565b9150509295985092959850929598565b600081518084526020808501808196508360051b8101915082860160005b85811015612c32578284038952815160a08151818752613be482880182613516565b838901516001600160a01b03908116898b01526040808601519091169089015260608085015190890152608093840151939097019290925250509784019790840190600101613bc2565b600081518084526020808501808196508360051b8101915082860160005b85811015612c32578284038952613c64848351613516565b98850198935090840190600101613c4c565b60006080808352613c898184018861379b565b602084820381860152613c9c8289613ba4565b91506040858303818701528288518085528385019150838160051b860101848b0160005b83811015613d3157601f19888403018552815160a0815185528882015189860152878201518189870152613cf682870182613757565b91505060608083015186830382880152613d108382613c2e565b938d01511515968d0196909652505094870194925090860190600101613cc0565b505088810360608a0152613d45818b6137cb565b9d9c50505050505050505050505050565b85815284602082015260a060408201526000613d7560a0830186613757565b8281036060840152613d878186613c2e565b91505082151560808301529695505050505050565b604081526000613daf6040830185613757565b8281036020840152613dc1818561379b565b95945050505050565b606081526000613ddd6060830186613757565b8281036020840152613def818661379b565b90508281036040840152613e03818561379b565b9695505050505050565b60a081526000613e2060a0830188613757565b8281036020840152613e32818861379b565b90508281036040840152613e4681876137cb565b60608401959095525050608001529392505050565b604081526000613e6e604083018561379b565b8281036020840152613dc18185613ba4565b801515811461357157600080fd5b600060208284031215613ea057600080fd5b813561355581613e80565b600181811c90821680613ebf57607f821691505b60208210811415613ee057634e487b7160e01b600052602260045260246000fd5b50919050565b60006020808385031215613ef957600080fd5b82516001600160401b03811115613f0f57600080fd5b8301601f81018513613f2057600080fd5b8051613f2e61390c82613943565b81815260059190911b82018301908381019087831115613f4d57600080fd5b928401925b82841015613f74578351613f658161355c565b82529284019290840190613f52565b979650505050505050565b600060208284031215613f9157600080fd5b81516135558161355c565b600060208284031215613fae57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613ff557613ff5613fcb565b5060010190565b600082601f83011261400d57600080fd5b815161401b61390c826138c6565b81815284602083860101111561403057600080fd5b6140418260208301602087016134e6565b949350505050565b600082601f83011261405a57600080fd5b8151602061406a61390c83613943565b82815260059290921b8401810191818101908684111561408957600080fd5b8286015b848110156139ca5780516001600160401b03808211156140ad5760008081fd5b9088019060a0828b03601f19018113156140c75760008081fd5b6140cf61386e565b87840151838111156140e15760008081fd5b6140ef8d8a83880101613ffc565b82525060409250828401516141038161355c565b818901526060848101516141168161355c565b938201939093526080848101519382019390935292015190820152835291830191830161408d565b6000806040838503121561415157600080fd5b82516001600160401b038082111561416857600080fd5b818501915085601f83011261417c57600080fd5b8151602061418c61390c83613943565b82815260059290921b840181019181810190898411156141ab57600080fd5b948201945b838610156141c9578551825294820194908201906141b0565b918801519196509093505050808211156141e257600080fd5b506141ef85828601614049565b9150509250929050565b6000806000806080858703121561420f57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60008282101561424157614241613fcb565b500390565b600081600019048311821515161561426057614260613fcb565b500290565b60008261428257634e487b7160e01b600052601260045260246000fd5b500490565b805161385381613e80565b600080604083850312156142a557600080fd5b82516142b081613e80565b6020939093015192949293505050565b600082198211156142d3576142d3613fcb565b500190565b6000602082840312156142ea57600080fd5b815161355581613e80565b60006020828403121561430757600080fd5b815160ff8116811461355557600080fd5b600082601f83011261432957600080fd5b8151602061433961390c83613943565b82815260059290921b8401810191818101908684111561435857600080fd5b8286015b848110156139ca5780516001600160401b0381111561437b5760008081fd5b6143898986838b0101613ffc565b84525091830191830161435c565b600080600080600060a086880312156143af57600080fd5b85519450602080870151945060408701516001600160401b03808211156143d557600080fd5b818901915089601f8301126143e957600080fd5b81516143f761390c82613943565b81815260059190911b8301840190848101908c83111561441657600080fd5b938501935b8285101561443d57845161442e8161355c565b8252938501939085019061441b565b60608c0151909850945050508083111561445657600080fd5b505061446488828901614318565b92505061447360808701614287565b90509295509295909350565b60006020828403121561449157600080fd5b81516001600160401b038111156144a757600080fd5b61404184828501613ffc56fea164736f6c634300080a000a", + "sourceMap": "765:23510:3:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063798b9780116100a2578063c3530a6311610071578063c3530a631461028e578063c41c2f24146102af578063d0a164fb146102da578063d64996e5146102e2578063ef88b53c146102f557600080fd5b8063798b97801461021f57806395d89b4114610240578063a079548714610248578063a505596a1461026a57600080fd5b80633a1eb656116100e95780633a1eb6561461018f57806351678684146101a457806357c89a7d146101c757806359d2fea6146101e8578063707333751461020c57600080fd5b806306fdde031461011b5780630c5eb5a4146101395780631568683a1461015957806327e16c1f1461017c575b600080fd5b610123610308565b6040516101309190613542565b60405180910390f35b61014c610147366004613574565b610396565b60405161013091906135ad565b61016c61016736600461373a565b610420565b60405161013094939291906137fd565b61014c61018a36600461373a565b610513565b6101a261019d366004613a54565b610585565b005b6101b76101b236600461373a565b6109fa565b6040516101309493929190613c76565b6101da6101d5366004613574565b610a9d565b604051908152602001610130565b6101fb6101f636600461373a565b610bab565b604051610130959493929190613d56565b6101b761021a36600461373a565b61130e565b61023261022d36600461373a565b611320565b604051610130929190613d9c565b610123611543565b61025b61025636600461373a565b611550565b60405161013093929190613dca565b61027d61027836600461373a565b611930565b604051610130959493929190613e0d565b6102a161029c36600461373a565b611b1c565b604051610130929190613e5b565b6005546102c2906001600160a01b031681565b6040516001600160a01b039091168152602001610130565b6101b7611e84565b6101b76102f0366004613e8e565b611f29565b6101b761030336600461373a565b611f69565b6001805461031590613eab565b80601f016020809104026020016040519081016040528092919081815260200182805461034190613eab565b801561038e5780601f106103635761010080835404028352916020019161038e565b820191906000526020600020905b81548152906001019060200180831161037157829003601f168201915b505050505081565b604051632aff3bff60e21b81526001600160a01b03828116600483015260609160009161041691869182169063abfceffc90602401600060405180830381865afa1580156103e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104109190810190613ee6565b85611fa9565b9150505b92915050565b6060806060600080856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a9190613f7f565b90506104968682612c3f565b60405163252c221960e11b81526001600160a01b038a81166004830152939850919650945090821690634a58443290602401602060405180830381865afa1580156104e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105099190613f9c565b9150509193509193565b606061041a82836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610557573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261057f9190810190613ee6565b33611fa9565b600054610100900460ff16158080156105a55750600054600160ff909116105b806105bf5750303b1580156105bf575060005460ff166001145b6106275760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561064a576000805461ff0019166101001790555b6001600160a01b038a166106bb5760405162461bcd60e51b815260206004820152603260248201527f506f6f6c4469726563746f727920696e7374616e63652063616e6e6f74206265604482015271103a3432903d32b9379030b2323932b9b99760711b606482015260840161061e565b855187511480156106cd575084518751145b6107285760405162461bcd60e51b815260206004820152602660248201527f48617264636f64656420616464726573736573206c656e67746873206e6f742060448201526532b8bab0b61760d11b606482015260840161061e565b8251845114801561073a575081518451145b6107985760405162461bcd60e51b815260206004820152602960248201527f556e6973776170204c5020746f6b656e206e616d6573206c656e67746873206e60448201526837ba1032b8bab0b61760b91b606482015260840161061e565b600580546001600160a01b0319166001600160a01b038c1617905588516107c69060019060208c019061337e565b5087516107da9060029060208b019061337e565b5060005b87518110156108b857604051806040016040528088838151811061080457610804613fb5565b6020026020010151815260200187838151811061082357610823613fb5565b6020026020010151815250600360008a848151811061084457610844613fb5565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001908051906020019061088892919061337e565b5060208281015180516108a1926001850192019061337e565b5090505080806108b090613fe1565b9150506107de565b5060005b84518110156109a757600460405180606001604052808784815181106108e4576108e4613fb5565b6020026020010151815260200186848151811061090357610903613fb5565b6020026020010151815260200185848151811061092257610922613fb5565b60209081029190910181015190915282546001810184556000938452928190208251805193946003029091019261095c928492019061337e565b506020828101518051610975926001850192019061337e565b506040820151805161099191600284019160209091019061337e565b505050808061099f90613fe1565b9150506108bc565b5080156109ee576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6005546040516351f6c8e360e11b81526001600160a01b03838116600483015260609283928392839260009283929091169063a3ed91c6906024015b600060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a7b919081019061413e565b91509150600080610a8b83612f22565b949a9399509750929550909350505050565b604051635ec88c7960e01b81526001600160a01b038381166004830152600091829182918291829190871690635ec88c7990602401608060405180830381865afa158015610aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1391906141f9565b935093509350935083600014610b3f5760405163255a0eef60e11b81526004810185905260240161061e565b8015610b8b57808311610b5957600094505050505061041a565b82610b64828261422f565b610b7690670de0b6b3a7640000614246565b610b809190614265565b94505050505061041a565b818311610ba05760001994505050505061041a565b82610b64838261422f565b60008060608060008060009050600080886001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c219190810190613ee6565b9050600081516001600160401b03811115610c3e57610c3e613858565b604051908082528060200260200182016040528015610c67578160200160208202803683370190505b509050600082516001600160401b03811115610c8557610c85613858565b604051908082528060200260200182016040528015610cb857816020015b6060815260200190600190039081610ca35790505b50905060008b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f9190613f7f565b905060005b8451811015611206576000858281518110610d4157610d41613fb5565b6020026020010151905060008e6001600160a01b0316638e8f294b836040518263ffffffff1660e01b8152600401610d8891906001600160a01b0391909116815260200190565b6040805180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc89190614292565b50905080610dd75750506111f4565b816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3b9190613f9c565b506000826001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea09190613f9c565b90506000836001600160a01b0316639826394b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f069190613f9c565b846001600160a01b03166361feacff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f689190613f9c565b856001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190613f9c565b610fd491906142c0565b610fde91906142c0565b82856001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561101d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110419190613f9c565b61104b91906142c0565b611055919061422f565b60405163fc57d4df60e01b81526001600160a01b03868116600483015291925060009188169063fc57d4df90602401602060405180830381865afa1580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c59190613f9c565b9050670de0b6b3a76400006110da8285614246565b6110e49190614265565b6110ee908d6142c0565b9b50670de0b6b3a76400006111038284614246565b61110d9190614265565b611117908c6142c0565b9a50846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b9190613f7f565b89878151811061118d5761118d613fb5565b60200260200101906001600160a01b031690816001600160a01b0316815250506111cf8987815181106111c2576111c2613fb5565b6020026020010151613129565b90508887815181106111e3576111e3613fb5565b602002602001018190525050505050505b806111fe81613fe1565b915050610d24565b506000600560009054906101000a90046001600160a01b03166001600160a01b03166343e20a1d8e6001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128f9190613f7f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156112d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f791906142d8565b959d969c50929a5090985092965092945050505050565b606080606080600080610a7b87611b1c565b6060806000836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261138b9190810190613ee6565b9050600081516001600160401b038111156113a8576113a8613858565b6040519080825280602002602001820160405280156113d1578160200160208202803683370190505b509050600082516001600160401b038111156113ef576113ef613858565b604051908082528060200260200182016040528015611418578160200160208202803683370190505b50905060005b83518110156115375783818151811061143957611439613fb5565b602002602001015183828151811061145357611453613fb5565b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b03166302c3bcbb84838151811061149457611494613fb5565b60200260200101516040518263ffffffff1660e01b81526004016114c791906001600160a01b0391909116815260200190565b602060405180830381865afa1580156114e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115089190613f9c565b82828151811061151a5761151a613fb5565b60209081029190910101528061152f81613fe1565b91505061141e565b50909590945092505050565b6002805461031590613eab565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611595573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115bd9190810190613ee6565b9050600081516001600160401b038111156115da576115da613858565b604051908082528060200260200182016040528015611603578160200160208202803683370190505b509050600082516001600160401b0381111561162157611621613858565b60405190808252806020026020018201604052801561164a578160200160208202803683370190505b509050600083516001600160401b0381111561166857611668613858565b604051908082528060200260200182016040528015611691578160200160208202803683370190505b50905060005b8451811015611921578481815181106116b2576116b2613fb5565b60200260200101518482815181106116cc576116cc613fb5565b60200260200101906001600160a01b031690816001600160a01b031681525050886001600160a01b03166302c3bcbb85838151811061170d5761170d613fb5565b60200260200101516040518263ffffffff1660e01b815260040161174091906001600160a01b0391909116815260200190565b602060405180830381865afa15801561175d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117819190613f9c565b83828151811061179357611793613fb5565b60200260200101818152505060008582815181106117b3576117b3613fb5565b60200260200101516001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181c9190613f9c565b905060008a6001600160a01b031663fb6243fa87858151811061184157611841613fb5565b60200260200101516040518263ffffffff1660e01b815260040161187491906001600160a01b0391909116815260200190565b602060405180830381865afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190613f9c565b90508181106118e35760008484815181106118d2576118d2613fb5565b60200260200101818152505061190c565b6118ed818361422f565b8484815181106118ff576118ff613fb5565b6020026020010181815250505b5050808061191990613fe1565b915050611697565b50919790965090945092505050565b60608060606000806000866001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613f7f565b90506119a88782612c3f565b60405163252c221960e11b81526001600160a01b038b81166004830152939950919750955090821690634a58443290602401602060405180830381865afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190613f9c565b92506000876001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a819190613f9c565b604051631d3965af60e11b81526001600160a01b038a81166004830152919250600091841690633a72cb5e90602401602060405180830381865afa158015611acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af19190613f9c565b9050818110611b035760009350611b10565b611b0d818361422f565b93505b50505091939590929450565b6060806000600560009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015611b74573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b9c919081019061413e565b9150506000805b8251811015611c70576000838281518110611bc057611bc0613fb5565b6020026020010151604001519050806001600160a01b0316639b19251a886040518263ffffffff1660e01b8152600401611c0991906001600160a01b0391909116815260200190565b602060405180830381865afa158015611c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4a91906142d8565b15611c5d5782611c5981613fe1565b9350505b5080611c6881613fe1565b915050611ba3565b506000816001600160401b03811115611c8b57611c8b613858565b604051908082528060200260200182016040528015611cb4578160200160208202803683370190505b5090506000826001600160401b03811115611cd157611cd1613858565b604051908082528060200260200182016040528015611d4657816020015b611d336040518060a001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611cef5790505b5090506000805b8551811015611e76576000868281518110611d6a57611d6a613fb5565b6020026020010151604001519050806001600160a01b0316639b19251a8b6040518263ffffffff1660e01b8152600401611db391906001600160a01b0391909116815260200190565b602060405180830381865afa158015611dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df491906142d8565b15611e635781858481518110611e0c57611e0c613fb5565b602002602001018181525050868281518110611e2a57611e2a613fb5565b6020026020010151848481518110611e4457611e44613fb5565b60200260200101819052508280611e5a90613fe1565b93505050611e76565b5080611e6e81613fe1565b915050611d4d565b509197909650945050505050565b606080606080600080600560009054906101000a90046001600160a01b03166001600160a01b0316634ae26ea16040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ee0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f08919081019061413e565b91509150600080611f1883612f22565b949993985096509294509092505050565b6005546040516310c51ddf60e11b8152821515600482015260609182918291829160009182916001600160a01b039091169063218a3bbe90602401610a36565b60055460405163f348960d60e01b81526001600160a01b03838116600483015260609283928392839260009283929091169063f348960d90602401610a36565b60606000805b8451811015612078576000866001600160a01b0316638e8f294b878481518110611fdb57611fdb613fb5565b60200260200101516040518263ffffffff1660e01b815260040161200e91906001600160a01b0391909116815260200190565b6040805180830381865afa15801561202a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204e9190614292565b5090508015612065578261206181613fe1565b9350505b508061207081613fe1565b915050611faf565b506000816001600160401b0381111561209357612093613858565b6040519080825280602002602001820160405280156120cc57816020015b6120b9613402565b8152602001906001900390816120b15790505b509050600080876001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121349190613f7f565b905060005b8751811015612c32576000808a6001600160a01b0316638e8f294b8b858151811061216657612166613fb5565b60200260200101516040518263ffffffff1660e01b815260040161219991906001600160a01b0391909116815260200190565b6040805180830381865afa1580156121b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d99190614292565b91509150816121e9575050612c20565b6121f1613402565b60008b858151811061220557612205613fb5565b6020908102919091018101516001600160a01b0381168085526040805163a6afed9560e01b81529051929450909263a6afed959260048084019382900301816000875af115801561225a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227e9190613f9c565b50806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e19190613f7f565b6001600160a01b0316602083018190526122fa81613129565b84604001856060018290528290525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236c91906142f5565b60ff1660808401526040516370a0823160e01b81526001600160a01b038d811660048301528216906370a0823190602401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190613f9c565b8360a0018181525050816001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124499190613f9c565b8360c0018181525050816001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa158015612490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b49190613f9c565b8360e0018181525050816001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613f9c565b83610180018181525050816001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015612567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258b9190613f9c565b83610120018181525050816001600160a01b0316639826394b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f79190613f9c565b826001600160a01b03166361feacff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126599190613f9c565b836001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bb9190613f9c565b6126c591906142c0565b6126cf91906142c0565b8361012001518461018001516126e591906142c0565b6126ef919061422f565b610100840152604051633af9e66960e01b81526001600160a01b038d81166004830152831690633af9e66990602401602060405180830381865afa15801561273b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275f9190613f9c565b6101408401526040516305eff7ef60e21b81526001600160a01b038d811660048301528316906317bfdfbc90602401602060405180830381865afa1580156127ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cf9190613f9c565b61016084015260405163929fe9a160e01b81526001600160a01b038d8116600483015283811660248301528f169063929fe9a190604401602060405180830381865afa158015612823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284791906142d8565b15156101a08401526040805163bd6d894d60e01b815290516001600160a01b0384169163bd6d894d9160048083019260209291908290030181865afa158015612894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b89190613f9c565b6101c084015260208301516040516315d5220f60e31b81526001600160a01b0391821660048201529088169063aea9107890602401602060405180830381865afa15801561290a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292e9190613f9c565b6101e08401526001600160a01b038781166102008501819052602085015160405163addd509960e01b8152921660048301529063addd509990602401602060405180830381865afa9250505080156129a3575060408051601f3d908101601f191682019092526129a091810190613f7f565b60015b6129ac576129bc565b6001600160a01b03166102008401525b8383610220018181525050816001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a299190613f9c565b83610240018181525050816001600160a01b0316638d02d9a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a959190613f9c565b83610260018181525050816001600160a01b031663c3bf11cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b019190613f9c565b610280840152604051636d154ea560e01b81526001600160a01b0383811660048301528f1690636d154ea590602401602060405180830381865afa158015612b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b7191906142d8565b15156102a084015260405163731f0c2b60e01b81526001600160a01b0383811660048301528f169063731f0c2b90602401602060405180830381865afa158015612bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be391906142d8565b15156102c0840152885183908a908a908110612c0157612c01613fb5565b60200260200101819052508780612c1790613fe1565b98505050505050505b80612c2a81613fe1565b915050612139565b5091979650505050505050565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cac9190810190613ee6565b905080516001600160401b03811115612cc757612cc7613858565b604051908082528060200260200182016040528015612cf0578160200160208202803683370190505b50935080516001600160401b03811115612d0c57612d0c613858565b604051908082528060200260200182016040528015612d35578160200160208202803683370190505b50925080516001600160401b03811115612d5157612d51613858565b604051908082528060200260200182016040528015612d7a578160200160208202803683370190505b50915060005b8151811015612f19576000828281518110612d9d57612d9d613fb5565b60200260200101519050876001600160a01b0316816001600160a01b031614612f065780868381518110612dd357612dd3613fb5565b6001600160a01b03928316602091820292909201015260405163940cd6f160e01b8152898216600482015282821660248201529088169063940cd6f190604401602060405180830381865afa158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e549190613f9c565b858381518110612e6657612e66613fb5565b6020908102919091010152604051631c819e4360e01b81526001600160a01b0389811660048301528281166024830152881690631c819e4390604401602060405180830381865afa158015612ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee391906142d8565b848381518110612ef557612ef5613fb5565b911515602092830291909101909101525b5080612f1181613fe1565b915050612d80565b50509250925092565b606080600083516001600160401b03811115612f4057612f40613858565b604051908082528060200260200182016040528015612fa557816020015b612f926040518060a00160405280600081526020016000815260200160608152602001606081526020016000151581525090565b815260200190600190039081612f5e5790505b509050600084516001600160401b03811115612fc357612fc3613858565b604051908082528060200260200182016040528015612fec578160200160208202803683370190505b50905060005b855181101561311e57306001600160a01b03166359d2fea687838151811061301c5761301c613fb5565b6020026020010151604001516040518263ffffffff1660e01b815260040161305391906001600160a01b0391909116815260200190565b6000604051808303816000875af192505050801561309357506040513d6000823e601f3d908101601f191682016040526130909190810190614397565b60015b6130c05760018282815181106130ab576130ab613fb5565b9115156020928302919091019091015261310c565b6040518060a001604052808681526020018581526020018481526020018381526020018215158152508887815181106130fb576130fb613fb5565b602002602001018190525050505050505b8061311681613fe1565b915050612ff2565b509094909350915050565b6001600160a01b03811660009081526003602052604090206001018054606091829161315490613eab565b15905061329a576001600160a01b038316600090815260036020526040902080546001820190829061318590613eab565b80601f01602080910402602001604051908101604052809291908181526020018280546131b190613eab565b80156131fe5780601f106131d3576101008083540402835291602001916131fe565b820191906000526020600020905b8154815290600101906020018083116131e157829003601f168201915b5050505050915080805461321190613eab565b80601f016020809104026020016040519081016040528092919081815260200182805461323d90613eab565b801561328a5780601f1061325f5761010080835404028352916020019161328a565b820191906000526020600020905b81548152906001019060200180831161326d57829003601f168201915b5050505050905091509150915091565b60008390506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156132df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613307919081019061447f565b90506000826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015613349573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613371919081019061447f565b9196919550909350505050565b82805461338a90613eab565b90600052602060002090601f0160209004810192826133ac57600085556133f2565b82601f106133c557805160ff19168380011785556133f2565b828001600101855582156133f2579182015b828111156133f25782518255916020019190600101906133d7565b506133fe9291506134d1565b5090565b604051806102e0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b5b808211156133fe57600081556001016134d2565b60005b838110156135015781810151838201526020016134e9565b83811115613510576000848401525b50505050565b6000815180845261352e8160208601602086016134e6565b601f01601f19169290920160200192915050565b6020815260006135556020830184613516565b9392505050565b6001600160a01b038116811461357157600080fd5b50565b6000806040838503121561358757600080fd5b82356135928161355c565b915060208301356135a28161355c565b809150509250929050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561372c57888303603f19018552815180516001600160a01b031684526102e0818901516001600160a01b038116868b01525087820151818987015261361f82870182613516565b915050606080830151868303828801526136398382613516565b6080858101519089015260a0808601519089015260c0808601519089015260e08086015190890152610100808601519089015261012080860151908901526101408086015190890152610160808601519089015261018080860151908901526101a0808601511515908901526101c080860151908901526101e08086015190890152610200808601516001600160a01b03169089015261022080860151908901526102408086015190890152610260808601519089015261028080860151908901526102a0808601511515908901526102c0948501511515949097019390935250505093860193908601906001016135d4565b509098975050505050505050565b60006020828403121561374c57600080fd5b81356135558161355c565b600081518084526020808501945080840160005b838110156137905781516001600160a01b03168752958201959082019060010161376b565b509495945050505050565b600081518084526020808501945080840160005b83811015613790578151875295820195908201906001016137af565b600081518084526020808501945080840160005b838110156137905781511515875295820195908201906001016137df565b6080815260006138106080830187613757565b8281036020840152613822818761379b565b9050828103604084015261383681866137cb565b91505082606083015295945050505050565b80356138538161355c565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561389057613890613858565b60405290565b604051601f8201601f191681016001600160401b03811182821017156138be576138be613858565b604052919050565b60006001600160401b038211156138df576138df613858565b50601f01601f191660200190565b600082601f8301126138fe57600080fd5b813561391161390c826138c6565b613896565b81815284602083860101111561392657600080fd5b816020850160208301376000918101602001919091529392505050565b60006001600160401b0382111561395c5761395c613858565b5060051b60200190565b600082601f83011261397757600080fd5b8135602061398761390c83613943565b82815260059290921b840181019181810190868411156139a657600080fd5b8286015b848110156139ca5780356139bd8161355c565b83529183019183016139aa565b509695505050505050565b600082601f8301126139e657600080fd5b813560206139f661390c83613943565b82815260059290921b84018101918181019086841115613a1557600080fd5b8286015b848110156139ca5780356001600160401b03811115613a385760008081fd5b613a468986838b01016138ed565b845250918301918301613a19565b60008060008060008060008060006101208a8c031215613a7357600080fd5b613a7c8a613848565b985060208a01356001600160401b0380821115613a9857600080fd5b613aa48d838e016138ed565b995060408c0135915080821115613aba57600080fd5b613ac68d838e016138ed565b985060608c0135915080821115613adc57600080fd5b613ae88d838e01613966565b975060808c0135915080821115613afe57600080fd5b613b0a8d838e016139d5565b965060a08c0135915080821115613b2057600080fd5b613b2c8d838e016139d5565b955060c08c0135915080821115613b4257600080fd5b613b4e8d838e016139d5565b945060e08c0135915080821115613b6457600080fd5b613b708d838e016139d5565b93506101008c0135915080821115613b8757600080fd5b50613b948c828d016139d5565b9150509295985092959850929598565b600081518084526020808501808196508360051b8101915082860160005b85811015612c32578284038952815160a08151818752613be482880182613516565b838901516001600160a01b03908116898b01526040808601519091169089015260608085015190890152608093840151939097019290925250509784019790840190600101613bc2565b600081518084526020808501808196508360051b8101915082860160005b85811015612c32578284038952613c64848351613516565b98850198935090840190600101613c4c565b60006080808352613c898184018861379b565b602084820381860152613c9c8289613ba4565b91506040858303818701528288518085528385019150838160051b860101848b0160005b83811015613d3157601f19888403018552815160a0815185528882015189860152878201518189870152613cf682870182613757565b91505060608083015186830382880152613d108382613c2e565b938d01511515968d0196909652505094870194925090860190600101613cc0565b505088810360608a0152613d45818b6137cb565b9d9c50505050505050505050505050565b85815284602082015260a060408201526000613d7560a0830186613757565b8281036060840152613d878186613c2e565b91505082151560808301529695505050505050565b604081526000613daf6040830185613757565b8281036020840152613dc1818561379b565b95945050505050565b606081526000613ddd6060830186613757565b8281036020840152613def818661379b565b90508281036040840152613e03818561379b565b9695505050505050565b60a081526000613e2060a0830188613757565b8281036020840152613e32818861379b565b90508281036040840152613e4681876137cb565b60608401959095525050608001529392505050565b604081526000613e6e604083018561379b565b8281036020840152613dc18185613ba4565b801515811461357157600080fd5b600060208284031215613ea057600080fd5b813561355581613e80565b600181811c90821680613ebf57607f821691505b60208210811415613ee057634e487b7160e01b600052602260045260246000fd5b50919050565b60006020808385031215613ef957600080fd5b82516001600160401b03811115613f0f57600080fd5b8301601f81018513613f2057600080fd5b8051613f2e61390c82613943565b81815260059190911b82018301908381019087831115613f4d57600080fd5b928401925b82841015613f74578351613f658161355c565b82529284019290840190613f52565b979650505050505050565b600060208284031215613f9157600080fd5b81516135558161355c565b600060208284031215613fae57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613ff557613ff5613fcb565b5060010190565b600082601f83011261400d57600080fd5b815161401b61390c826138c6565b81815284602083860101111561403057600080fd5b6140418260208301602087016134e6565b949350505050565b600082601f83011261405a57600080fd5b8151602061406a61390c83613943565b82815260059290921b8401810191818101908684111561408957600080fd5b8286015b848110156139ca5780516001600160401b03808211156140ad5760008081fd5b9088019060a0828b03601f19018113156140c75760008081fd5b6140cf61386e565b87840151838111156140e15760008081fd5b6140ef8d8a83880101613ffc565b82525060409250828401516141038161355c565b818901526060848101516141168161355c565b938201939093526080848101519382019390935292015190820152835291830191830161408d565b6000806040838503121561415157600080fd5b82516001600160401b038082111561416857600080fd5b818501915085601f83011261417c57600080fd5b8151602061418c61390c83613943565b82815260059290921b840181019181810190898411156141ab57600080fd5b948201945b838610156141c9578551825294820194908201906141b0565b918801519196509093505050808211156141e257600080fd5b506141ef85828601614049565b9150509250929050565b6000806000806080858703121561420f57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60008282101561424157614241613fcb565b500390565b600081600019048311821515161561426057614260613fcb565b500290565b60008261428257634e487b7160e01b600052601260045260246000fd5b500490565b805161385381613e80565b600080604083850312156142a557600080fd5b82516142b081613e80565b6020939093015192949293505050565b600082198211156142d3576142d3613fcb565b500190565b6000602082840312156142ea57600080fd5b815161355581613e80565b60006020828403121561430757600080fd5b815160ff8116811461355557600080fd5b600082601f83011261432957600080fd5b8151602061433961390c83613943565b82815260059290921b8401810191818101908684111561435857600080fd5b8286015b848110156139ca5780516001600160401b0381111561437b5760008081fd5b6143898986838b0101613ffc565b84525091830191830161435c565b600080600080600060a086880312156143af57600080fd5b85519450602080870151945060408701516001600160401b03808211156143d557600080fd5b818901915089601f8301126143e957600080fd5b81516143f761390c82613943565b81815260059190911b8301840190848101908c83111561441657600080fd5b938501935b8285101561443d57845161442e8161355c565b8252938501939085019061441b565b60608c0151909850945050508083111561445657600080fd5b505061446488828901614318565b92505061447360808701614287565b90509295509295909350565b60006020828403121561449157600080fd5b81516001600160401b038111156144a757600080fd5b61404184828501613ffc56fea164736f6c634300080a000a", + "sourceMap": "765:23510:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2979:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17392:238;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19864:498::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;16850:192::-;;;;;;:::i;:::-;;:::i;1562:1413::-;;;;;;:::i;:::-;;:::i;:::-;;6062:452;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;23660:613::-;;;;;;:::i;:::-;;:::i;:::-;;;17753:25:486;;;17741:2;17726:18;23660:613:3;17607:177:486;8882:1479:3;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;23192:464::-;;;;;;:::i;:::-;;:::i;17811:540::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3001:20::-;;;:::i;18576:1073::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;20610:869::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;21748:926::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3404:30::-;;;;;-1:-1:-1;;;;;3404:30:3;;;;;;-1:-1:-1;;;;;21162:32:486;;;21144:51;;21132:2;21117:18;3404:30:3;20976:225:486;4147:421:3;;;:::i;5063:498::-;;;;;;:::i;:::-;;:::i;7009:432::-;;;;;;:::i;:::-;;:::i;2979:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17392:238::-;17570:29;;-1:-1:-1;;;17570:29:3;;-1:-1:-1;;;;;21162:32:486;;;17570:29:3;;;21144:51:486;17481:18:3;;17507:25;;17535:71;;17557:11;;17570:23;;;;;21117:18:486;;17570:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17570:29:3;;;;;;;;;;;;:::i;:::-;17601:4;17535:21;:71::i;:::-;17507:99;-1:-1:-1;;17392:238:3;;;;;:::o;19864:498::-;19950:27;19985:40;20033:35;20076:22;20113:28;20161:5;-1:-1:-1;;;;;20161:17:3;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20113:68;;20250:46;20277:5;20284:11;20250:26;:46::i;:::-;20319:38;;-1:-1:-1;;;20319:38:3;;-1:-1:-1;;;;;21162:32:486;;;20319:38:3;;;21144:51:486;20187:109:3;;-1:-1:-1;20187:109:3;;-1:-1:-1;20187:109:3;-1:-1:-1;20319:22:3;;;;;;21117:18:486;;20319:38:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20302:55;;20107:255;19864:498;;;;;:::o;16850:192::-;16929:18;16962:75;16984:11;16997;-1:-1:-1;;;;;16997:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16997:27:3;;;;;;;;;;;;:::i;:::-;17026:10;16962:21;:75::i;1562:1413::-;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;23855:2:486;3314:201:439;;;23837:21:486;23894:2;23874:18;;;23867:30;23933:34;23913:18;;;23906:62;-1:-1:-1;;;23984:18:486;;;23977:44;24038:19;;3314:201:439;;;;;;;;;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;-1:-1:-1;;;;;1954:33:3;::::1;1946:96;;;::::0;-1:-1:-1;;;1946:96:3;;24270:2:486;1946:96:3::1;::::0;::::1;24252:21:486::0;24309:2;24289:18;;;24282:30;24348:34;24328:18;;;24321:62;-1:-1:-1;;;24399:18:486;;;24392:48;24457:19;;1946:96:3::1;24068:414:486::0;1946:96:3::1;2093:15;:22;2063:19;:26;:52;:110;;;;;2149:17;:24;2119:19;:26;:54;2063:110;2048:179;;;::::0;-1:-1:-1;;;2048:179:3;;24689:2:486;2048:179:3::1;::::0;::::1;24671:21:486::0;24728:2;24708:18;;;24701:30;24767:34;24747:18;;;24740:62;-1:-1:-1;;;24818:18:486;;;24811:36;24864:19;;2048:179:3::1;24487:402:486::0;2048:179:3::1;2279:22;:29;2248:20;:27;:60;:137;;;;;2351:27;:34;2320:20;:27;:65;2248:137;2233:209;;;::::0;-1:-1:-1;;;2233:209:3;;25096:2:486;2233:209:3::1;::::0;::::1;25078:21:486::0;25135:2;25115:18;;;25108:30;25174:34;25154:18;;;25147:62;-1:-1:-1;;;25225:18:486;;;25218:39;25274:19;;2233:209:3::1;24894:405:486::0;2233:209:3::1;2449:9;:22:::0;;-1:-1:-1;;;;;;2449:22:3::1;-1:-1:-1::0;;;;;2449:22:3;::::1;;::::0;;2477:12;;::::1;::::0;-1:-1:-1;;2477:12:3::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2495:16:3;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2522:9;2517:177;2541:19;:26;2537:1;:30;2517:177;;;2618:69;;;;;;;;2636:15;2652:1;2636:18;;;;;;;;:::i;:::-;;;;;;;2618:69;;;;2664:17;2682:1;2664:20;;;;;;;;:::i;:::-;;;;;;;2618:69;;::::0;2582:9:::1;:33;2592:19;2612:1;2592:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2582:33:3::1;-1:-1:-1::0;;;;;2582:33:3::1;;;;;;;;;;;;:105;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;2582:105:3::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;2569:3;;;;;:::i;:::-;;;;2517:177;;;;2705:9;2700:271;2724:20;:27;2720:1;:31;2700:271;;;2766:11;2792:164;;;;;;;;2822:20;2843:1;2822:23;;;;;;;;:::i;:::-;;;;;;;2792:164;;;;2865:22;2888:1;2865:25;;;;;;;;:::i;:::-;;;;;;;2792:164;;;;2915:27;2943:1;2915:30;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;2792:164;;;2766:198;;::::1;::::0;::::1;::::0;;-1:-1:-1;2766:198:3;;;;;;;;;;;;;::::1;;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2766:198:3::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2766:198:3::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;2753:3;;;;;:::i;:::-;;;;2700:271;;;;3640:14:439::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;25860:36:486;;3710:14:439;;25848:2:486;25833:18;3710:14:439;;;;;;;3636:99;3258:483;1562:1413:3;;;;;;;;;:::o;6062:452::-;6335:9;;:36;;-1:-1:-1;;;6335:36:3;;-1:-1:-1;;;;;21162:32:486;;;6335:36:3;;;21144:51:486;6147:16:3;;;;;;;;6265:24;;;;6335:9;;;;:27;;21117:18:486;;6335:36:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6335:36:3;;;;;;;;;;;;:::i;:::-;6264:107;;;;6378:27;6407:21;6432:26;6445:12;6432;:26::i;:::-;6472:7;;6481:12;;-1:-1:-1;6481:12:3;-1:-1:-1;6472:7:3;;-1:-1:-1;6062:452:3;;-1:-1:-1;;;;6062:452:3:o;23660:613::-;23839:30;;-1:-1:-1;;;23839:30:3;;-1:-1:-1;;;;;21162:32:486;;;23839:30:3;;;21144:51:486;23745:7:3;;;;;;;;;;23839:24;;;;;;21117:18:486;;23839:30:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23760:109;;;;;;;;23880:3;23887:1;23880:8;23876:42;;23897:21;;-1:-1:-1;;;23897:21:3;;;;;17753:25:486;;;17726:18;;23897:21:3;17607:177:486;23876:42:3;23929:13;;23925:344;;23993:9;23974:15;:28;23970:118;;24011:1;24004:8;;;;;;;;23970:118;24073:15;24034:27;24052:9;24073:15;24034:27;:::i;:::-;24033:36;;24065:4;24033:36;:::i;:::-;24032:56;;;;:::i;:::-;24025:63;;;;;;;;23925:344;24151:9;24132:15;:28;24128:134;;-1:-1:-1;;24162:24:3;;;;;;;;24128:134;24247:15;24208:27;24226:9;24247:15;24208:27;:::i;8882:1479::-;8969:7;8984;8999:16;9023:15;9046:4;9065:19;9087:1;9065:23;;9094:19;9123:24;9150:11;-1:-1:-1;;;;;9150:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9150:27:3;;;;;;;;;;;;:::i;:::-;9123:54;;9183:33;9233:7;:14;-1:-1:-1;;;;;9219:29:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9219:29:3;;9183:65;;9254:33;9303:7;:14;-1:-1:-1;;;;;9290:28:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9254:64;;9324:22;9349:11;-1:-1:-1;;;;;9349:18:3;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9324:45;;9381:9;9376:811;9400:7;:14;9396:1;:18;9376:811;;;9429:14;9446:7;9454:1;9446:10;;;;;;;;:::i;:::-;;;;;;;9429:27;;9465:13;9484:11;-1:-1:-1;;;;;9484:19:3;;9512:6;9484:36;;;;;;;;;;;;;;-1:-1:-1;;;;;21162:32:486;;;;21144:51;;21132:2;21117:18;;20976:225;9484:36:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9464:56;;;9533:8;9528:23;;9543:8;;;;9528:23;9559:6;-1:-1:-1;;;;;9559:21:3;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9590:24;9617:6;-1:-1:-1;;;;;9617:26:3;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9590:55;;9653:24;9786:6;-1:-1:-1;;;;;9786:21:3;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9760:6;-1:-1:-1;;;;;9760:21:3;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9735:6;-1:-1:-1;;;;;9735:20:3;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;:::i;:::-;:74;;;;:::i;:::-;9707:16;9680:6;-1:-1:-1;;;;;9680:14:3;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;;:::i;:::-;:130;;;;:::i;:::-;9844:33;;-1:-1:-1;;;9844:33:3;;-1:-1:-1;;;;;21162:32:486;;;9844:33:3;;;21144:51:486;9653:157:3;;-1:-1:-1;9818:23:3;;9844:25;;;;;21117:18:486;;9844:33:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9818:59;-1:-1:-1;9952:4:3;9914:34;9818:59;9914:16;:34;:::i;:::-;9913:43;;;;:::i;:::-;9899:57;;:11;:57;:::i;:::-;9885:71;-1:-1:-1;10031:4:3;9993:34;10012:15;9993:16;:34;:::i;:::-;9992:43;;;;:::i;:::-;9978:57;;:11;:57;:::i;:::-;9964:71;;10082:6;-1:-1:-1;;;;;10066:35:3;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10044:16;10061:1;10044:19;;;;;;;;:::i;:::-;;;;;;:59;-1:-1:-1;;;;;10044:59:3;;;-1:-1:-1;;;;;10044:59:3;;;;;10138:42;10160:16;10177:1;10160:19;;;;;;;;:::i;:::-;;;;;;;10138:21;:42::i;:::-;10111:69;;10114:17;10132:1;10114:20;;;;;;;;:::i;:::-;;;;;;10111:69;;;;9421:766;;;;;9376:811;9416:3;;;;:::i;:::-;;;;9376:811;;;;10193:21;10217:9;;;;;;;;;-1:-1:-1;;;;;10217:9:3;-1:-1:-1;;;;;10217:24:3;;10242:11;-1:-1:-1;;;;;10242:17:3;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10217:45;;-1:-1:-1;;;;;;10217:45:3;;;;;;;-1:-1:-1;;;;;21162:32:486;;;10217:45:3;;;21144:51:486;21117:18;;10217:45:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10276:11;;10289;;-1:-1:-1;10302:16:3;;-1:-1:-1;10320:17:3;;-1:-1:-1;10276:11:3;;-1:-1:-1;8882:1479:3;;-1:-1:-1;;;;;8882:1479:3:o;23192:464::-;23288:16;23312:27;23347:22;23377:13;23406:24;23432:40;23476:37;23505:7;23476:28;:37::i;17811:540::-;17892:16;17910;17934:28;17965:11;-1:-1:-1;;;;;17965:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17965:27:3;;;;;;;;;;;;:::i;:::-;17934:58;;17999:23;18039:11;:18;-1:-1:-1;;;;;18025:33:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18025:33:3;;17999:59;;18064:35;18116:11;:18;-1:-1:-1;;;;;18102:33:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18102:33:3;;18064:71;;18146:9;18141:164;18165:11;:18;18161:1;:22;18141:164;;;18218:11;18230:1;18218:14;;;;;;;;:::i;:::-;;;;;;;18198:6;18205:1;18198:9;;;;;;;;:::i;:::-;;;;;;:35;-1:-1:-1;;;;;18198:35:3;;;-1:-1:-1;;;;;18198:35:3;;;;;18265:11;-1:-1:-1;;;;;18265:22:3;;18288:6;18295:1;18288:9;;;;;;;;:::i;:::-;;;;;;;18265:33;;;;;;;;;;;;;;-1:-1:-1;;;;;21162:32:486;;;;21144:51;;21132:2;21117:18;;20976:225;18265:33:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18241:18;18260:1;18241:21;;;;;;;;:::i;:::-;;;;;;;;;;:57;18185:3;;;;:::i;:::-;;;;18141:164;;;-1:-1:-1;18319:6:3;;18327:18;;-1:-1:-1;17811:540:3;-1:-1:-1;;;17811:540:3:o;3001:20::-;;;;;;;:::i;18576:1073::-;18680:16;18704;18728;18759:28;18790:11;-1:-1:-1;;;;;18790:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18790:27:3;;;;;;;;;;;;:::i;:::-;18759:58;;18824:23;18864:11;:18;-1:-1:-1;;;;;18850:33:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18850:33:3;;18824:59;;18889:35;18941:11;:18;-1:-1:-1;;;;;18927:33:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18927:33:3;;18889:71;;18966:42;19025:11;:18;-1:-1:-1;;;;;19011:33:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19011:33:3;;18966:78;;19055:9;19050:526;19074:11;:18;19070:1;:22;19050:526;;;19127:11;19139:1;19127:14;;;;;;;;:::i;:::-;;;;;;;19107:6;19114:1;19107:9;;;;;;;;:::i;:::-;;;;;;:35;-1:-1:-1;;;;;19107:35:3;;;-1:-1:-1;;;;;19107:35:3;;;;;19174:11;-1:-1:-1;;;;;19174:22:3;;19197:6;19204:1;19197:9;;;;;;;;:::i;:::-;;;;;;;19174:33;;;;;;;;;;;;;;-1:-1:-1;;;;;21162:32:486;;;;21144:51;;21132:2;21117:18;;20976:225;19174:33:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19150:18;19169:1;19150:21;;;;;;;;:::i;:::-;;;;;;:57;;;;;19215:26;19244:11;19256:1;19244:14;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;19244:41:3;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19215:72;;19295:34;19332:11;-1:-1:-1;;;;;19332:41:3;;19374:6;19381:1;19374:9;;;;;;;;:::i;:::-;;;;;;;19332:52;;;;;;;;;;;;;;-1:-1:-1;;;;;21162:32:486;;;;21144:51;;21132:2;21117:18;;20976:225;19332:52:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19295:89;;19426:18;19396:26;:48;19392:177;;19477:1;19446:25;19472:1;19446:28;;;;;;;;:::i;:::-;;;;;;:32;;;;;19392:177;;;19522:47;19543:26;19522:18;:47;:::i;:::-;19491:25;19517:1;19491:28;;;;;;;;:::i;:::-;;;;;;:78;;;;;19392:177;19099:477;;19094:3;;;;;:::i;:::-;;;;19050:526;;;-1:-1:-1;19590:6:3;;19598:18;;-1:-1:-1;19590:6:3;;-1:-1:-1;18576:1073:3;-1:-1:-1;;;18576:1073:3:o;20610:869::-;20700:27;20735:40;20783:35;20826:22;20856:34;20905:28;20953:5;-1:-1:-1;;;;;20953:17:3;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20905:68;;21042:46;21069:5;21076:11;21042:26;:46::i;:::-;21111:38;;-1:-1:-1;;;21111:38:3;;-1:-1:-1;;;;;21162:32:486;;;21111:38:3;;;21144:51:486;20979:109:3;;-1:-1:-1;20979:109:3;;-1:-1:-1;20979:109:3;-1:-1:-1;21111:22:3;;;;;;21117:18:486;;21111:38:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21094:55;;21155:20;21178:5;-1:-1:-1;;;;;21178:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21249:58;;-1:-1:-1;;;21249:58:3;;-1:-1:-1;;;;;21162:32:486;;;21249:58:3;;;21144:51:486;21155:50:3;;-1:-1:-1;21211:35:3;;21249:42;;;;;21117:18:486;;21249:58:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21211:96;;21348:12;21317:27;:43;21313:161;;21391:1;21362:30;;21313:161;;;21432:42;21447:27;21432:12;:42;:::i;:::-;21403:71;;21313:161;20899:580;;;20610:869;;;;;;;:::o;21748:926::-;21836:16;21854:27;21894:33;21931:9;;;;;;;;;-1:-1:-1;;;;;21931:9:3;-1:-1:-1;;;;;21931:24:3;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21931:26:3;;;;;;;;;;;;:::i;:::-;21891:66;;;21963:19;21998:9;21993:185;22017:5;:12;22013:1;:16;21993:185;;;22044:28;22092:5;22098:1;22092:8;;;;;;;;:::i;:::-;;;;;;;:20;;;22044:69;;22126:11;-1:-1:-1;;;;;22126:21:3;;22148:7;22126:30;;;;;;;;;;;;;;-1:-1:-1;;;;;21162:32:486;;;;21144:51;;21132:2;21117:18;;20976:225;22126:30:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22122:49;;;22158:13;;;;:::i;:::-;;;;22122:49;-1:-1:-1;22031:3:3;;;;:::i;:::-;;;;21993:185;;;;22184:24;22225:11;-1:-1:-1;;;;;22211:26:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22211:26:3;;22184:53;;22243:40;22311:11;-1:-1:-1;;;;;22286:37:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22286:37:3;;;;;;;;;;;;;;;;;22243:80;;22329:13;22358:9;22353:280;22377:5;:12;22373:1;:16;22353:280;;;22404:28;22452:5;22458:1;22452:8;;;;;;;;:::i;:::-;;;;;;;:20;;;22404:69;;22486:11;-1:-1:-1;;;;;22486:21:3;;22508:7;22486:30;;;;;;;;;;;;;;-1:-1:-1;;;;;21162:32:486;;;;21144:51;;21132:2;21117:18;;20976:225;22486:30:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22482:145;;;22545:1;22528:7;22536:5;22528:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;22578:5;22584:1;22578:8;;;;;;;;:::i;:::-;;;;;;;22556:12;22569:5;22556:19;;;;;;;;:::i;:::-;;;;;;:30;;;;22596:7;;;;;:::i;:::-;;;;22613:5;;;22482:145;-1:-1:-1;22391:3:3;;;;:::i;:::-;;;;22353:280;;;-1:-1:-1;22647:7:3;;22656:12;;-1:-1:-1;21748:926:3;-1:-1:-1;;;;;21748:926:3:o;4147:421::-;4214:16;4238:27;4273:22;4303:13;4332:24;4358:39;4401:9;;;;;;;;;-1:-1:-1;;;;;4401:9:3;-1:-1:-1;;;;;4401:24:3;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4401:26:3;;;;;;;;;;;;:::i;:::-;4331:96;;;;4434:27;4463:21;4488:25;4501:11;4488:12;:25::i;:::-;4527:7;;4536:11;;-1:-1:-1;4536:11:3;-1:-1:-1;4527:7:3;;-1:-1:-1;4147:421:3;;-1:-1:-1;;;4147:421:3:o;5063:498::-;5352:9;;:68;;-1:-1:-1;;;5352:68:3;;32082:14:486;;32075:22;5352:68:3;;;32057:41:486;5165:16:3;;;;;;;;5283:24;;;;-1:-1:-1;;;;;5352:9:3;;;;:38;;32030:18:486;;5352:68:3;31917:187:486;7009:432:3;7274:9;;:30;;-1:-1:-1;;;7274:30:3;;-1:-1:-1;;;;;21162:32:486;;;7274:30:3;;;21144:51:486;7089:16:3;;;;;;;;7207:24;;;;7274:9;;;;:24;;21117:18:486;;7274:30:3;20976:225:486;11710:2937:3;11845:18;11871:19;11906:9;11901:155;11925:7;:14;11921:1;:18;11901:155;;;11955:13;11974:11;-1:-1:-1;;;;;11974:19:3;;12002:7;12010:1;12002:10;;;;;;;;:::i;:::-;;;;;;;11974:40;;;;;;;;;;;;;;-1:-1:-1;;;;;21162:32:486;;;;21144:51;;21132:2;21117:18;;20976:225;11974:40:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11954:60;;;12026:8;12022:27;;;12036:13;;;;:::i;:::-;;;;12022:27;-1:-1:-1;11941:3:3;;;;:::i;:::-;;;;11901:155;;;;12062:33;12114:11;-1:-1:-1;;;;;12098:28:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;12062:64;;12132:13;12155:22;12204:11;-1:-1:-1;;;;;12204:18:3;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12155:71;;12238:9;12233:2380;12257:7;:14;12253:1;:18;12233:2380;;;12348:13;12363:32;12399:11;-1:-1:-1;;;;;12399:19:3;;12427:7;12435:1;12427:10;;;;;;;;:::i;:::-;;;;;;;12399:40;;;;;;;;;;;;;;-1:-1:-1;;;;;21162:32:486;;;;21144:51;;21132:2;21117:18;;20976:225;12399:40:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12347:92;;;;12452:8;12447:23;;12462:8;;;;12447:23;12519:22;;:::i;:::-;12549:14;12566:7;12574:1;12566:10;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12584:30:3;;;;;12623:23;;;-1:-1:-1;;;12623:23:3;;;;12566:10;;-1:-1:-1;12584:30:3;;12623:21;;:23;;;;;;;;;;12584:12;:30;12623:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12730:6;-1:-1:-1;;;;;12714:35:3;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12690:61:3;:21;;;:61;;;12885:44;12690:61;12885:21;:44::i;:::-;12837:5;:20;;12859:5;:22;;12836:93;;;;;;;;12964:10;-1:-1:-1;;;;;12964:19:3;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12937:48;;:24;;;:48;13019:26;;-1:-1:-1;;;13019:26:3;;-1:-1:-1;;;;;21162:32:486;;;13019:26:3;;;21144:51:486;13019:20:3;;;;;21117:18:486;;13019:26:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12993:5;:23;;:52;;;;;13106:6;-1:-1:-1;;;;;13106:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13079:5;:24;;:54;;;;;13168:6;-1:-1:-1;;;;;13168:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13141:5;:24;;:54;;;;;13221:6;-1:-1:-1;;;;;13221:14:3;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13203:5;:15;;:34;;;;;13265:6;-1:-1:-1;;;;;13265:26:3;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13245:5;:17;;:48;;;;;13435:6;-1:-1:-1;;;;;13435:21:3;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13409:6;-1:-1:-1;;;;;13409:21:3;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13384:6;-1:-1:-1;;;;;13384:20:3;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;:::i;:::-;:74;;;;:::i;:::-;13355:5;:17;;;13329:5;:15;;;:43;;;;:::i;:::-;:130;;;;:::i;:::-;13301:17;;;:158;13489:32;;-1:-1:-1;;;13489:32:3;;-1:-1:-1;;;;;21162:32:486;;;13489::3;;;21144:51:486;13489:26:3;;;;;21117:18:486;;13489:32:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13467:19;;;:54;13551:33;;-1:-1:-1;;;13551:33:3;;-1:-1:-1;;;;;21162:32:486;;;13551:33:3;;;21144:51:486;13551:27:3;;;;;21117:18:486;;13551:33:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13529:19;;;:55;13611:41;;-1:-1:-1;;;13611:41:3;;-1:-1:-1;;;;;32634:15:486;;;13611:41:3;;;32616:34:486;32686:15;;;32666:18;;;32659:43;13611:27:3;;;;;32551:18:486;;13611:41:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13592:60;;:16;;;:60;13681:28;;;-1:-1:-1;;;13681:28:3;;;;-1:-1:-1;;;;;13681:26:3;;;;;:28;;;;;;;;;;;;;;:26;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13660:18;;;:49;13827:21;;;;13814:35;;-1:-1:-1;;;13814:35:3;;-1:-1:-1;;;;;21162:32:486;;;13814:35:3;;;21144:51:486;13814:12:3;;;;;;21117:18:486;;13814:35:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13790:21;;;:59;-1:-1:-1;;;;;13894:30:3;;;:12;;;:30;;;13977:21;;;;13937:62;;-1:-1:-1;;;13937:62:3;;21162:32:486;;13937:62:3;;;21144:51:486;13894:30:3;13937:39;;21117:18:486;;13937:62:3;;;;;;;;;;;;;;;;;;-1:-1:-1;13937:62:3;;;;;;;;-1:-1:-1;;13937:62:3;;;;;;;;;;;;:::i;:::-;;;13933:160;;;;;-1:-1:-1;;;;;14044:31:3;:12;;;:31;13933:160;14152:24;14127:5;:22;;:49;;;;;14206:6;-1:-1:-1;;;;;14206:28:3;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14184:5;:19;;:52;;;;;14261:6;-1:-1:-1;;;;;14261:23:3;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14244:5;:14;;:42;;;;;14311:6;-1:-1:-1;;;;;14311:23:3;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14294:14;;;:42;14373:49;;-1:-1:-1;;;14373:49:3;;-1:-1:-1;;;;;21162:32:486;;;14373:49:3;;;21144:51:486;14373:32:3;;;;;21117:18:486;;14373:49:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14344:78;;:26;;;:78;14457:47;;-1:-1:-1;;;14457:47:3;;-1:-1:-1;;;;;21162:32:486;;;14457:47:3;;;21144:51:486;14457:30:3;;;;;21117:18:486;;14457:47:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14430:74;;:24;;;:74;14562:21;;14430:5;;14562:14;;14577:5;;14562:21;;;;;;:::i;:::-;;;;;;:29;;;;14599:7;;;;;:::i;:::-;;;;12278:2335;;;;;12233:2380;12273:3;;;;:::i;:::-;;;;12233:2380;;;-1:-1:-1;14627:14:3;;11710:2937;-1:-1:-1;;;;;;;11710:2937:3:o;14651:1067::-;14782:27;14817:44;14869:51;14935:28;14966:11;-1:-1:-1;;;;;14966:25:3;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14966:27:3;;;;;;;;;;;;:::i;:::-;14935:58;;15027:11;:18;-1:-1:-1;;;;;15013:33:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15013:33:3;;15000:46;;15096:11;:18;-1:-1:-1;;;;;15082:33:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15082:33:3;;15052:63;;15172:11;:18;-1:-1:-1;;;;;15161:30:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15161:30:3;;15121:70;;15203:9;15198:516;15222:11;:18;15218:1;:22;15198:516;;;15255:25;15291:11;15303:1;15291:14;;;;;;;;:::i;:::-;;;;;;;15255:51;;15347:13;-1:-1:-1;;;;;15318:43:3;:17;-1:-1:-1;;;;;15318:43:3;;15314:394;;15389:17;15373:10;15384:1;15373:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15373:33:3;;;:13;;;;;;;;;:33;15449:77;;-1:-1:-1;;;15449:77:3;;32634:15:486;;;15449:77:3;;;32616:34:486;32686:15;;;32666:18;;;32659:43;15449:34:3;;;;;;32551:18:486;;15449:77:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15416:27;15444:1;15416:30;;;;;;;;:::i;:::-;;;;;;;;;;:110;15579:120;;-1:-1:-1;;;15579:120:3;;-1:-1:-1;;;;;32634:15:486;;;15579:120:3;;;32616:34:486;32686:15;;;32666:18;;;32659:43;15579:47:3;;;;;32551:18:486;;15579:120:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15536:37;15574:1;15536:40;;;;;;;;:::i;:::-;:163;;;:40;;;;;;;;;;;:163;15314:394;-1:-1:-1;15242:3:3;;;;:::i;:::-;;;;15198:516;;;;14929:789;14651:1067;;;;;:::o;7943:766::-;8018:22;8042:13;8063:27;8113:5;:12;-1:-1:-1;;;;;8093:33:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8093:33:3;;;;;;;;;;;;;;;;;8063:63;;8132:21;8167:5;:12;-1:-1:-1;;;;;8156:24:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8156:24:3;;8132:48;;8192:9;8187:489;8211:5;:12;8207:1;:16;8187:489;;;8242:4;-1:-1:-1;;;;;8242:19:3;;8279:5;8285:1;8279:8;;;;;;;;:::i;:::-;;;;;;;:20;;;8242:59;;;;;;;;;;;;;;-1:-1:-1;;;;;21162:32:486;;;;21144:51;;21132:2;21117:18;;20976:225;8242:59:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8242:59:3;;;;;;;;;;;;:::i;:::-;;;8238:432;;8657:4;8644:7;8652:1;8644:10;;;;;;;;:::i;:::-;:17;;;:10;;;;;;;;;;;:17;8238:432;;;8519:99;;;;;;;;8533:12;8519:99;;;;8547:12;8519:99;;;;8561:17;8519:99;;;;8580:18;8519:99;;;;8600:17;8519:99;;;;;8509:4;8514:1;8509:7;;;;;;;;:::i;:::-;;;;;;:109;;;;8302:325;;;;;8238:432;8225:3;;;;:::i;:::-;;;;8187:489;;;-1:-1:-1;8690:4:3;;8696:7;;-1:-1:-1;7943:766:3;-1:-1:-1;;7943:766:3:o;15944:513::-;-1:-1:-1;;;;;16105:16:3;;;;;;:9;:16;;;;;:23;;16099:37;;16013:13;;;;16099:37;;;:::i;:::-;:42;;-1:-1:-1;16095:118:3;;-1:-1:-1;;;;;16159:16:3;;;;;;:9;:16;;;;;16151:55;;16182:23;;;;16159:16;;16151:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15944:513;;;:::o;16095:118::-;16266:30;16316:5;16266:56;;16328:19;16350:13;-1:-1:-1;;;;;16350:18:3;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16350:20:3;;;;;;;;;;;;:::i;:::-;16328:42;;16376:21;16400:13;-1:-1:-1;;;;;16400:20:3;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16400:22:3;;;;;;;;;;;;:::i;:::-;16437:5;;16376:46;;-1:-1:-1;15944:513:3;;-1:-1:-1;;;;15944:513:3:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:258:486;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;262:1;253:6;248:3;244:16;237:27;218:48;;14:258;;;:::o;277:::-;319:3;357:5;351:12;384:6;379:3;372:19;400:63;456:6;449:4;444:3;440:14;433:4;426:5;422:16;400:63;:::i;:::-;517:2;496:15;-1:-1:-1;;492:29:486;483:39;;;;524:4;479:50;;277:258;-1:-1:-1;;277:258:486:o;540:220::-;689:2;678:9;671:21;652:4;709:45;750:2;739:9;735:18;727:6;709:45;:::i;:::-;701:53;540:220;-1:-1:-1;;;540:220:486:o;765:149::-;-1:-1:-1;;;;;858:31:486;;848:42;;838:70;;904:1;901;894:12;838:70;765:149;:::o;919:450::-;1013:6;1021;1074:2;1062:9;1053:7;1049:23;1045:32;1042:52;;;1090:1;1087;1080:12;1042:52;1129:9;1116:23;1148:49;1191:5;1148:49;:::i;:::-;1216:5;-1:-1:-1;1273:2:486;1258:18;;1245:32;1286:51;1245:32;1286:51;:::i;:::-;1356:7;1346:17;;;919:450;;;;;:::o;1579:3314::-;1775:4;1804:2;1844;1833:9;1829:18;1874:2;1863:9;1856:21;1897:6;1932;1926:13;1963:6;1955;1948:22;1989:2;1979:12;;2022:2;2011:9;2007:18;2000:25;;2084:2;2074:6;2071:1;2067:14;2056:9;2052:30;2048:39;2122:2;2114:6;2110:15;2143:1;2153:2711;2167:6;2164:1;2161:13;2153:2711;;;2232:22;;;-1:-1:-1;;2228:36:486;2216:49;;2288:13;;2362:9;;-1:-1:-1;;;;;1440:31:486;1428:44;;2324:6;2419:11;;;2413:18;-1:-1:-1;;;;;1440:31:486;;2477:15;;;1428:44;2444:49;2542:2;2538;2534:11;2528:18;2583:2;2578;2570:6;2566:15;2559:27;2613:50;2659:2;2651:6;2647:15;2631:14;2613:50;:::i;:::-;2599:64;;;2686:4;2739:2;2735;2731:11;2725:18;2792:6;2784;2780:19;2775:2;2767:6;2763:15;2756:44;2827:41;2861:6;2845:14;2827:41;:::i;:::-;2891:4;2938:11;;;2932:18;2915:15;;;2908:43;2974:4;3021:11;;;3015:18;2998:15;;;2991:43;3057:4;3104:11;;;3098:18;3081:15;;;3074:43;3140:4;3187:11;;;3181:18;3164:15;;;3157:43;3224:6;3274:12;;;3268:19;3250:16;;;3243:45;3312:6;3362:12;;;3356:19;3338:16;;;3331:45;3400:6;3450:12;;;3444:19;3426:16;;;3419:45;3488:6;3538:12;;;3532:19;3514:16;;;3507:45;3576:6;3626:12;;;3620:19;3602:16;;;3595:45;3664:6;3711:12;;;3705:19;1553:13;1546:21;3769:16;;;1534:34;3810:6;3860:12;;;3854:19;3836:16;;;3829:45;3898:6;3948:12;;;3942:19;3924:16;;;3917:45;3986:6;4033:12;;;4027:19;-1:-1:-1;;;;;1440:31:486;4094:16;;;1428:44;4135:6;4185:12;;;4179:19;4161:16;;;4154:45;4223:6;4273:12;;;4267:19;4249:16;;;4242:45;4311:6;4361:12;;;4355:19;4337:16;;;4330:45;4399:6;4449:12;;;4443:19;4425:16;;;4418:45;4487:6;4534:12;;;4528:19;1553:13;1546:21;4592:16;;;1534:34;4633:6;4680:12;;;4674:19;1553:13;1546:21;4738:16;;;;1534:34;;;;-1:-1:-1;;;4842:12:486;;;;4807:15;;;;2189:1;2182:9;2153:2711;;;-1:-1:-1;4881:6:486;;1579:3314;-1:-1:-1;;;;;;;;1579:3314:486:o;4898:282::-;4974:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:52;;;5043:1;5040;5033:12;4995:52;5082:9;5069:23;5101:49;5144:5;5101:49;:::i;5185:461::-;5238:3;5276:5;5270:12;5303:6;5298:3;5291:19;5329:4;5358:2;5353:3;5349:12;5342:19;;5395:2;5388:5;5384:14;5416:1;5426:195;5440:6;5437:1;5434:13;5426:195;;;5505:13;;-1:-1:-1;;;;;5501:39:486;5489:52;;5561:12;;;;5596:15;;;;5537:1;5455:9;5426:195;;;-1:-1:-1;5637:3:486;;5185:461;-1:-1:-1;;;;;5185:461:486:o;5651:435::-;5704:3;5742:5;5736:12;5769:6;5764:3;5757:19;5795:4;5824:2;5819:3;5815:12;5808:19;;5861:2;5854:5;5850:14;5882:1;5892:169;5906:6;5903:1;5900:13;5892:169;;;5967:13;;5955:26;;6001:12;;;;6036:15;;;;5928:1;5921:9;5892:169;;6091:448;6141:3;6179:5;6173:12;6206:6;6201:3;6194:19;6232:4;6261:2;6256:3;6252:12;6245:19;;6298:2;6291:5;6287:14;6319:1;6329:185;6343:6;6340:1;6337:13;6329:185;;;6418:13;;6411:21;6404:29;6392:42;;6454:12;;;;6489:15;;;;6365:1;6358:9;6329:185;;6544:733;6901:3;6890:9;6883:22;6864:4;6928:57;6980:3;6969:9;6965:19;6957:6;6928:57;:::i;:::-;7033:9;7025:6;7021:22;7016:2;7005:9;7001:18;6994:50;7067:44;7104:6;7096;7067:44;:::i;:::-;7053:58;;7159:9;7151:6;7147:22;7142:2;7131:9;7127:18;7120:50;7187:41;7221:6;7213;7187:41;:::i;:::-;7179:49;;;7264:6;7259:2;7248:9;7244:18;7237:34;6544:733;;;;;;;:::o;7578:167::-;7661:20;;7690:49;7661:20;7690:49;:::i;:::-;7578:167;;;:::o;7750:127::-;7811:10;7806:3;7802:20;7799:1;7792:31;7842:4;7839:1;7832:15;7866:4;7863:1;7856:15;7882:253;7954:2;7948:9;7996:4;7984:17;;-1:-1:-1;;;;;8016:34:486;;8052:22;;;8013:62;8010:88;;;8078:18;;:::i;:::-;8114:2;8107:22;7882:253;:::o;8140:275::-;8211:2;8205:9;8276:2;8257:13;;-1:-1:-1;;8253:27:486;8241:40;;-1:-1:-1;;;;;8296:34:486;;8332:22;;;8293:62;8290:88;;;8358:18;;:::i;:::-;8394:2;8387:22;8140:275;;-1:-1:-1;8140:275:486:o;8420:187::-;8469:4;-1:-1:-1;;;;;8494:6:486;8491:30;8488:56;;;8524:18;;:::i;:::-;-1:-1:-1;8590:2:486;8569:15;-1:-1:-1;;8565:29:486;8596:4;8561:40;;8420:187::o;8612:464::-;8655:5;8708:3;8701:4;8693:6;8689:17;8685:27;8675:55;;8726:1;8723;8716:12;8675:55;8762:6;8749:20;8793:49;8809:32;8838:2;8809:32;:::i;:::-;8793:49;:::i;:::-;8867:2;8858:7;8851:19;8913:3;8906:4;8901:2;8893:6;8889:15;8885:26;8882:35;8879:55;;;8930:1;8927;8920:12;8879:55;8995:2;8988:4;8980:6;8976:17;8969:4;8960:7;8956:18;8943:55;9043:1;9018:16;;;9036:4;9014:27;9007:38;;;;9022:7;8612:464;-1:-1:-1;;;8612:464:486:o;9081:183::-;9141:4;-1:-1:-1;;;;;9166:6:486;9163:30;9160:56;;;9196:18;;:::i;:::-;-1:-1:-1;9241:1:486;9237:14;9253:4;9233:25;;9081:183::o;9269:755::-;9323:5;9376:3;9369:4;9361:6;9357:17;9353:27;9343:55;;9394:1;9391;9384:12;9343:55;9430:6;9417:20;9456:4;9480:60;9496:43;9536:2;9496:43;:::i;9480:60::-;9574:15;;;9660:1;9656:10;;;;9644:23;;9640:32;;;9605:12;;;;9684:15;;;9681:35;;;9712:1;9709;9702:12;9681:35;9748:2;9740:6;9736:15;9760:235;9776:6;9771:3;9768:15;9760:235;;;9856:3;9843:17;9873:49;9916:5;9873:49;:::i;:::-;9935:18;;9973:12;;;;9793;;9760:235;;;-1:-1:-1;10013:5:486;9269:755;-1:-1:-1;;;;;;9269:755:486:o;10029:888::-;10082:5;10135:3;10128:4;10120:6;10116:17;10112:27;10102:55;;10153:1;10150;10143:12;10102:55;10189:6;10176:20;10215:4;10239:60;10255:43;10295:2;10255:43;:::i;10239:60::-;10333:15;;;10419:1;10415:10;;;;10403:23;;10399:32;;;10364:12;;;;10443:15;;;10440:35;;;10471:1;10468;10461:12;10440:35;10507:2;10499:6;10495:15;10519:369;10535:6;10530:3;10527:15;10519:369;;;10621:3;10608:17;-1:-1:-1;;;;;10644:11:486;10641:35;10638:125;;;10717:1;10746:2;10742;10735:14;10638:125;10788:57;10841:3;10836:2;10822:11;10814:6;10810:24;10806:33;10788:57;:::i;:::-;10776:70;;-1:-1:-1;10866:12:486;;;;10552;;10519:369;;10922:2061;11295:6;11303;11311;11319;11327;11335;11343;11351;11359;11412:3;11400:9;11391:7;11387:23;11383:33;11380:53;;;11429:1;11426;11419:12;11380:53;11452:44;11486:9;11452:44;:::i;:::-;11442:54;;11547:2;11536:9;11532:18;11519:32;-1:-1:-1;;;;;11611:2:486;11603:6;11600:14;11597:34;;;11627:1;11624;11617:12;11597:34;11650:50;11692:7;11683:6;11672:9;11668:22;11650:50;:::i;:::-;11640:60;;11753:2;11742:9;11738:18;11725:32;11709:48;;11782:2;11772:8;11769:16;11766:36;;;11798:1;11795;11788:12;11766:36;11821:52;11865:7;11854:8;11843:9;11839:24;11821:52;:::i;:::-;11811:62;;11926:2;11915:9;11911:18;11898:32;11882:48;;11955:2;11945:8;11942:16;11939:36;;;11971:1;11968;11961:12;11939:36;11994:63;12049:7;12038:8;12027:9;12023:24;11994:63;:::i;:::-;11984:73;;12110:3;12099:9;12095:19;12082:33;12066:49;;12140:2;12130:8;12127:16;12124:36;;;12156:1;12153;12146:12;12124:36;12179:62;12233:7;12222:8;12211:9;12207:24;12179:62;:::i;:::-;12169:72;;12294:3;12283:9;12279:19;12266:33;12250:49;;12324:2;12314:8;12311:16;12308:36;;;12340:1;12337;12330:12;12308:36;12363:62;12417:7;12406:8;12395:9;12391:24;12363:62;:::i;:::-;12353:72;;12478:3;12467:9;12463:19;12450:33;12434:49;;12508:2;12498:8;12495:16;12492:36;;;12524:1;12521;12514:12;12492:36;12547:62;12601:7;12590:8;12579:9;12575:24;12547:62;:::i;:::-;12537:72;;12662:3;12651:9;12647:19;12634:33;12618:49;;12692:2;12682:8;12679:16;12676:36;;;12708:1;12705;12698:12;12676:36;12731:62;12785:7;12774:8;12763:9;12759:24;12731:62;:::i;:::-;12721:72;;12846:3;12835:9;12831:19;12818:33;12802:49;;12876:2;12866:8;12863:16;12860:36;;;12892:1;12889;12882:12;12860:36;;12915:62;12969:7;12958:8;12947:9;12943:24;12915:62;:::i;:::-;12905:72;;;10922:2061;;;;;;;;;;;:::o;13258:1202::-;13315:3;13353:5;13347:12;13380:6;13375:3;13368:19;13406:4;13447:2;13442:3;13438:12;13472:11;13499;13492:18;;13549:6;13546:1;13542:14;13535:5;13531:26;13519:38;;13591:2;13584:5;13580:14;13612:1;13622:812;13636:6;13633:1;13630:13;13622:812;;;13707:5;13701:4;13697:16;13692:3;13685:29;13743:6;13737:13;13773:4;13816:2;13810:9;13845:2;13839:4;13832:16;13875:46;13917:2;13911:4;13907:13;13893:12;13875:46;:::i;:::-;13962:11;;;13956:18;-1:-1:-1;;;;;14051:23:486;;;14036:13;;;14029:46;14098:4;14147:11;;;14141:18;14137:27;;;14122:13;;;14115:50;14188:4;14233:11;;;14227:18;14212:13;;;14205:41;14269:4;14314:11;;;14308:18;14293:13;;;;14286:41;;;;-1:-1:-1;;14412:12:486;;;;14377:15;;;;14014:1;13651:9;13622:812;;14465:616;14517:3;14555:5;14549:12;14582:6;14577:3;14570:19;14608:4;14649:2;14644:3;14640:12;14674:11;14701;14694:18;;14751:6;14748:1;14744:14;14737:5;14733:26;14721:38;;14793:2;14786:5;14782:14;14814:1;14824:231;14838:6;14835:1;14832:13;14824:231;;;14909:5;14903:4;14899:16;14894:3;14887:29;14937:38;14970:4;14961:6;14955:13;14937:38;:::i;:::-;15033:12;;;;14929:46;-1:-1:-1;14998:15:486;;;;14860:1;14853:9;14824:231;;15086:2061;15562:4;15591:3;15621:2;15610:9;15603:21;15647:56;15699:2;15688:9;15684:18;15676:6;15647:56;:::i;:::-;15722:2;15772:9;15764:6;15760:22;15755:2;15744:9;15740:18;15733:50;15806:48;15847:6;15839;15806:48;:::i;:::-;15792:62;;15873:2;15923:9;15915:6;15911:22;15906:2;15895:9;15891:18;15884:50;15954:6;15989;15983:13;16020:6;16012;16005:22;16055:2;16047:6;16043:15;16036:22;;16114:2;16104:6;16101:1;16097:14;16089:6;16085:27;16081:36;16152:2;16144:6;16140:15;16173:1;16183:839;16197:6;16194:1;16191:13;16183:839;;;16287:2;16283:7;16274:6;16266;16262:19;16258:33;16253:3;16246:46;16321:6;16315:13;16351:4;16389:2;16383:9;16375:6;16368:25;16444:2;16440;16436:11;16430:18;16425:2;16417:6;16413:15;16406:43;16496:2;16492;16488:11;16482:18;16537:2;16532;16524:6;16520:15;16513:27;16567:59;16622:2;16614:6;16610:15;16596:12;16567:59;:::i;:::-;16553:73;;;16649:4;16702:2;16698;16694:11;16688:18;16755:6;16747;16743:19;16738:2;16730:6;16726:15;16719:44;16790:51;16834:6;16818:14;16790:51;:::i;:::-;16898:11;;;16892:18;16885:26;16878:34;16861:15;;;16854:59;;;;-1:-1:-1;;17000:12:486;;;;16776:65;-1:-1:-1;16965:15:486;;;;16219:1;16212:9;16183:839;;;16187:3;;17072:9;17064:6;17060:22;17053:4;17042:9;17038:20;17031:52;17100:41;17134:6;17126;17100:41;:::i;:::-;17092:49;15086:2061;-1:-1:-1;;;;;;;;;;;;;15086:2061:486:o;17789:710::-;18144:6;18133:9;18126:25;18187:6;18182:2;18171:9;18167:18;18160:34;18230:3;18225:2;18214:9;18210:18;18203:31;18107:4;18257:57;18309:3;18298:9;18294:19;18286:6;18257:57;:::i;:::-;18362:9;18354:6;18350:22;18345:2;18334:9;18330:18;18323:50;18390:43;18426:6;18418;18390:43;:::i;:::-;18382:51;;;18484:6;18477:14;18470:22;18464:3;18453:9;18449:19;18442:51;17789:710;;;;;;;;:::o;18504:465::-;18761:2;18750:9;18743:21;18724:4;18787:56;18839:2;18828:9;18824:18;18816:6;18787:56;:::i;:::-;18891:9;18883:6;18879:22;18874:2;18863:9;18859:18;18852:50;18919:44;18956:6;18948;18919:44;:::i;:::-;18911:52;18504:465;-1:-1:-1;;;;;18504:465:486:o;18974:669::-;19309:2;19298:9;19291:21;19272:4;19335:56;19387:2;19376:9;19372:18;19364:6;19335:56;:::i;:::-;19439:9;19431:6;19427:22;19422:2;19411:9;19407:18;19400:50;19473:44;19510:6;19502;19473:44;:::i;:::-;19459:58;;19565:9;19557:6;19553:22;19548:2;19537:9;19533:18;19526:50;19593:44;19630:6;19622;19593:44;:::i;:::-;19585:52;18974:669;-1:-1:-1;;;;;;18974:669:486:o;19648:805::-;20033:3;20022:9;20015:22;19996:4;20060:57;20112:3;20101:9;20097:19;20089:6;20060:57;:::i;:::-;20165:9;20157:6;20153:22;20148:2;20137:9;20133:18;20126:50;20199:44;20236:6;20228;20199:44;:::i;:::-;20185:58;;20291:9;20283:6;20279:22;20274:2;20263:9;20259:18;20252:50;20319:41;20353:6;20345;20319:41;:::i;:::-;20391:2;20376:18;;20369:34;;;;-1:-1:-1;;20434:3:486;20419:19;20412:35;20311:49;19648:805;-1:-1:-1;;;19648:805:486:o;20458:513::-;20759:2;20748:9;20741:21;20722:4;20785:56;20837:2;20826:9;20822:18;20814:6;20785:56;:::i;:::-;20889:9;20881:6;20877:22;20872:2;20861:9;20857:18;20850:50;20917:48;20958:6;20950;20917:48;:::i;21206:118::-;21292:5;21285:13;21278:21;21271:5;21268:32;21258:60;;21314:1;21311;21304:12;21329:241;21385:6;21438:2;21426:9;21417:7;21413:23;21409:32;21406:52;;;21454:1;21451;21444:12;21406:52;21493:9;21480:23;21512:28;21534:5;21512:28;:::i;21575:380::-;21654:1;21650:12;;;;21697;;;21718:61;;21772:4;21764:6;21760:17;21750:27;;21718:61;21825:2;21817:6;21814:14;21794:18;21791:38;21788:161;;;21871:10;21866:3;21862:20;21859:1;21852:31;21906:4;21903:1;21896:15;21934:4;21931:1;21924:15;21788:161;;21575:380;;;:::o;22168:991::-;22280:6;22311:2;22354;22342:9;22333:7;22329:23;22325:32;22322:52;;;22370:1;22367;22360:12;22322:52;22403:9;22397:16;-1:-1:-1;;;;;22428:6:486;22425:30;22422:50;;;22468:1;22465;22458:12;22422:50;22491:22;;22544:4;22536:13;;22532:27;-1:-1:-1;22522:55:486;;22573:1;22570;22563:12;22522:55;22602:2;22596:9;22625:60;22641:43;22681:2;22641:43;:::i;22625:60::-;22719:15;;;22801:1;22797:10;;;;22789:19;;22785:28;;;22750:12;;;;22825:19;;;22822:39;;;22857:1;22854;22847:12;22822:39;22881:11;;;;22901:228;22917:6;22912:3;22909:15;22901:228;;;22990:3;22984:10;23007:49;23050:5;23007:49;:::i;:::-;23069:18;;22934:12;;;;23107;;;;22901:228;;;23148:5;22168:991;-1:-1:-1;;;;;;;22168:991:486:o;23164:295::-;23260:6;23313:2;23301:9;23292:7;23288:23;23284:32;23281:52;;;23329:1;23326;23319:12;23281:52;23361:9;23355:16;23380:49;23423:5;23380:49;:::i;23464:184::-;23534:6;23587:2;23575:9;23566:7;23562:23;23558:32;23555:52;;;23603:1;23600;23593:12;23555:52;-1:-1:-1;23626:16:486;;23464:184;-1:-1:-1;23464:184:486:o;25304:127::-;25365:10;25360:3;25356:20;25353:1;25346:31;25396:4;25393:1;25386:15;25420:4;25417:1;25410:15;25436:127;25497:10;25492:3;25488:20;25485:1;25478:31;25528:4;25525:1;25518:15;25552:4;25549:1;25542:15;25568:135;25607:3;-1:-1:-1;;25628:17:486;;25625:43;;;25648:18;;:::i;:::-;-1:-1:-1;25695:1:486;25684:13;;25568:135::o;25907:430::-;25961:5;26014:3;26007:4;25999:6;25995:17;25991:27;25981:55;;26032:1;26029;26022:12;25981:55;26061:6;26055:13;26092:49;26108:32;26137:2;26108:32;:::i;26092:49::-;26166:2;26157:7;26150:19;26212:3;26205:4;26200:2;26192:6;26188:15;26184:26;26181:35;26178:55;;;26229:1;26226;26219:12;26178:55;26242:64;26303:2;26296:4;26287:7;26283:18;26276:4;26268:6;26264:17;26242:64;:::i;:::-;26324:7;25907:430;-1:-1:-1;;;;25907:430:486:o;26342:1878::-;26411:5;26464:3;26457:4;26449:6;26445:17;26441:27;26431:55;;26482:1;26479;26472:12;26431:55;26511:6;26505:13;26537:4;26561:60;26577:43;26617:2;26577:43;:::i;26561:60::-;26655:15;;;26741:1;26737:10;;;;26725:23;;26721:32;;;26686:12;;;;26765:15;;;26762:35;;;26793:1;26790;26783:12;26762:35;26829:2;26821:6;26817:15;26841:1350;26857:6;26852:3;26849:15;26841:1350;;;26936:3;26930:10;-1:-1:-1;;;;;27013:2:486;27000:11;26997:19;26994:109;;;27057:1;27086:2;27082;27075:14;26994:109;27126:24;;;;27173:4;27201:12;;;-1:-1:-1;;27197:26:486;27193:35;-1:-1:-1;27190:125:486;;;27269:1;27298:2;27294;27287:14;27190:125;27341:22;;:::i;:::-;27406:2;27402;27398:11;27392:18;27439:2;27429:8;27426:16;27423:106;;;27483:1;27512:2;27508;27501:14;27423:106;27556:61;27613:3;27608:2;27597:8;27593:2;27589:17;27585:26;27556:61;:::i;:::-;27549:5;27542:76;;27641:2;27631:12;;27685:2;27681;27677:11;27671:18;27702:51;27745:7;27702:51;:::i;:::-;27773:14;;;27766:31;27821:2;27857:12;;;27851:19;27883:51;27851:19;27883:51;:::i;:::-;27954:14;;;27947:31;;;;28002:3;28048:12;;;28042:19;28025:15;;;28018:44;;;;28105:11;;28099:18;28082:15;;;28075:43;28131:18;;28169:12;;;;26874;;26841:1350;;28225:1160;28376:6;28384;28437:2;28425:9;28416:7;28412:23;28408:32;28405:52;;;28453:1;28450;28443:12;28405:52;28486:9;28480:16;-1:-1:-1;;;;;28556:2:486;28548:6;28545:14;28542:34;;;28572:1;28569;28562:12;28542:34;28610:6;28599:9;28595:22;28585:32;;28655:7;28648:4;28644:2;28640:13;28636:27;28626:55;;28677:1;28674;28667:12;28626:55;28706:2;28700:9;28728:4;28752:60;28768:43;28808:2;28768:43;:::i;28752:60::-;28846:15;;;28928:1;28924:10;;;;28916:19;;28912:28;;;28877:12;;;;28952:19;;;28949:39;;;28984:1;28981;28974:12;28949:39;29008:11;;;;29028:135;29044:6;29039:3;29036:15;29028:135;;;29110:10;;29098:23;;29061:12;;;;29141;;;;29028:135;;;29218:18;;;29212:25;29182:5;;-1:-1:-1;29212:25:486;;-1:-1:-1;;;29249:16:486;;;29246:36;;;29278:1;29275;29268:12;29246:36;;29301:78;29371:7;29360:8;29349:9;29345:24;29301:78;:::i;:::-;29291:88;;;28225:1160;;;;;:::o;29390:368::-;29487:6;29495;29503;29511;29564:3;29552:9;29543:7;29539:23;29535:33;29532:53;;;29581:1;29578;29571:12;29532:53;-1:-1:-1;;29604:16:486;;29660:2;29645:18;;29639:25;29704:2;29689:18;;29683:25;29748:2;29733:18;;;29727:25;29604:16;;29639:25;;-1:-1:-1;29727:25:486;;-1:-1:-1;29390:368:486;-1:-1:-1;29390:368:486:o;29763:125::-;29803:4;29831:1;29828;29825:8;29822:34;;;29836:18;;:::i;:::-;-1:-1:-1;29873:9:486;;29763:125::o;29893:168::-;29933:7;29999:1;29995;29991:6;29987:14;29984:1;29981:21;29976:1;29969:9;29962:17;29958:45;29955:71;;;30006:18;;:::i;:::-;-1:-1:-1;30046:9:486;;29893:168::o;30066:217::-;30106:1;30132;30122:132;;30176:10;30171:3;30167:20;30164:1;30157:31;30211:4;30208:1;30201:15;30239:4;30236:1;30229:15;30122:132;-1:-1:-1;30268:9:486;;30066:217::o;30587:132::-;30663:13;;30685:28;30663:13;30685:28;:::i;30724:306::-;30800:6;30808;30861:2;30849:9;30840:7;30836:23;30832:32;30829:52;;;30877:1;30874;30867:12;30829:52;30909:9;30903:16;30928:28;30950:5;30928:28;:::i;:::-;31020:2;31005:18;;;;30999:25;30975:5;;30999:25;;-1:-1:-1;;;30724:306:486:o;31035:128::-;31075:3;31106:1;31102:6;31099:1;31096:13;31093:39;;;31112:18;;:::i;:::-;-1:-1:-1;31148:9:486;;31035:128::o;31667:245::-;31734:6;31787:2;31775:9;31766:7;31762:23;31758:32;31755:52;;;31803:1;31800;31793:12;31755:52;31835:9;31829:16;31854:28;31876:5;31854:28;:::i;32109:273::-;32177:6;32230:2;32218:9;32209:7;32205:23;32201:32;32198:52;;;32246:1;32243;32236:12;32198:52;32278:9;32272:16;32328:4;32321:5;32317:16;32310:5;32307:27;32297:55;;32348:1;32345;32338:12;33256:896;33320:5;33373:3;33366:4;33358:6;33354:17;33350:27;33340:55;;33391:1;33388;33381:12;33340:55;33420:6;33414:13;33446:4;33470:60;33486:43;33526:2;33486:43;:::i;33470:60::-;33564:15;;;33650:1;33646:10;;;;33634:23;;33630:32;;;33595:12;;;;33674:15;;;33671:35;;;33702:1;33699;33692:12;33671:35;33738:2;33730:6;33726:15;33750:373;33766:6;33761:3;33758:15;33750:373;;;33845:3;33839:10;-1:-1:-1;;;;;33868:11:486;33865:35;33862:125;;;33941:1;33970:2;33966;33959:14;33862:125;34012:68;34076:3;34071:2;34057:11;34049:6;34045:24;34041:33;34012:68;:::i;:::-;34000:81;;-1:-1:-1;34101:12:486;;;;33783;;33750:373;;34157:1437;34320:6;34328;34336;34344;34352;34405:3;34393:9;34384:7;34380:23;34376:33;34373:53;;;34422:1;34419;34412:12;34373:53;34451:9;34445:16;34435:26;;34480:2;34522;34511:9;34507:18;34501:25;34491:35;;34570:2;34559:9;34555:18;34549:25;-1:-1:-1;;;;;34634:2:486;34626:6;34623:14;34620:34;;;34650:1;34647;34640:12;34620:34;34688:6;34677:9;34673:22;34663:32;;34733:7;34726:4;34722:2;34718:13;34714:27;34704:55;;34755:1;34752;34745:12;34704:55;34784:2;34778:9;34807:60;34823:43;34863:2;34823:43;:::i;34807:60::-;34901:15;;;34983:1;34979:10;;;;34971:19;;34967:28;;;34932:12;;;;35007:19;;;35004:39;;;35039:1;35036;35029:12;35004:39;35063:11;;;;35083:228;35099:6;35094:3;35091:15;35083:228;;;35172:3;35166:10;35189:49;35232:5;35189:49;:::i;:::-;35251:18;;35116:12;;;;35289;;;;35083:228;;;35381:2;35366:18;;35360:25;35330:5;;-1:-1:-1;35360:25:486;-1:-1:-1;;;35397:16:486;;;35394:36;;;35426:1;35423;35416:12;35394:36;;;35449:73;35514:7;35503:8;35492:9;35488:24;35449:73;:::i;:::-;35439:83;;;35541:47;35583:3;35572:9;35568:19;35541:47;:::i;:::-;35531:57;;34157:1437;;;;;;;;:::o;35599:337::-;35679:6;35732:2;35720:9;35711:7;35707:23;35703:32;35700:52;;;35748:1;35745;35738:12;35700:52;35781:9;35775:16;-1:-1:-1;;;;;35806:6:486;35803:30;35800:50;;;35846:1;35843;35836:12;35800:50;35869:61;35922:7;35913:6;35902:9;35898:22;35869:61;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "directory()": "c41c2f24", + "getBorrowCapsDataForAsset(address)": "a505596a", + "getBorrowCapsForAsset(address)": "1568683a", + "getHealthFactor(address,address)": "57c89a7d", + "getPoolAssetsByUser(address,address)": "0c5eb5a4", + "getPoolAssetsWithData(address)": "27e16c1f", + "getPoolSummary(address)": "59d2fea6", + "getPoolsByAccountWithData(address)": "51678684", + "getPoolsOIonicrWithData(address)": "ef88b53c", + "getPublicPoolsByVerificationWithData(bool)": "d64996e5", + "getPublicPoolsWithData()": "d0a164fb", + "getSupplyCapsDataForPool(address)": "a0795487", + "getSupplyCapsForPool(address)": "798b9780", + "getWhitelistedPoolsByAccount(address)": "c3530a63", + "getWhitelistedPoolsByAccountWithData(address)": "70733375", + "initialize(address,string,string,address[],string[],string[],string[],string[],string[])": "3a1eb656", + "name()": "06fdde03", + "symbol()": "95d89b41" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/PoolLensSecondary.json b/packages/sdk/deployments/mode/PoolLensSecondary.json new file mode 100644 index 0000000000..2dcf609cac --- /dev/null +++ b/packages/sdk/deployments/mode/PoolLensSecondary.json @@ -0,0 +1,1140 @@ +{ + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "inputs": [], + "name": "directory", + "outputs": [ + { + "internalType": "contract PoolDirectory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getFlywheelsToClaim", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + } + ], + "name": "getMaxBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + } + ], + "name": "getMaxRedeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "name": "getPoolOwnership", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "bool", + "name": "adminHasRights", + "type": "bool" + }, + { + "internalType": "bool", + "name": "ionicAdminHasRights", + "type": "bool" + } + ], + "internalType": "struct PoolLensSecondary.CTokenOwnership[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "name": "getRewardSpeedsByPool", + "outputs": [ + { + "internalType": "contract ICErc20[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "", + "type": "uint256[][]" + }, + { + "internalType": "uint256[][]", + "name": "", + "type": "uint256[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller[]", + "name": "comptrollers", + "type": "address[]" + } + ], + "name": "getRewardSpeedsByPools", + "outputs": [ + { + "internalType": "contract ICErc20[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "uint256[][][]", + "name": "", + "type": "uint256[][][]" + }, + { + "internalType": "uint256[][][]", + "name": "", + "type": "uint256[][][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "supplier", + "type": "address" + } + ], + "name": "getRewardsDistributorsBySupplier", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "internalType": "contract IRewardsDistributor[]", + "name": "distributors", + "type": "address[]" + } + ], + "name": "getUnclaimedRewardsByDistributors", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "contract ICErc20[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "uint256[2][][]", + "name": "", + "type": "uint256[2][][]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract PoolDirectory", + "name": "_directory", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xe65160dc350ceda3b61a032d312d4bfc1cd140fe6bcfb117da8b0df91647e5ff", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "transactionIndex": 1, + "gasUsed": "2626328", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x2fb1d8ca3c0f3c0711179cbb9b05dccabbedba6ec2354b8c99cc8046a0a043d3", + "transactionHash": "0xe65160dc350ceda3b61a032d312d4bfc1cd140fe6bcfb117da8b0df91647e5ff", + "logs": [], + "blockNumber": 2097471, + "cumulativeGasUsed": "2676829", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "directory", + "outputs": [ + { + "internalType": "contract PoolDirectory", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getFlywheelsToClaim", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getMaxBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getMaxRedeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPoolOwnership", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "struct PoolLensSecondary.CTokenOwnership[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "bool", + "name": "adminHasRights", + "type": "bool" + }, + { + "internalType": "bool", + "name": "ionicAdminHasRights", + "type": "bool" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRewardSpeedsByPool", + "outputs": [ + { + "internalType": "contract ICErc20[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "", + "type": "uint256[][]" + }, + { + "internalType": "uint256[][]", + "name": "", + "type": "uint256[][]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller[]", + "name": "comptrollers", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRewardSpeedsByPools", + "outputs": [ + { + "internalType": "contract ICErc20[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "uint256[][][]", + "name": "", + "type": "uint256[][][]" + }, + { + "internalType": "uint256[][][]", + "name": "", + "type": "uint256[][][]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "supplier", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRewardsDistributorsBySupplier", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "internalType": "contract IRewardsDistributor[]", + "name": "distributors", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getUnclaimedRewardsByDistributors", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "contract ICErc20[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "uint256[2][][]", + "name": "", + "type": "uint256[2][][]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract PoolDirectory", + "name": "_directory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getFlywheelsToClaim(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getMaxBorrow(address,address)": { + "params": { + "account": "The account to determine liquidity for.", + "cTokenModify": "The market to hypothetically borrow in." + }, + "returns": { + "_0": "Maximum borrow amount." + } + }, + "getMaxRedeem(address,address)": { + "params": { + "account": "The account to determine liquidity for.", + "cTokenModify": "The market to hypothetically redeem in." + }, + "returns": { + "_0": "Maximum redeem amount." + } + }, + "getPoolOwnership(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getRewardSpeedsByPool(address)": { + "params": { + "comptroller": "The Ionic pool Comptroller to check." + } + }, + "getRewardSpeedsByPools(address[])": { + "params": { + "comptrollers": "The Ionic pool Comptrollers to check." + } + }, + "getRewardsDistributorsBySupplier(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getUnclaimedRewardsByDistributors(address,address[])": { + "params": { + "distributors": "The `RewardsDistributor` contracts to check.", + "holder": "The address to check." + }, + "returns": { + "_0": "For each of `distributors`: total quantity of unclaimed rewards, array of cTokens, array of unaccrued (unclaimed) supply-side and borrow-side rewards per cToken, and quantity of funds available in the distributor." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "directory()": { + "notice": "`PoolDirectory` contract object." + }, + "getFlywheelsToClaim(address)": { + "notice": "The returned list of flywheels contains address(0) for flywheels for which the user has no rewards to claim" + }, + "getMaxBorrow(address,address)": { + "notice": "Determine the maximum borrow amount of a cToken." + }, + "getMaxRedeem(address,address)": { + "notice": "Determine the maximum redeem amount of a cToken." + }, + "getPoolOwnership(address)": { + "notice": "Returns the admin, admin rights, Ionic admin (constant), Ionic admin rights, and an array of cTokens with differing properties." + }, + "getRewardSpeedsByPool(address)": { + "notice": "Returns an array of all markets, an array of all `RewardsDistributor` contracts, an array of reward token addresses for each `RewardsDistributor`, an array of supply speeds for each distributor for each, and their borrow speeds." + }, + "getRewardSpeedsByPools(address[])": { + "notice": "For each `Comptroller`, returns an array of all markets, an array of all `RewardsDistributor` contracts, an array of reward token addresses for each `RewardsDistributor`, an array of supply speeds for each distributor for each, and their borrow speeds." + }, + "getRewardsDistributorsBySupplier(address)": { + "notice": "Returns arrays of indexes, `Comptroller` proxy contracts, and `RewardsDistributor` contracts for Ionic pools supplied to by `account`." + }, + "getUnclaimedRewardsByDistributors(address,address[])": { + "notice": "Returns all unclaimed rewards accrued by the `holder` on `distributors`." + }, + "initialize(address)": { + "notice": "Constructor to set the `PoolDirectory` contract object." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/PoolLensSecondary.sol": "PoolLensSecondary" + }, + "libraries": {} + }, + "sources": { + "contracts/PoolDirectory.sol": { + "keccak256": "0xd3d28cd044a0205a86f0c2d82021a36018ec4b0e95f72064c92bcad99f84f6c8", + "urls": [ + "bzz-raw://0c8ab6e3f922b9165cae038507497be2aed81df002ffe7921e0aa1f10f690531", + "dweb:/ipfs/QmNpfDhHaVPyxXZDY7Si2Bpidneh6Ckr8C4dGhRmA9pEEa" + ], + "license": "UNLICENSED" + }, + "contracts/PoolLensSecondary.sol": { + "keccak256": "0x8b0e06ebd7144d23ab214bf498b184e1a0d796ccc6a19dbc0689057ec23ffb15", + "urls": [ + "bzz-raw://a45254983f8c129fd7c41a12629b6aef4e187486f6a03e281cf1f60dd70378e5", + "dweb:/ipfs/QmXezfugsLvEcSFqxBpm4kA4hPCmUn8UMtyRZK3Q2qKbcG" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x84edc2b901bfc47df6728100716d0e23de7f095543fcc4b919ae8f5f049a2d08", + "urls": [ + "bzz-raw://dc2a5d197584bf0a6ebe3bbad4a6c97f448cef027d3fc397ce2453b1e87826fa", + "dweb:/ipfs/QmdL2TZVb8W1nM3VMe2eUoXgzUjSb8FBvxmbCPWPWndVTU" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50612e8b806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806397f35ff01161006657806397f35ff014610148578063998e2d4a1461016b578063c41c2f241461018d578063c4d66de8146101be578063d24eaf13146101d357600080fd5b80631ec18ec0146100a3578063338038fa146100c95780633fc5fab5146100ed578063641290421461011157806384b3403d14610124575b600080fd5b6100b66100b136600461233a565b6101e6565b6040519081526020015b60405180910390f35b6100dc6100d7366004612404565b6101fb565b6040516100c0959493929190612583565b6101006100fb36600461267c565b6107a4565b6040516100c0959493929190612859565b6100b661011f36600461233a565b610a26565b6101376101323660046128c6565b610a34565b6040516100c09594939291906128e3565b61015b6101563660046128c6565b610f51565b6040516100c09493929190612944565b61017e6101793660046128c6565b611659565b6040516100c0939291906129d4565b6000546101a6906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100c0565b6101d16101cc3660046128c6565b61188d565b005b61017e6101e13660046128c6565b611a2f565b60006101f483836001611e1e565b9392505050565b6060806060806060600086516001600160401b0381111561021e5761021e612373565b604051908082528060200260200182016040528015610247578160200160208202803683370190505b509050600087516001600160401b0381111561026557610265612373565b60405190808252806020026020018201604052801561028e578160200160208202803683370190505b509050600088516001600160401b038111156102ac576102ac612373565b6040519080825280602002602001820160405280156102df57816020015b60608152602001906001900390816102ca5790505b509050600089516001600160401b038111156102fd576102fd612373565b60405190808252806020026020018201604052801561033057816020015b606081526020019060019003908161031b5790505b50905060008a516001600160401b0381111561034e5761034e612373565b604051908082528060200260200182016040528015610377578160200160208202803683370190505b50905060005b8b518110156107905760008c828151811061039a5761039a612a3b565b60200260200101519050806001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104069190612a61565b87838151811061041857610418612a3b565b60200260200101906001600160a01b031690816001600160a01b031681525050806001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610476573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261049e9190810190612a7e565b8583815181106104b0576104b0612a3b565b60200260200101819052508482815181106104cd576104cd612a3b565b6020026020010151516001600160401b038111156104ed576104ed612373565b60405190808252806020026020018201604052801561052657816020015b610513612304565b81526020019060019003908161050b5790505b5084838151811061053957610539612a3b565b602002602001018190525060005b85838151811061055957610559612a3b565b60200260200101515181101561064f576105a68f8388868151811061058057610580612a3b565b6020026020010151848151811061059957610599612a3b565b6020026020010151611f0a565b8685815181106105b8576105b8612a3b565b602002602001015183815181106105d1576105d1612a3b565b60200260200101516000600281106105eb576105eb612a3b565b6020020187868151811061060157610601612a3b565b6020026020010151848151811061061a5761061a612a3b565b602002602001015160016002811061063457610634612a3b565b6020020191909152528061064781612b22565b915050610547565b5060405163331faf7160e21b81526001600160a01b038f8116600483015282169063cc7ebdc490602401602060405180830381865afa158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190612b3d565b8683815181106106cc576106cc612a3b565b6020026020010181815250508682815181106106ea576106ea612a3b565b60209081029190910101516040516370a0823160e01b81526001600160a01b038381166004830152909116906370a0823190602401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190612b3d565b83838151811061077257610772612a3b565b6020908102919091010152508061078881612b22565b91505061037d565b50939b929a50909850965090945092505050565b6060806060806060600086516001600160401b038111156107c7576107c7612373565b6040519080825280602002602001820160405280156107fa57816020015b60608152602001906001900390816107e55790505b509050600087516001600160401b0381111561081857610818612373565b60405190808252806020026020018201604052801561084b57816020015b60608152602001906001900390816108365790505b509050600088516001600160401b0381111561086957610869612373565b60405190808252806020026020018201604052801561089c57816020015b60608152602001906001900390816108875790505b509050600089516001600160401b038111156108ba576108ba612373565b6040519080825280602002602001820160405280156108ed57816020015b60608152602001906001900390816108d85790505b50905060008a516001600160401b0381111561090b5761090b612373565b60405190808252806020026020018201604052801561093e57816020015b60608152602001906001900390816109295790505b50905060005b8b51811015610a135761096f8c828151811061096257610962612a3b565b6020026020010151610a34565b8a868151811061098157610981612a3b565b602002602001018a878151811061099a5761099a612a3b565b602002602001018a88815181106109b3576109b3612a3b565b602002602001018a89815181106109cc576109cc612a3b565b602002602001018a8a815181106109e5576109e5612a3b565b6020026020010185905285905285905285905285905250505050508080610a0b90612b22565b915050610944565b50939a9299509097509550909350915050565b60006101f483836000611e1e565b60608060608060606000866001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa49190810190612a7e565b90506060876001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015610b0757506040513d6000823e601f3d908101601f19168201604052610b049190810190612b56565b60015b610b205750604080516000815260208101909152610b23565b90505b600081516001600160401b03811115610b3e57610b3e612373565b604051908082528060200260200182016040528015610b67578160200160208202803683370190505b509050600083516001600160401b03811115610b8557610b85612373565b604051908082528060200260200182016040528015610bb857816020015b6060815260200190600190039081610ba35790505b509050600084516001600160401b03811115610bd657610bd6612373565b604051908082528060200260200182016040528015610c0957816020015b6060815260200190600190039081610bf45790505b50905060005b8451811015610ccf57848181518110610c2a57610c2a612a3b565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c939190612a61565b848281518110610ca557610ca5612a3b565b6001600160a01b039092166020928302919091019091015280610cc781612b22565b915050610c0f565b5060005b8551811015610a13576000868281518110610cf057610cf0612a3b565b6020026020010151905085516001600160401b03811115610d1357610d13612373565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50848381518110610d4f57610d4f612a3b565b602002602001018190525085516001600160401b03811115610d7357610d73612373565b604051908082528060200260200182016040528015610d9c578160200160208202803683370190505b50838381518110610daf57610daf612a3b565b602002602001018190525060005b8651811015610f3c576000878281518110610dda57610dda612a3b565b6020908102919091010151604051636aa875b560e01b81526001600160a01b03858116600483015291925090821690636aa875b590602401602060405180830381865afa158015610e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e539190612b3d565b868581518110610e6557610e65612a3b565b60200260200101518381518110610e7e57610e7e612a3b565b60209081029190910101526040516303d290cf60e61b81526001600160a01b03848116600483015282169063f4a433c090602401602060405180830381865afa158015610ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef39190612b3d565b858581518110610f0557610f05612a3b565b60200260200101518381518110610f1e57610f1e612a3b565b60209081029190910101525080610f3481612b22565b915050610dbd565b50508080610f4990612b22565b915050610cd3565b600080600060606000856001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190612a61565b90506000866001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110229190612bf4565b90506000876001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110889190612bf4565b90506000886001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110f29190810190612a7e565b90506000805b825181101561133357600083828151811061111557611115612a3b565b6020908102919091010151604051638e8f294b60e01b81526001600160a01b0380831660048301529192506000918e1690638e8f294b906024016040805180830381865afa15801561116b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118f9190612c0f565b5090508061119e575050611321565b6000826001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111fa575060408051601f3d908101601f191682019092526111f791810190612a61565b60015b61120657505050611321565b90506000836001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190612bf4565b90506000846001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d29190612bf4565b90508a6001600160a01b0316836001600160a01b03161415806112f9575089151582151514155b80611308575088151581151514155b1561131b578661131781612b22565b9750505b50505050505b8061132b81612b22565b9150506110f8565b506000816001600160401b0381111561134e5761134e612373565b6040519080825280602002602001820160405280156113a057816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161136c5790505b5090506000805b84518110156116445760008582815181106113c4576113c4612a3b565b6020026020010151905060008e6001600160a01b0316638e8f294b836040518263ffffffff1660e01b815260040161140b91906001600160a01b0391909116815260200190565b6040805180830381865afa158015611427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144b9190612c0f565b5090508061145a575050611632565b6000826001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114b6575060408051601f3d908101601f191682019092526114b391810190612a61565b60015b6114c257505050611632565b90506000836001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115289190612bf4565b90506000846001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158e9190612bf4565b90508c6001600160a01b0316836001600160a01b03161415806115b557508b151582151514155b806115c457508a151581151514155b1561162c576040518060800160405280866001600160a01b03168152602001846001600160a01b03168152602001831515815260200182151581525088888151811061161257611612612a3b565b6020026020010181905250868061162890612b22565b9750505b50505050505b8061163c81612b22565b9150506113a7565b50959b949a5092985091965091945050505050565b6060806060600080600060029054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116dc9190810190612dac565b91509150600081516001600160401b038111156116fb576116fb612373565b604051908082528060200260200182016040528015611724578160200160208202803683370190505b509050600082516001600160401b0381111561174257611742612373565b60405190808252806020026020018201604052801561177557816020015b60608152602001906001900390816117605790505b50905060005b835181101561187d57600084828151811061179857611798612a3b565b6020026020010151604001519050806001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561180557506040513d6000823e601f3d908101601f191682016040526118029190810190612b56565b60015b61180e5761186a565b8185848151811061182157611821612a3b565b60200260200101906001600160a01b031690816001600160a01b03168152505061184b8b826121b8565b84848151811061185d5761185d612a3b565b6020026020010181905250505b508061187581612b22565b91505061177b565b5092979096509194509092505050565b600054610100900460ff16158080156118ad5750600054600160ff909116105b806118c75750303b1580156118c7575060005460ff166001145b61192f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015611952576000805461ff0019166101001790555b6001600160a01b0382166119c35760405162461bcd60e51b815260206004820152603260248201527f506f6f6c4469726563746f727920696e7374616e63652063616e6e6f74206265604482015271103a3432903d32b9379030b2323932b9b99760711b6064820152608401611926565b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611a2b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b606080606060008060029054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015611a88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab09190810190612dac565b9150506000805b8251811015611b8257828181518110611ad257611ad2612a3b565b6020026020010151604001516001600160a01b03166316dc15fe886040518263ffffffff1660e01b8152600401611b1891906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015611b51575060408051601f3d908101601f19168201909252611b4e91810190612bf4565b60015b611b5a57611b70565b8015611b6e5782611b6a81612b22565b9350505b505b80611b7a81612b22565b915050611ab7565b506000816001600160401b03811115611b9d57611b9d612373565b604051908082528060200260200182016040528015611bc6578160200160208202803683370190505b5090506000826001600160401b03811115611be357611be3612373565b604051908082528060200260200182016040528015611c0c578160200160208202803683370190505b5090506000836001600160401b03811115611c2957611c29612373565b604051908082528060200260200182016040528015611c5c57816020015b6060815260200190600190039081611c475790505b5090506000805b8651811015611e0e576000878281518110611c8057611c80612a3b565b6020026020010151604001519050806001600160a01b03166316dc15fe8d6040518263ffffffff1660e01b8152600401611cc991906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015611d02575060408051601f3d908101601f19168201909252611cff91810190612bf4565b60015b611d0b57611dfb565b8015611df95782878581518110611d2457611d24612a3b565b60200260200101818152505081868581518110611d4357611d43612a3b565b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611dc257506040513d6000823e601f3d908101601f19168201604052611dbf9190810190612b56565b60015b611dcb57611deb565b80868681518110611dde57611dde612a3b565b6020026020010181905250505b83611df581612b22565b9450505b505b5080611e0681612b22565b915050611c63565b5092999198509650945050505050565b600080836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e839190612a61565b604051630cbb414760e11b81526001600160a01b0387811660048301528681166024830152851515604483015291925090821690631976828e90606401602060405180830381865afa158015611edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f019190612b3d565b95945050505050565b60405163331faf7160e21b81526001600160a01b038481166004830152600091829182919086169063cc7ebdc490602401602060405180830381865afa158015611f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190612b3d565b60405162e48b0f60e51b81526001600160a01b038681166004830152888116602483015291925090861690631c9161e090604401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b505060405163331faf7160e21b81526001600160a01b0389811660048301526000935084925088169063cc7ebdc490602401602060405180830381865afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120519190612b3d565b61205b9190612e67565b60405163331faf7160e21b81526001600160a01b0389811660048301529192509087169063cc7ebdc490602401602060405180830381865afa1580156120a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c99190612b3d565b604051631cdc2c5d60e31b81526001600160a01b03878116600483015289811660248301529193509087169063e6e162e890604401600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505060405163331faf7160e21b81526001600160a01b038a811660048301526000935085925089169063cc7ebdc490602401602060405180830381865afa15801561217b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219f9190612b3d565b6121a99190612e67565b91989197509095505050505050565b6060600082516001600160401b038111156121d5576121d5612373565b6040519080825280602002602001820160405280156121fe578160200160208202803683370190505b50905060005b83518110156122fc57600084828151811061222157612221612a3b565b602090810291909101015160405163331faf7160e21b81526001600160a01b0388811660048301529091169063cc7ebdc490602401602060405180830381865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122979190612b3d565b11156122ea578381815181106122af576122af612a3b565b60200260200101518282815181106122c9576122c9612a3b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b806122f481612b22565b915050612204565b509392505050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461233757600080fd5b50565b6000806040838503121561234d57600080fd5b823561235881612322565b9150602083013561236881612322565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156123ab576123ab612373565b60405290565b604051601f8201601f191681016001600160401b03811182821017156123d9576123d9612373565b604052919050565b60006001600160401b038211156123fa576123fa612373565b5060051b60200190565b6000806040838503121561241757600080fd5b823561242281612322565b91506020838101356001600160401b0381111561243e57600080fd5b8401601f8101861361244f57600080fd5b803561246261245d826123e1565b6123b1565b81815260059190911b8201830190838101908883111561248157600080fd5b928401925b828410156124a857833561249981612322565b82529284019290840190612486565b80955050505050509250929050565b600081518084526020808501945080840160005b838110156124f05781516001600160a01b0316875295820195908201906001016124cb565b509495945050505050565b600081518084526020808501945080840160005b838110156124f05781518752958201959082019060010161250f565b600082825180855260208086019550808260051b84010181860160005b8481101561257657601f198684030189526125648383516124b7565b98840198925090830190600101612548565b5090979650505050505050565b60a08152600061259660a08301886124b7565b6020838203818501526125a982896124fb565b91506040848303818601526125be838961252b565b925084830360608601528287518085528385019150838160051b860101848a0160005b8381101561265757878303601f1901855281518051808552908801908885019060005b818110156126425783518360005b600281101561262f5782518252918d0191908d0190600101612612565b505050928a019291890191600101612604565b505095880195935050908601906001016125e1565b5050878103608089015261266b818a6124fb565b9d9c50505050505050505050505050565b6000602080838503121561268f57600080fd5b82356001600160401b038111156126a557600080fd5b8301601f810185136126b657600080fd5b80356126c461245d826123e1565b81815260059190911b820183019083810190878311156126e357600080fd5b928401925b8284101561270a5783356126fb81612322565b825292840192908401906126e8565b979650505050505050565b600082825180855260208086019550808260051b8401018186016000805b8581101561278f57868403601f19018a52825180518086529086019086860190845b8181101561277a5783516001600160a01b031683529288019291880191600101612755565b50509a86019a94505091840191600101612733565b509198975050505050505050565b600082825180855260208086019550808260051b8401018186016000805b8581101561278f57868403601f19018a52825180518086529086019086860190845b818110156127f9578351835292880192918801916001016127dd565b50509a86019a945050918401916001016127bb565b600082825180855260208086019550808260051b84010181860160005b8481101561257657601f1986840301895261284783835161279d565b9884019892509083019060010161282b565b60a08152600061286c60a083018861252b565b828103602084015261287e8188612715565b905082810360408401526128928187612715565b905082810360608401526128a6818661280e565b905082810360808401526128ba818561280e565b98975050505050505050565b6000602082840312156128d857600080fd5b81356101f481612322565b60a0815260006128f660a08301886124b7565b828103602084015261290881886124b7565b9050828103604084015261291c81876124b7565b90508281036060840152612930818661279d565b905082810360808401526128ba818561279d565b6000608080830160018060a01b0380891685526020881515818701526040881515818801526060858189015284895180875260a08a019150848b01965060005b818110156129c157875180518816845286810151881687850152858101511515868501528401511515848401529685019691880191600101612984565b50909d9c50505050505050505050505050565b6060815260006129e760608301866124fb565b82810360208481019190915285518083528682019282019060005b81811015612a275784516001600160a01b031683529383019391830191600101612a02565b505084810360408601526128ba8187612715565b634e487b7160e01b600052603260045260246000fd5b8051612a5c81612322565b919050565b600060208284031215612a7357600080fd5b81516101f481612322565b60006020808385031215612a9157600080fd5b82516001600160401b03811115612aa757600080fd5b8301601f81018513612ab857600080fd5b8051612ac661245d826123e1565b81815260059190911b82018301908381019087831115612ae557600080fd5b928401925b8284101561270a578351612afd81612322565b82529284019290840190612aea565b634e487b7160e01b600052601160045260246000fd5b6000600019821415612b3657612b36612b0c565b5060010190565b600060208284031215612b4f57600080fd5b5051919050565b60006020808385031215612b6957600080fd5b82516001600160401b03811115612b7f57600080fd5b8301601f81018513612b9057600080fd5b8051612b9e61245d826123e1565b81815260059190911b82018301908381019087831115612bbd57600080fd5b928401925b8284101561270a578351612bd581612322565b82529284019290840190612bc2565b80518015158114612a5c57600080fd5b600060208284031215612c0657600080fd5b6101f482612be4565b60008060408385031215612c2257600080fd5b612c2b83612be4565b9150602083015190509250929050565b6000601f8381840112612c4d57600080fd5b82516020612c5d61245d836123e1565b82815260059290921b85018101918181019087841115612c7c57600080fd5b8287015b84811015612da05780516001600160401b0380821115612ca05760008081fd5b9089019060a0601f19838d038101821315612cbb5760008081fd5b612cc3612389565b8885015184811115612cd55760008081fd5b8501603f81018f13612ce75760008081fd5b8981015185811115612cfb57612cfb612373565b612d0a8b858f840116016123b1565b9550808652604093508f84828401011115612d255760008081fd5b60005b81811015612d43578281018501518782018d01528b01612d28565b81811115612d545760008c83890101525b505050838152612d65828601612a51565b8982015260609350612d78848601612a51565b9181019190915260808481015193820193909352920151908201528352918301918301612c80565b50979650505050505050565b60008060408385031215612dbf57600080fd5b82516001600160401b0380821115612dd657600080fd5b818501915085601f830112612dea57600080fd5b81516020612dfa61245d836123e1565b82815260059290921b84018101918181019089841115612e1957600080fd5b948201945b83861015612e3757855182529482019490820190612e1e565b91880151919650909350505080821115612e5057600080fd5b50612e5d85828601612c3b565b9150509250929050565b600082821015612e7957612e79612b0c565b50039056fea164736f6c634300080a000a", + "sourceMap": "1256:13943:4:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806397f35ff01161006657806397f35ff014610148578063998e2d4a1461016b578063c41c2f241461018d578063c4d66de8146101be578063d24eaf13146101d357600080fd5b80631ec18ec0146100a3578063338038fa146100c95780633fc5fab5146100ed578063641290421461011157806384b3403d14610124575b600080fd5b6100b66100b136600461233a565b6101e6565b6040519081526020015b60405180910390f35b6100dc6100d7366004612404565b6101fb565b6040516100c0959493929190612583565b6101006100fb36600461267c565b6107a4565b6040516100c0959493929190612859565b6100b661011f36600461233a565b610a26565b6101376101323660046128c6565b610a34565b6040516100c09594939291906128e3565b61015b6101563660046128c6565b610f51565b6040516100c09493929190612944565b61017e6101793660046128c6565b611659565b6040516100c0939291906129d4565b6000546101a6906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100c0565b6101d16101cc3660046128c6565b61188d565b005b61017e6101e13660046128c6565b611a2f565b60006101f483836001611e1e565b9392505050565b6060806060806060600086516001600160401b0381111561021e5761021e612373565b604051908082528060200260200182016040528015610247578160200160208202803683370190505b509050600087516001600160401b0381111561026557610265612373565b60405190808252806020026020018201604052801561028e578160200160208202803683370190505b509050600088516001600160401b038111156102ac576102ac612373565b6040519080825280602002602001820160405280156102df57816020015b60608152602001906001900390816102ca5790505b509050600089516001600160401b038111156102fd576102fd612373565b60405190808252806020026020018201604052801561033057816020015b606081526020019060019003908161031b5790505b50905060008a516001600160401b0381111561034e5761034e612373565b604051908082528060200260200182016040528015610377578160200160208202803683370190505b50905060005b8b518110156107905760008c828151811061039a5761039a612a3b565b60200260200101519050806001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104069190612a61565b87838151811061041857610418612a3b565b60200260200101906001600160a01b031690816001600160a01b031681525050806001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610476573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261049e9190810190612a7e565b8583815181106104b0576104b0612a3b565b60200260200101819052508482815181106104cd576104cd612a3b565b6020026020010151516001600160401b038111156104ed576104ed612373565b60405190808252806020026020018201604052801561052657816020015b610513612304565b81526020019060019003908161050b5790505b5084838151811061053957610539612a3b565b602002602001018190525060005b85838151811061055957610559612a3b565b60200260200101515181101561064f576105a68f8388868151811061058057610580612a3b565b6020026020010151848151811061059957610599612a3b565b6020026020010151611f0a565b8685815181106105b8576105b8612a3b565b602002602001015183815181106105d1576105d1612a3b565b60200260200101516000600281106105eb576105eb612a3b565b6020020187868151811061060157610601612a3b565b6020026020010151848151811061061a5761061a612a3b565b602002602001015160016002811061063457610634612a3b565b6020020191909152528061064781612b22565b915050610547565b5060405163331faf7160e21b81526001600160a01b038f8116600483015282169063cc7ebdc490602401602060405180830381865afa158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190612b3d565b8683815181106106cc576106cc612a3b565b6020026020010181815250508682815181106106ea576106ea612a3b565b60209081029190910101516040516370a0823160e01b81526001600160a01b038381166004830152909116906370a0823190602401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190612b3d565b83838151811061077257610772612a3b565b6020908102919091010152508061078881612b22565b91505061037d565b50939b929a50909850965090945092505050565b6060806060806060600086516001600160401b038111156107c7576107c7612373565b6040519080825280602002602001820160405280156107fa57816020015b60608152602001906001900390816107e55790505b509050600087516001600160401b0381111561081857610818612373565b60405190808252806020026020018201604052801561084b57816020015b60608152602001906001900390816108365790505b509050600088516001600160401b0381111561086957610869612373565b60405190808252806020026020018201604052801561089c57816020015b60608152602001906001900390816108875790505b509050600089516001600160401b038111156108ba576108ba612373565b6040519080825280602002602001820160405280156108ed57816020015b60608152602001906001900390816108d85790505b50905060008a516001600160401b0381111561090b5761090b612373565b60405190808252806020026020018201604052801561093e57816020015b60608152602001906001900390816109295790505b50905060005b8b51811015610a135761096f8c828151811061096257610962612a3b565b6020026020010151610a34565b8a868151811061098157610981612a3b565b602002602001018a878151811061099a5761099a612a3b565b602002602001018a88815181106109b3576109b3612a3b565b602002602001018a89815181106109cc576109cc612a3b565b602002602001018a8a815181106109e5576109e5612a3b565b6020026020010185905285905285905285905285905250505050508080610a0b90612b22565b915050610944565b50939a9299509097509550909350915050565b60006101f483836000611e1e565b60608060608060606000866001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa49190810190612a7e565b90506060876001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015610b0757506040513d6000823e601f3d908101601f19168201604052610b049190810190612b56565b60015b610b205750604080516000815260208101909152610b23565b90505b600081516001600160401b03811115610b3e57610b3e612373565b604051908082528060200260200182016040528015610b67578160200160208202803683370190505b509050600083516001600160401b03811115610b8557610b85612373565b604051908082528060200260200182016040528015610bb857816020015b6060815260200190600190039081610ba35790505b509050600084516001600160401b03811115610bd657610bd6612373565b604051908082528060200260200182016040528015610c0957816020015b6060815260200190600190039081610bf45790505b50905060005b8451811015610ccf57848181518110610c2a57610c2a612a3b565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c939190612a61565b848281518110610ca557610ca5612a3b565b6001600160a01b039092166020928302919091019091015280610cc781612b22565b915050610c0f565b5060005b8551811015610a13576000868281518110610cf057610cf0612a3b565b6020026020010151905085516001600160401b03811115610d1357610d13612373565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50848381518110610d4f57610d4f612a3b565b602002602001018190525085516001600160401b03811115610d7357610d73612373565b604051908082528060200260200182016040528015610d9c578160200160208202803683370190505b50838381518110610daf57610daf612a3b565b602002602001018190525060005b8651811015610f3c576000878281518110610dda57610dda612a3b565b6020908102919091010151604051636aa875b560e01b81526001600160a01b03858116600483015291925090821690636aa875b590602401602060405180830381865afa158015610e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e539190612b3d565b868581518110610e6557610e65612a3b565b60200260200101518381518110610e7e57610e7e612a3b565b60209081029190910101526040516303d290cf60e61b81526001600160a01b03848116600483015282169063f4a433c090602401602060405180830381865afa158015610ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef39190612b3d565b858581518110610f0557610f05612a3b565b60200260200101518381518110610f1e57610f1e612a3b565b60209081029190910101525080610f3481612b22565b915050610dbd565b50508080610f4990612b22565b915050610cd3565b600080600060606000856001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190612a61565b90506000866001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110229190612bf4565b90506000876001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110889190612bf4565b90506000886001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110f29190810190612a7e565b90506000805b825181101561133357600083828151811061111557611115612a3b565b6020908102919091010151604051638e8f294b60e01b81526001600160a01b0380831660048301529192506000918e1690638e8f294b906024016040805180830381865afa15801561116b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118f9190612c0f565b5090508061119e575050611321565b6000826001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111fa575060408051601f3d908101601f191682019092526111f791810190612a61565b60015b61120657505050611321565b90506000836001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190612bf4565b90506000846001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d29190612bf4565b90508a6001600160a01b0316836001600160a01b03161415806112f9575089151582151514155b80611308575088151581151514155b1561131b578661131781612b22565b9750505b50505050505b8061132b81612b22565b9150506110f8565b506000816001600160401b0381111561134e5761134e612373565b6040519080825280602002602001820160405280156113a057816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161136c5790505b5090506000805b84518110156116445760008582815181106113c4576113c4612a3b565b6020026020010151905060008e6001600160a01b0316638e8f294b836040518263ffffffff1660e01b815260040161140b91906001600160a01b0391909116815260200190565b6040805180830381865afa158015611427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144b9190612c0f565b5090508061145a575050611632565b6000826001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114b6575060408051601f3d908101601f191682019092526114b391810190612a61565b60015b6114c257505050611632565b90506000836001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115289190612bf4565b90506000846001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158e9190612bf4565b90508c6001600160a01b0316836001600160a01b03161415806115b557508b151582151514155b806115c457508a151581151514155b1561162c576040518060800160405280866001600160a01b03168152602001846001600160a01b03168152602001831515815260200182151581525088888151811061161257611612612a3b565b6020026020010181905250868061162890612b22565b9750505b50505050505b8061163c81612b22565b9150506113a7565b50959b949a5092985091965091945050505050565b6060806060600080600060029054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116dc9190810190612dac565b91509150600081516001600160401b038111156116fb576116fb612373565b604051908082528060200260200182016040528015611724578160200160208202803683370190505b509050600082516001600160401b0381111561174257611742612373565b60405190808252806020026020018201604052801561177557816020015b60608152602001906001900390816117605790505b50905060005b835181101561187d57600084828151811061179857611798612a3b565b6020026020010151604001519050806001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561180557506040513d6000823e601f3d908101601f191682016040526118029190810190612b56565b60015b61180e5761186a565b8185848151811061182157611821612a3b565b60200260200101906001600160a01b031690816001600160a01b03168152505061184b8b826121b8565b84848151811061185d5761185d612a3b565b6020026020010181905250505b508061187581612b22565b91505061177b565b5092979096509194509092505050565b600054610100900460ff16158080156118ad5750600054600160ff909116105b806118c75750303b1580156118c7575060005460ff166001145b61192f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015611952576000805461ff0019166101001790555b6001600160a01b0382166119c35760405162461bcd60e51b815260206004820152603260248201527f506f6f6c4469726563746f727920696e7374616e63652063616e6e6f74206265604482015271103a3432903d32b9379030b2323932b9b99760711b6064820152608401611926565b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611a2b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b606080606060008060029054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015611a88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab09190810190612dac565b9150506000805b8251811015611b8257828181518110611ad257611ad2612a3b565b6020026020010151604001516001600160a01b03166316dc15fe886040518263ffffffff1660e01b8152600401611b1891906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015611b51575060408051601f3d908101601f19168201909252611b4e91810190612bf4565b60015b611b5a57611b70565b8015611b6e5782611b6a81612b22565b9350505b505b80611b7a81612b22565b915050611ab7565b506000816001600160401b03811115611b9d57611b9d612373565b604051908082528060200260200182016040528015611bc6578160200160208202803683370190505b5090506000826001600160401b03811115611be357611be3612373565b604051908082528060200260200182016040528015611c0c578160200160208202803683370190505b5090506000836001600160401b03811115611c2957611c29612373565b604051908082528060200260200182016040528015611c5c57816020015b6060815260200190600190039081611c475790505b5090506000805b8651811015611e0e576000878281518110611c8057611c80612a3b565b6020026020010151604001519050806001600160a01b03166316dc15fe8d6040518263ffffffff1660e01b8152600401611cc991906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015611d02575060408051601f3d908101601f19168201909252611cff91810190612bf4565b60015b611d0b57611dfb565b8015611df95782878581518110611d2457611d24612a3b565b60200260200101818152505081868581518110611d4357611d43612a3b565b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611dc257506040513d6000823e601f3d908101601f19168201604052611dbf9190810190612b56565b60015b611dcb57611deb565b80868681518110611dde57611dde612a3b565b6020026020010181905250505b83611df581612b22565b9450505b505b5080611e0681612b22565b915050611c63565b5092999198509650945050505050565b600080836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e839190612a61565b604051630cbb414760e11b81526001600160a01b0387811660048301528681166024830152851515604483015291925090821690631976828e90606401602060405180830381865afa158015611edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f019190612b3d565b95945050505050565b60405163331faf7160e21b81526001600160a01b038481166004830152600091829182919086169063cc7ebdc490602401602060405180830381865afa158015611f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190612b3d565b60405162e48b0f60e51b81526001600160a01b038681166004830152888116602483015291925090861690631c9161e090604401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b505060405163331faf7160e21b81526001600160a01b0389811660048301526000935084925088169063cc7ebdc490602401602060405180830381865afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120519190612b3d565b61205b9190612e67565b60405163331faf7160e21b81526001600160a01b0389811660048301529192509087169063cc7ebdc490602401602060405180830381865afa1580156120a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c99190612b3d565b604051631cdc2c5d60e31b81526001600160a01b03878116600483015289811660248301529193509087169063e6e162e890604401600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505060405163331faf7160e21b81526001600160a01b038a811660048301526000935085925089169063cc7ebdc490602401602060405180830381865afa15801561217b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219f9190612b3d565b6121a99190612e67565b91989197509095505050505050565b6060600082516001600160401b038111156121d5576121d5612373565b6040519080825280602002602001820160405280156121fe578160200160208202803683370190505b50905060005b83518110156122fc57600084828151811061222157612221612a3b565b602090810291909101015160405163331faf7160e21b81526001600160a01b0388811660048301529091169063cc7ebdc490602401602060405180830381865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122979190612b3d565b11156122ea578381815181106122af576122af612a3b565b60200260200101518282815181106122c9576122c9612a3b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b806122f481612b22565b915050612204565b509392505050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461233757600080fd5b50565b6000806040838503121561234d57600080fd5b823561235881612322565b9150602083013561236881612322565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156123ab576123ab612373565b60405290565b604051601f8201601f191681016001600160401b03811182821017156123d9576123d9612373565b604052919050565b60006001600160401b038211156123fa576123fa612373565b5060051b60200190565b6000806040838503121561241757600080fd5b823561242281612322565b91506020838101356001600160401b0381111561243e57600080fd5b8401601f8101861361244f57600080fd5b803561246261245d826123e1565b6123b1565b81815260059190911b8201830190838101908883111561248157600080fd5b928401925b828410156124a857833561249981612322565b82529284019290840190612486565b80955050505050509250929050565b600081518084526020808501945080840160005b838110156124f05781516001600160a01b0316875295820195908201906001016124cb565b509495945050505050565b600081518084526020808501945080840160005b838110156124f05781518752958201959082019060010161250f565b600082825180855260208086019550808260051b84010181860160005b8481101561257657601f198684030189526125648383516124b7565b98840198925090830190600101612548565b5090979650505050505050565b60a08152600061259660a08301886124b7565b6020838203818501526125a982896124fb565b91506040848303818601526125be838961252b565b925084830360608601528287518085528385019150838160051b860101848a0160005b8381101561265757878303601f1901855281518051808552908801908885019060005b818110156126425783518360005b600281101561262f5782518252918d0191908d0190600101612612565b505050928a019291890191600101612604565b505095880195935050908601906001016125e1565b5050878103608089015261266b818a6124fb565b9d9c50505050505050505050505050565b6000602080838503121561268f57600080fd5b82356001600160401b038111156126a557600080fd5b8301601f810185136126b657600080fd5b80356126c461245d826123e1565b81815260059190911b820183019083810190878311156126e357600080fd5b928401925b8284101561270a5783356126fb81612322565b825292840192908401906126e8565b979650505050505050565b600082825180855260208086019550808260051b8401018186016000805b8581101561278f57868403601f19018a52825180518086529086019086860190845b8181101561277a5783516001600160a01b031683529288019291880191600101612755565b50509a86019a94505091840191600101612733565b509198975050505050505050565b600082825180855260208086019550808260051b8401018186016000805b8581101561278f57868403601f19018a52825180518086529086019086860190845b818110156127f9578351835292880192918801916001016127dd565b50509a86019a945050918401916001016127bb565b600082825180855260208086019550808260051b84010181860160005b8481101561257657601f1986840301895261284783835161279d565b9884019892509083019060010161282b565b60a08152600061286c60a083018861252b565b828103602084015261287e8188612715565b905082810360408401526128928187612715565b905082810360608401526128a6818661280e565b905082810360808401526128ba818561280e565b98975050505050505050565b6000602082840312156128d857600080fd5b81356101f481612322565b60a0815260006128f660a08301886124b7565b828103602084015261290881886124b7565b9050828103604084015261291c81876124b7565b90508281036060840152612930818661279d565b905082810360808401526128ba818561279d565b6000608080830160018060a01b0380891685526020881515818701526040881515818801526060858189015284895180875260a08a019150848b01965060005b818110156129c157875180518816845286810151881687850152858101511515868501528401511515848401529685019691880191600101612984565b50909d9c50505050505050505050505050565b6060815260006129e760608301866124fb565b82810360208481019190915285518083528682019282019060005b81811015612a275784516001600160a01b031683529383019391830191600101612a02565b505084810360408601526128ba8187612715565b634e487b7160e01b600052603260045260246000fd5b8051612a5c81612322565b919050565b600060208284031215612a7357600080fd5b81516101f481612322565b60006020808385031215612a9157600080fd5b82516001600160401b03811115612aa757600080fd5b8301601f81018513612ab857600080fd5b8051612ac661245d826123e1565b81815260059190911b82018301908381019087831115612ae557600080fd5b928401925b8284101561270a578351612afd81612322565b82529284019290840190612aea565b634e487b7160e01b600052601160045260246000fd5b6000600019821415612b3657612b36612b0c565b5060010190565b600060208284031215612b4f57600080fd5b5051919050565b60006020808385031215612b6957600080fd5b82516001600160401b03811115612b7f57600080fd5b8301601f81018513612b9057600080fd5b8051612b9e61245d826123e1565b81815260059190911b82018301908381019087831115612bbd57600080fd5b928401925b8284101561270a578351612bd581612322565b82529284019290840190612bc2565b80518015158114612a5c57600080fd5b600060208284031215612c0657600080fd5b6101f482612be4565b60008060408385031215612c2257600080fd5b612c2b83612be4565b9150602083015190509250929050565b6000601f8381840112612c4d57600080fd5b82516020612c5d61245d836123e1565b82815260059290921b85018101918181019087841115612c7c57600080fd5b8287015b84811015612da05780516001600160401b0380821115612ca05760008081fd5b9089019060a0601f19838d038101821315612cbb5760008081fd5b612cc3612389565b8885015184811115612cd55760008081fd5b8501603f81018f13612ce75760008081fd5b8981015185811115612cfb57612cfb612373565b612d0a8b858f840116016123b1565b9550808652604093508f84828401011115612d255760008081fd5b60005b81811015612d43578281018501518782018d01528b01612d28565b81811115612d545760008c83890101525b505050838152612d65828601612a51565b8982015260609350612d78848601612a51565b9181019190915260808481015193820193909352920151908201528352918301918301612c80565b50979650505050505050565b60008060408385031215612dbf57600080fd5b82516001600160401b0380821115612dd657600080fd5b818501915085601f830112612dea57600080fd5b81516020612dfa61245d836123e1565b82815260059290921b84018101918181019089841115612e1957600080fd5b948201945b83861015612e3757855182529482019490820190612e1e565b91880151919650909350505080821115612e5057600080fd5b50612e5d85828601612c3b565b9150509250929050565b600082821015612e7957612e79612b0c565b50039056fea164736f6c634300080a000a", + "sourceMap": "1256:13943:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5239:155;;;;;;:::i;:::-;;:::i;:::-;;;706:25:486;;;694:2;679:18;5239:155:4;;;;;;;;10640:1421;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;8199:923::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;4844:156::-;;;;;;:::i;:::-;;:::i;6282:1572::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;2220:2385::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;13926:833::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;1647:30::-;;;;;;;;-1:-1:-1;;;;;1647:30:4;;;;;;-1:-1:-1;;;;;17011:32:486;;;16993:51;;16981:2;16966:18;1647:30:4;16825:225:486;1385:200:4;;;;;;:::i;:::-;;:::i;:::-;;12321:1372;;;;;;:::i;:::-;;:::i;5239:155::-;5318:7;5340:49;5361:7;5370:12;5384:4;5340:20;:49::i;:::-;5333:56;5239:155;-1:-1:-1;;;5239:155:4:o;10640:1421::-;10775:16;10799;10823:18;10849:21;10878:16;10909:29;10955:12;:19;-1:-1:-1;;;;;10941:34:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10941:34:4;;10909:66;;10981:35;11033:12;:19;-1:-1:-1;;;;;11019:34:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11019:34:4;;10981:72;;11059:29;11107:12;:19;-1:-1:-1;;;;;11091:36:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11059:68;;11133:38;11193:12;:19;-1:-1:-1;;;;;11174:39:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11133:80;;11219:33;11269:12;:19;-1:-1:-1;;;;;11255:34:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:34:4;;11219:70;;11301:9;11296:665;11320:12;:19;11316:1;:23;11296:665;;;11354:31;11388:12;11401:1;11388:15;;;;;;;;:::i;:::-;;;;;;;11354:49;;11429:11;-1:-1:-1;;;;;11429:23:4;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11411:12;11424:1;11411:15;;;;;;;;:::i;:::-;;;;;;:43;-1:-1:-1;;;;;11411:43:4;;;-1:-1:-1;;;;;11411:43:4;;;;;11478:11;-1:-1:-1;;;;;11478:25:4;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11478:27:4;;;;;;;;;;;;:::i;:::-;11462:10;11473:1;11462:13;;;;;;;;:::i;:::-;;;;;;:43;;;;11552:10;11563:1;11552:13;;;;;;;;:::i;:::-;;;;;;;:20;-1:-1:-1;;;;;11535:38:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11513:16;11530:1;11513:19;;;;;;;;:::i;:::-;;;;;;:60;;;;11586:9;11581:214;11605:10;11616:1;11605:13;;;;;;;;:::i;:::-;;;;;;;:20;11601:1;:24;11581:214;;;11697:98;11728:6;11746:11;11769:10;11780:1;11769:13;;;;;;;;:::i;:::-;;;;;;;11783:1;11769:16;;;;;;;;:::i;:::-;;;;;;;11697:19;:98::i;:::-;11641:16;11658:1;11641:19;;;;;;;;:::i;:::-;;;;;;;11661:1;11641:22;;;;;;;;:::i;:::-;;;;;;;11664:1;11641:25;;;;;;;:::i;:::-;;;;11668:16;11685:1;11668:19;;;;;;;;:::i;:::-;;;;;;;11688:1;11668:22;;;;;;;;:::i;:::-;;;;;;;11691:1;11668:25;;;;;;;:::i;:::-;;;;11640:155;;;;;11627:3;;;;:::i;:::-;;;;11581:214;;;-1:-1:-1;11827:31:4;;-1:-1:-1;;;11827:31:4;;-1:-1:-1;;;;;17011:32:486;;;11827:31:4;;;16993:51:486;11827:23:4;;;;;16966:18:486;;11827:31:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11803:18;11822:1;11803:21;;;;;;;;:::i;:::-;;;;;;:55;;;;;11906:12;11919:1;11906:15;;;;;;;;:::i;:::-;;;;;;;;;;;11888:66;;-1:-1:-1;;;11888:66:4;;-1:-1:-1;;;;;17011:32:486;;;11888:66:4;;;16993:51:486;11888:44:4;;;;;;16966:18:486;;11888:66:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11866:16;11883:1;11866:19;;;;;;;;:::i;:::-;;;;;;;;;;:88;-1:-1:-1;11341:3:4;;;;:::i;:::-;;;;11296:665;;;-1:-1:-1;11975:12:4;;11989:18;;-1:-1:-1;12009:10:4;;-1:-1:-1;11989:18:4;-1:-1:-1;11975:12:4;;-1:-1:-1;10640:1421:4;-1:-1:-1;;;10640:1421:4:o;8199:923::-;8313:18;8339;8365;8391:20;8419;8454:29;8502:12;:19;-1:-1:-1;;;;;8486:36:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8454:68;;8528:31;8578:12;:19;-1:-1:-1;;;;;8562:36:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8528:70;;8604:31;8654:12;:19;-1:-1:-1;;;;;8638:36:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8604:70;;8680:33;8734:12;:19;-1:-1:-1;;;;;8716:38:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8680:74;;8760:33;8814:12;:19;-1:-1:-1;;;;;8796:38:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8760:74;;8845:9;8840:196;8864:12;:19;8860:1;:23;8840:196;;;8982:54;9013:12;9026:1;9013:15;;;;;;;;:::i;:::-;;;;;;;8982:21;:54::i;:::-;8897:10;8908:1;8897:13;;;;;;;;:::i;:::-;;;;;;8912:12;8925:1;8912:15;;;;;;;;:::i;:::-;;;;;;8929:12;8942:1;8929:15;;;;;;;;:::i;:::-;;;;;;8946:12;8959:1;8946:15;;;;;;;;:::i;:::-;;;;;;8963:12;8976:1;8963:15;;;;;;;;:::i;:::-;;;;;;8896:140;;;;;;;;;;;;;;;;;;;;8885:3;;;;;:::i;:::-;;;;8840:196;;;-1:-1:-1;9050:10:4;;9062:12;;-1:-1:-1;9076:12:4;;-1:-1:-1;9062:12:4;-1:-1:-1;9050:10:4;;-1:-1:-1;8199:923:4;-1:-1:-1;;8199:923:4:o;4844:156::-;4923:7;4945:50;4966:7;4975:12;4989:5;4945:20;:50::i;6282:1572::-;6383:16;6407;6431;6455:18;6481;6514:27;6544:11;-1:-1:-1;;;;;6544:25:4;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6544:27:4;;;;;;;;;;;;:::i;:::-;6514:57;;6577:29;6617:11;-1:-1:-1;;;;;6617:34:4;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6617:36:4;;;;;;;;;;;;:::i;:::-;;;6613:178;;-1:-1:-1;6768:16:4;;;6782:1;6768:16;;;;;;;;6613:178;;;6718:13;-1:-1:-1;6613:178:4;6797:29;6843:12;:19;-1:-1:-1;;;;;6829:34:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6829:34:4;;6797:66;;6869:31;6919:10;:17;-1:-1:-1;;;;;6903:34:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6869:68;;6943:31;6993:10;:17;-1:-1:-1;;;;;6977:34:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6943:68;;7069:9;7064:133;7088:12;:19;7084:1;:23;7064:133;;;7160:12;7173:1;7160:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7140:48:4;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7122:12;7135:1;7122:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7122:68:4;;;:15;;;;;;;;;;;:68;7109:3;;;;:::i;:::-;;;;7064:133;;;;7270:9;7265:503;7289:10;:17;7285:1;:21;7265:503;;;7321:14;7346:10;7357:1;7346:13;;;;;;;;:::i;:::-;;;;;;;7321:39;;7400:12;:19;-1:-1:-1;;;;;7386:34:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7386:34:4;;7368:12;7381:1;7368:15;;;;;;;;:::i;:::-;;;;;;:52;;;;7460:12;:19;-1:-1:-1;;;;;7446:34:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7446:34:4;;7428:12;7441:1;7428:15;;;;;;;;:::i;:::-;;;;;;:52;;;;7494:9;7489:273;7513:12;:19;7509:1;:23;7489:273;;;7549:31;7603:12;7616:1;7603:15;;;;;;;;:::i;:::-;;;;;;;;;;;7650:36;;-1:-1:-1;;;7650:36:4;;-1:-1:-1;;;;;17011:32:486;;;7650:36:4;;;16993:51:486;7603:15:4;;-1:-1:-1;7650:28:4;;;;;;16966:18:486;;7650:36:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7629:12;7642:1;7629:15;;;;;;;;:::i;:::-;;;;;;;7645:1;7629:18;;;;;;;;:::i;:::-;;;;;;;;;;:57;7717:36;;-1:-1:-1;;;7717:36:4;;-1:-1:-1;;;;;17011:32:486;;;7717:36:4;;;16993:51:486;7717:28:4;;;;;16966:18:486;;7717:36:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7696:12;7709:1;7696:15;;;;;;;;:::i;:::-;;;;;;;7712:1;7696:18;;;;;;;;:::i;:::-;;;;;;;;;;:57;-1:-1:-1;7534:3:4;;;;:::i;:::-;;;;7489:273;;;;7313:455;7308:3;;;;;:::i;:::-;;;;7265:503;;2220:2385;2318:7;2333:4;2345;2357:24;2422;2449:11;-1:-1:-1;;;;;2449:17:4;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2422:46;;2474:30;2507:11;-1:-1:-1;;;;;2507:26:4;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2474:61;;2541:35;2579:11;-1:-1:-1;;;;;2579:31:4;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2541:71;;2647:24;2674:11;-1:-1:-1;;;;;2674:25:4;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2674:27:4;;;;;;;;;;;;:::i;:::-;2647:54;;2707:19;2742:9;2737:716;2761:7;:14;2757:1;:18;2737:716;;;2790:14;2807:7;2815:1;2807:10;;;;;;;;:::i;:::-;;;;;;;;;;;2845:36;;-1:-1:-1;;;2845:36:4;;-1:-1:-1;;;;;17011:32:486;;;2845:36:4;;;16993:51:486;2807:10:4;;-1:-1:-1;2826:13:4;;2845:19;;;;;16966:18:486;;2845:36:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2825:56;;;2894:8;2889:23;;2904:8;;;;2889:23;2921:19;2952:6;-1:-1:-1;;;;;2952:12:4;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2952:14:4;;;;;;;;-1:-1:-1;;2952:14:4;;;;;;;;;;;;:::i;:::-;;;2948:129;;3060:8;;;;;2948:129;3022:12;-1:-1:-1;3084:25:4;3112:6;-1:-1:-1;;;;;3112:21:4;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3084:51;;3143:30;3176:6;-1:-1:-1;;;;;3176:26:4;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3143:61;;3276:16;-1:-1:-1;;;;;3261:31:4;:11;-1:-1:-1;;;;;3261:31:4;;;:92;;;;3328:25;3304:49;;:20;:49;;;;3261:92;:163;;;;3394:30;3365:59;;:25;:59;;;;3261:163;3248:198;;;3433:13;;;;:::i;:::-;;;;3248:198;2782:671;;;;;2737:716;2777:3;;;;:::i;:::-;;;;2737:716;;;;3459:33;3517:11;-1:-1:-1;;;;;3495:34:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3495:34:4;;-1:-1:-1;;3495:34:4;;;;;;;;;;;;3459:70;;3535:18;3569:9;3564:936;3588:7;:14;3584:1;:18;3564:936;;;3617:14;3634:7;3642:1;3634:10;;;;;;;;:::i;:::-;;;;;;;3617:27;;3653:13;3672:11;-1:-1:-1;;;;;3672:19:4;;3700:6;3672:36;;;;;;;;;;;;;;-1:-1:-1;;;;;17011:32:486;;;;16993:51;;16981:2;16966:18;;16825:225;3672:36:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3652:56;;;3721:8;3716:23;;3731:8;;;;3716:23;3748:19;3779:6;-1:-1:-1;;;;;3779:12:4;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3779:14:4;;;;;;;;-1:-1:-1;;3779:14:4;;;;;;;;;;;;:::i;:::-;;;3775:129;;3887:8;;;;;3775:129;3849:12;-1:-1:-1;3911:25:4;3939:6;-1:-1:-1;;;;;3939:21:4;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3911:51;;3970:30;4003:6;-1:-1:-1;;;;;4003:26:4;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3970:61;;4129:16;-1:-1:-1;;;;;4114:31:4;:11;-1:-1:-1;;;;;4114:31:4;;;:92;;;;4181:25;4157:49;;:20;:49;;;;4114:92;:163;;;;4247:30;4218:59;;:25;:59;;;;4114:163;4101:393;;;4319:144;;;;;;;;4354:6;-1:-1:-1;;;;;4319:144:4;;;;;4373:11;-1:-1:-1;;;;;4319:144:4;;;;;4396:20;4319:144;;;;;;4428:25;4319:144;;;;;4296:8;4305:10;4296:20;;;;;;;;:::i;:::-;;;;;;:167;;;;4473:12;;;;;:::i;:::-;;;;4101:393;3609:891;;;;;3564:936;3604:3;;;;:::i;:::-;;;;3564:936;;;-1:-1:-1;4514:16:4;;4532:25;;-1:-1:-1;4559:30:4;;-1:-1:-1;4532:25:4;;-1:-1:-1;2220:2385:4;;-1:-1:-1;;;;;2220:2385:4:o;13926:833::-;14011:16;14035:25;14068:18;14102:24;14128:33;14165:9;;;;;;;;;-1:-1:-1;;;;;14165:9:4;-1:-1:-1;;;;;14165:24:4;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14165:26:4;;;;;;;;;;;;:::i;:::-;14101:90;;;;14198:38;14262:5;:12;-1:-1:-1;;;;;14239:36:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14239:36:4;;14198:77;;14281:31;14331:5;:12;-1:-1:-1;;;;;14315:29:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14281:63;;14356:9;14351:353;14375:5;:12;14371:1;:16;14351:353;;;14402:28;14450:5;14456:1;14450:8;;;;;;;;:::i;:::-;;;;;;;:20;;;14402:69;;14483:11;-1:-1:-1;;;;;14483:34:4;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14483:36:4;;;;;;;;;;;;:::i;:::-;;;14479:219;;;;;14589:11;14571:12;14584:1;14571:15;;;;;;;;:::i;:::-;;;;;;:29;-1:-1:-1;;;;;14571:29:4;;;-1:-1:-1;;;;;14571:29:4;;;;;14628:52;14660:4;14666:13;14628:31;:52::i;:::-;14610:12;14623:1;14610:15;;;;;;;;:::i;:::-;;;;;;:70;;;;14520:169;14479:219;-1:-1:-1;14389:3:4;;;;:::i;:::-;;;;14351:353;;;-1:-1:-1;14718:7:4;;14727:12;;-1:-1:-1;14718:7:4;;-1:-1:-1;13926:833:4;;-1:-1:-1;;;13926:833:4:o;1385:200::-;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;25099:2:486;3314:201:439;;;25081:21:486;25138:2;25118:18;;;25111:30;25177:34;25157:18;;;25150:62;-1:-1:-1;;;25228:18:486;;;25221:44;25282:19;;3314:201:439;;;;;;;;;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;-1:-1:-1;;;;;1464:33:4;::::1;1456:96;;;::::0;-1:-1:-1;;;1456:96:4;;25514:2:486;1456:96:4::1;::::0;::::1;25496:21:486::0;25553:2;25533:18;;;25526:30;25592:34;25572:18;;;25565:62;-1:-1:-1;;;25643:18:486;;;25636:48;25701:19;;1456:96:4::1;25312:414:486::0;1456:96:4::1;1558:9;:22:::0;;-1:-1:-1;;;;;;1558:22:4::1;::::0;-1:-1:-1;;;;;1558:22:4;::::1;;;::::0;;3636:99:439;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;25883:36:486;;3710:14:439;;25871:2:486;25856:18;3710:14:439;;;;;;;3636:99;3258:483;1385:200:4;:::o;12321:1372::-;12423:16;12447:25;12480:18;12540:33;12577:9;;;;;;;;;-1:-1:-1;;;;;12577:9:4;-1:-1:-1;;;;;12577:24:4;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12577:26:4;;;;;;;;;;;;:::i;:::-;12537:66;;;12609:19;12644:9;12639:203;12663:5;:12;12659:1;:16;12639:203;;;12711:5;12717:1;12711:8;;;;;;;;:::i;:::-;;;;;;;:20;;;-1:-1:-1;;;;;12694:48:4;;12743:8;12694:58;;;;;;;;;;;;;;-1:-1:-1;;;;;17011:32:486;;;;16993:51;;16981:2;16966:18;;16825:225;12694:58:4;;;;;;;;;;;;;;;;;;;-1:-1:-1;12694:58:4;;;;;;;;-1:-1:-1;;12694:58:4;;;;;;;;;;;;:::i;:::-;;;12690:146;;;;;12793:10;12789:29;;;12805:13;;;;:::i;:::-;;;;12789:29;12753:74;12690:146;12677:3;;;;:::i;:::-;;;;12639:203;;;;12867:24;12908:11;-1:-1:-1;;;;;12894:26:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12894:26:4;;12867:53;;12926:38;12990:11;-1:-1:-1;;;;;12967:35:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12967:35:4;;12926:76;;13008:31;13058:11;-1:-1:-1;;;;;13042:28:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13008:62;;13076:13;13105:9;13100:511;13124:5;:12;13120:1;:16;13100:511;;;13151:28;13199:5;13205:1;13199:8;;;;;;;;:::i;:::-;;;;;;;:20;;;13151:69;;13233:11;-1:-1:-1;;;;;13233:21:4;;13255:8;13233:31;;;;;;;;;;;;;;-1:-1:-1;;;;;17011:32:486;;;;16993:51;;16981:2;16966:18;;16825:225;13233:31:4;;;;;;;;;;;;;;;;;;;-1:-1:-1;13233:31:4;;;;;;;;-1:-1:-1;;13233:31:4;;;;;;;;;;;;:::i;:::-;;;13229:376;;;;;13305:10;13301:287;;;13346:1;13329:7;13337:5;13329:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;13381:11;13359:12;13372:5;13359:19;;;;;;;;:::i;:::-;;;;;;:33;-1:-1:-1;;;;;13359:33:4;;;-1:-1:-1;;;;;13359:33:4;;;;;13409:11;-1:-1:-1;;;;;13409:34:4;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13409:36:4;;;;;;;;;;;;:::i;:::-;;;13405:153;;;;;13523:13;13501:12;13514:5;13501:19;;;;;;;;:::i;:::-;;;;;;:35;;;;13446:103;13405:153;13570:7;;;;:::i;:::-;;;;13301:287;13265:331;13229:376;-1:-1:-1;13138:3:4;;;;:::i;:::-;;;;13100:511;;;-1:-1:-1;13652:7:4;;13661:12;;-1:-1:-1;13661:12:4;-1:-1:-1;12321:1372:4;-1:-1:-1;;;;;12321:1372:4:o;5672:291::-;5790:7;5805:28;5853:12;-1:-1:-1;;;;;5853:24:4;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5893:65;;-1:-1:-1;;;5893:65:4;;-1:-1:-1;;;;;26481:15:486;;;5893:65:4;;;26463:34:486;26533:15;;;26513:18;;;26506:43;26592:14;;26585:22;26565:18;;;26558:50;5805:75:4;;-1:-1:-1;5893:32:4;;;;;;26398:18:486;;5893:65:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5886:72;5672:291;-1:-1:-1;;;;;5672:291:4:o;9461:739::-;9676:31;;-1:-1:-1;;;9676:31:4;;-1:-1:-1;;;;;17011:32:486;;;9676:31:4;;;16993:51:486;9589:7:4;;;;;;9676:23;;;;;;16966:18:486;;9676:31:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9713:62;;-1:-1:-1;;;9713:62:4;;-1:-1:-1;;;;;26849:15:486;;;9713:62:4;;;26831:34:486;26901:15;;;26881:18;;;26874:43;9649:58:4;;-1:-1:-1;9713:37:4;;;;;;26766:18:486;;9713:62:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9814:31:4;;-1:-1:-1;;;9814:31:4;;-1:-1:-1;;;;;17011:32:486;;;9814:31:4;;;16993:51:486;9781:30:4;;-1:-1:-1;9848:16:4;;-1:-1:-1;9814:23:4;;;;;16966:18:486;;9814:31:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;9926:31;;-1:-1:-1;;;9926:31:4;;-1:-1:-1;;;;;17011:32:486;;;9926:31:4;;;16993:51:486;9781:83:4;;-1:-1:-1;9926:23:4;;;;;;16966:18:486;;9926:31:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9963:62;;-1:-1:-1;;;9963:62:4;;-1:-1:-1;;;;;26849:15:486;;;9963:62:4;;;26831:34:486;26901:15;;;26881:18;;;26874:43;9907:50:4;;-1:-1:-1;9963:37:4;;;;;;26766:18:486;;9963:62:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10064:31:4;;-1:-1:-1;;;10064:31:4;;-1:-1:-1;;;;;17011:32:486;;;10064:31:4;;;16993:51:486;10031:30:4;;-1:-1:-1;10098:16:4;;-1:-1:-1;10064:23:4;;;;;16966:18:486;;10064:31:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;10148:22;;;;-1:-1:-1;9461:739:4;;-1:-1:-1;;;;;;9461:739:4:o;14763:434::-;14885:16;14911:29;14957:13;:20;-1:-1:-1;;;;;14943:35:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14943:35:4;;14911:67;;14989:9;14984:183;15008:13;:20;15004:1;:24;14984:183;;;15105:1;15067:13;15081:1;15067:16;;;;;;;;:::i;:::-;;;;;;;;;;;15047:55;;-1:-1:-1;;;15047:55:4;;-1:-1:-1;;;;;17011:32:486;;;15047:55:4;;;16993:51:486;15047:49:4;;;;;;16966:18:486;;15047:55:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;15043:118;;;15136:13;15150:1;15136:16;;;;;;;;:::i;:::-;;;;;;;15118:12;15131:1;15118:15;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;15118:34:4;;;-1:-1:-1;;;;;15118:34:4;;;;;15043:118;15030:3;;;;:::i;:::-;;;;14984:183;;;-1:-1:-1;15180:12:4;14763:434;-1:-1:-1;;;14763:434:4:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:486:-;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:405::-;235:6;243;296:2;284:9;275:7;271:23;267:32;264:52;;;312:1;309;302:12;264:52;351:9;338:23;370:31;395:5;370:31;:::i;:::-;420:5;-1:-1:-1;477:2:486;462:18;;449:32;490:33;449:32;490:33;:::i;:::-;542:7;532:17;;;150:405;;;;;:::o;742:127::-;803:10;798:3;794:20;791:1;784:31;834:4;831:1;824:15;858:4;855:1;848:15;874:253;946:2;940:9;988:4;976:17;;-1:-1:-1;;;;;1008:34:486;;1044:22;;;1005:62;1002:88;;;1070:18;;:::i;:::-;1106:2;1099:22;874:253;:::o;1132:275::-;1203:2;1197:9;1268:2;1249:13;;-1:-1:-1;;1245:27:486;1233:40;;-1:-1:-1;;;;;1288:34:486;;1324:22;;;1285:62;1282:88;;;1350:18;;:::i;:::-;1386:2;1379:22;1132:275;;-1:-1:-1;1132:275:486:o;1412:204::-;1493:4;-1:-1:-1;;;;;1518:6:486;1515:30;1512:56;;;1548:18;;:::i;:::-;-1:-1:-1;1593:1:486;1589:14;1605:4;1585:25;;1412:204::o;1621:1156::-;1742:6;1750;1803:2;1791:9;1782:7;1778:23;1774:32;1771:52;;;1819:1;1816;1809:12;1771:52;1858:9;1845:23;1877:31;1902:5;1877:31;:::i;:::-;1927:5;-1:-1:-1;1951:2:486;1989:18;;;1976:32;-1:-1:-1;;;;;2020:30:486;;2017:50;;;2063:1;2060;2053:12;2017:50;2086:22;;2139:4;2131:13;;2127:27;-1:-1:-1;2117:55:486;;2168:1;2165;2158:12;2117:55;2204:2;2191:16;2227:81;2243:64;2304:2;2243:64;:::i;:::-;2227:81;:::i;:::-;2342:15;;;2424:1;2420:10;;;;2412:19;;2408:28;;;2373:12;;;;2448:19;;;2445:39;;;2480:1;2477;2470:12;2445:39;2504:11;;;;2524:223;2540:6;2535:3;2532:15;2524:223;;;2622:3;2609:17;2639:33;2664:7;2639:33;:::i;:::-;2685:20;;2557:12;;;;2725;;;;2524:223;;;2766:5;2756:15;;;;;;;1621:1156;;;;;:::o;2782:461::-;2835:3;2873:5;2867:12;2900:6;2895:3;2888:19;2926:4;2955:2;2950:3;2946:12;2939:19;;2992:2;2985:5;2981:14;3013:1;3023:195;3037:6;3034:1;3031:13;3023:195;;;3102:13;;-1:-1:-1;;;;;3098:39:486;3086:52;;3158:12;;;;3193:15;;;;3134:1;3052:9;3023:195;;;-1:-1:-1;3234:3:486;;2782:461;-1:-1:-1;;;;;2782:461:486:o;3248:435::-;3301:3;3339:5;3333:12;3366:6;3361:3;3354:19;3392:4;3421:2;3416:3;3412:12;3405:19;;3458:2;3451:5;3447:14;3479:1;3489:169;3503:6;3500:1;3497:13;3489:169;;;3564:13;;3552:26;;3598:12;;;;3633:15;;;;3525:1;3518:9;3489:169;;4163:632;4235:3;4266;4298:5;4292:12;4325:6;4320:3;4313:19;4351:4;4380:2;4375:3;4371:12;4364:19;;4436:2;4426:6;4423:1;4419:14;4412:5;4408:26;4404:35;4473:2;4466:5;4462:14;4494:1;4504:265;4518:6;4515:1;4512:13;4504:265;;;4605:2;4601:7;4593:5;4587:4;4583:16;4579:30;4574:3;4567:43;4631:58;4684:4;4675:6;4669:13;4631:58;:::i;:::-;4747:12;;;;4623:66;-1:-1:-1;4712:15:486;;;;4540:1;4533:9;4504:265;;;-1:-1:-1;4785:4:486;;4163:632;-1:-1:-1;;;;;;;4163:632:486:o;4800:2537::-;5454:3;5443:9;5436:22;5417:4;5481:57;5533:3;5522:9;5518:19;5510:6;5481:57;:::i;:::-;5557:2;5607:9;5599:6;5595:22;5590:2;5579:9;5575:18;5568:50;5641:44;5678:6;5670;5641:44;:::i;:::-;5627:58;;5704:2;5754:9;5746:6;5742:22;5737:2;5726:9;5722:18;5715:50;5788:63;5844:6;5836;5788:63;:::i;:::-;5774:77;;5899:9;5891:6;5887:22;5882:2;5871:9;5867:18;5860:50;5930:6;5965;5959:13;5996:6;5988;5981:22;6031:2;6023:6;6019:15;6012:22;;6090:2;6080:6;6077:1;6073:14;6065:6;6061:27;6057:36;6128:2;6120:6;6116:15;6149:1;6159:1051;6173:6;6170:1;6167:13;6159:1051;;;6238:19;;;-1:-1:-1;;6234:33:486;6222:46;;6291:13;;6365:9;;6387:24;;;6477:11;;;;6433:15;;;;6512:1;6526:576;6542:8;6537:3;6534:17;6526:576;;;6615:15;;6660:5;6759:1;6777:225;6793:4;6788:3;6785:13;6777:225;;;6874:15;;6860:30;;6967:17;;;;6920:14;;;;6817:1;6808:11;6777:225;;;-1:-1:-1;;;7071:17:486;;;;7028:14;;;;6570:1;6561:11;6526:576;;;-1:-1:-1;;7188:12:486;;;;7125:5;-1:-1:-1;;7153:15:486;;;;6195:1;6188:9;6159:1051;;;6163:3;;7259:9;7251:6;7247:22;7241:3;7230:9;7226:19;7219:51;7287:44;7324:6;7316;7287:44;:::i;:::-;7279:52;4800:2537;-1:-1:-1;;;;;;;;;;;;;4800:2537:486:o;7342:1013::-;7452:6;7483:2;7526;7514:9;7505:7;7501:23;7497:32;7494:52;;;7542:1;7539;7532:12;7494:52;7582:9;7569:23;-1:-1:-1;;;;;7607:6:486;7604:30;7601:50;;;7647:1;7644;7637:12;7601:50;7670:22;;7723:4;7715:13;;7711:27;-1:-1:-1;7701:55:486;;7752:1;7749;7742:12;7701:55;7788:2;7775:16;7811:81;7827:64;7888:2;7827:64;:::i;7811:81::-;7926:15;;;8008:1;8004:10;;;;7996:19;;7992:28;;;7957:12;;;;8032:19;;;8029:39;;;8064:1;8061;8054:12;8029:39;8088:11;;;;8108:217;8124:6;8119:3;8116:15;8108:217;;;8204:3;8191:17;8221:31;8246:5;8221:31;:::i;:::-;8265:18;;8141:12;;;;8303;;;;8108:217;;;8344:5;7342:1013;-1:-1:-1;;;;;;;7342:1013:486:o;8360:1084::-;8423:3;8454;8486:5;8480:12;8513:6;8508:3;8501:19;8539:4;8568:2;8563:3;8559:12;8552:19;;8624:2;8614:6;8611:1;8607:14;8600:5;8596:26;8592:35;8661:2;8654:5;8650:14;8682:1;8703;8713:705;8729:6;8724:3;8721:15;8713:705;;;8798:16;;;-1:-1:-1;;8794:30:486;8782:43;;8848:13;;8920:9;;8942:22;;;9028:11;;;;8986:13;;;;9063:1;9077:235;9093:8;9088:3;9085:17;9077:235;;;9174:15;;-1:-1:-1;;;;;9170:41:486;9156:56;;9281:17;;;;9238:14;;;;9208:1;9112:11;9077:235;;;-1:-1:-1;;9396:12:486;;;;9333:5;-1:-1:-1;;9361:15:486;;;;8755:1;8746:11;8713:705;;;-1:-1:-1;9434:4:486;;8360:1084;-1:-1:-1;;;;;;;;8360:1084:486:o;9449:1058::-;9512:3;9543;9575:5;9569:12;9602:6;9597:3;9590:19;9628:4;9657:2;9652:3;9648:12;9641:19;;9713:2;9703:6;9700:1;9696:14;9689:5;9685:26;9681:35;9750:2;9743:5;9739:14;9771:1;9792;9802:679;9818:6;9813:3;9810:15;9802:679;;;9887:16;;;-1:-1:-1;;9883:30:486;9871:43;;9937:13;;10009:9;;10031:22;;;10117:11;;;;10075:13;;;;10152:1;10166:209;10182:8;10177:3;10174:17;10166:209;;;10259:15;;10245:30;;10344:17;;;;10301:14;;;;10210:1;10201:11;10166:209;;;-1:-1:-1;;10459:12:486;;;;10396:5;-1:-1:-1;;10424:15:486;;;;9844:1;9835:11;9802:679;;10512:634;10585:3;10616;10648:5;10642:12;10675:6;10670:3;10663:19;10701:4;10730:2;10725:3;10721:12;10714:19;;10786:2;10776:6;10773:1;10769:14;10762:5;10758:26;10754:35;10823:2;10816:5;10812:14;10844:1;10854:266;10868:6;10865:1;10862:13;10854:266;;;10955:2;10951:7;10943:5;10937:4;10933:16;10929:30;10924:3;10917:43;10981:59;11035:4;11026:6;11020:13;10981:59;:::i;:::-;11098:12;;;;10973:67;-1:-1:-1;11063:15:486;;;;10890:1;10883:9;10854:266;;11151:1526;12009:3;11998:9;11991:22;11972:4;12036:76;12107:3;12096:9;12092:19;12084:6;12036:76;:::i;:::-;12160:9;12152:6;12148:22;12143:2;12132:9;12128:18;12121:50;12194:54;12241:6;12233;12194:54;:::i;:::-;12180:68;;12296:9;12288:6;12284:22;12279:2;12268:9;12264:18;12257:50;12330:54;12377:6;12369;12330:54;:::i;:::-;12316:68;;12432:9;12424:6;12420:22;12415:2;12404:9;12400:18;12393:50;12466:64;12523:6;12515;12466:64;:::i;:::-;12452:78;;12579:9;12571:6;12567:22;12561:3;12550:9;12546:19;12539:51;12607:64;12664:6;12656;12607:64;:::i;:::-;12599:72;11151:1526;-1:-1:-1;;;;;;;;11151:1526:486:o;12682:273::-;12767:6;12820:2;12808:9;12799:7;12795:23;12791:32;12788:52;;;12836:1;12833;12826:12;12788:52;12875:9;12862:23;12894:31;12919:5;12894:31;:::i;12960:1226::-;13568:3;13557:9;13550:22;13531:4;13595:66;13656:3;13645:9;13641:19;13633:6;13595:66;:::i;:::-;13709:9;13701:6;13697:22;13692:2;13681:9;13677:18;13670:50;13743:44;13780:6;13772;13743:44;:::i;:::-;13729:58;;13835:9;13827:6;13823:22;13818:2;13807:9;13803:18;13796:50;13869:44;13906:6;13898;13869:44;:::i;:::-;13855:58;;13961:9;13953:6;13949:22;13944:2;13933:9;13929:18;13922:50;13995:54;14042:6;14034;13995:54;:::i;:::-;13981:68;;14098:9;14090:6;14086:22;14080:3;14069:9;14065:19;14058:51;14126:54;14173:6;14165;14126:54;:::i;14191:1284::-;14471:4;14500:3;14541:2;14530:9;14526:18;14580:1;14576;14571:3;14567:11;14563:19;14621:2;14613:6;14609:15;14598:9;14591:34;14644:2;14696:6;14689:14;14682:22;14677:2;14666:9;14662:18;14655:50;14724:2;14776:6;14769:14;14762:22;14757:2;14746:9;14742:18;14735:50;14804:2;14842;14837;14826:9;14822:18;14815:30;14865:6;14900;14894:13;14931:6;14923;14916:22;14969:3;14958:9;14954:19;14947:26;;15008:2;15000:6;14996:15;14982:29;;15029:1;15039:410;15053:6;15050:1;15047:13;15039:410;;;15112:13;;15154:9;;15150:18;;15138:31;;15213:11;;;15207:18;15203:27;;15189:12;;;15182:49;15285:11;;;15279:18;15272:26;15265:34;15251:12;;;15244:56;15354:11;;15348:18;15341:26;15334:34;15320:12;;;15313:56;15424:15;;;;15389:12;;;;15075:1;15068:9;15039:410;;;-1:-1:-1;15466:3:486;;14191:1284;-1:-1:-1;;;;;;;;;;;;;14191:1284:486:o;15732:1088::-;16143:2;16132:9;16125:21;16106:4;16169:56;16221:2;16210:9;16206:18;16198:6;16169:56;:::i;:::-;16282:22;;;16244:2;16262:18;;;16255:50;;;;16354:13;;16376:22;;;16452:15;;;;16414;;;16485:1;16495:195;16509:6;16506:1;16503:13;16495:195;;;16574:13;;-1:-1:-1;;;;;16570:39:486;16558:52;;16665:15;;;;16630:12;;;;16606:1;16524:9;16495:195;;;16499:3;;16735:9;16730:3;16726:19;16721:2;16710:9;16706:18;16699:47;16763:51;16810:3;16802:6;16763:51;:::i;17329:127::-;17390:10;17385:3;17381:20;17378:1;17371:31;17421:4;17418:1;17411:15;17445:4;17442:1;17435:15;17461:138;17540:13;;17562:31;17540:13;17562:31;:::i;:::-;17461:138;;;:::o;17604:251::-;17674:6;17727:2;17715:9;17706:7;17702:23;17698:32;17695:52;;;17743:1;17740;17733:12;17695:52;17775:9;17769:16;17794:31;17819:5;17794:31;:::i;17860:994::-;17972:6;18003:2;18046;18034:9;18025:7;18021:23;18017:32;18014:52;;;18062:1;18059;18052:12;18014:52;18095:9;18089:16;-1:-1:-1;;;;;18120:6:486;18117:30;18114:50;;;18160:1;18157;18150:12;18114:50;18183:22;;18236:4;18228:13;;18224:27;-1:-1:-1;18214:55:486;;18265:1;18262;18255:12;18214:55;18294:2;18288:9;18317:81;18333:64;18394:2;18333:64;:::i;18317:81::-;18432:15;;;18514:1;18510:10;;;;18502:19;;18498:28;;;18463:12;;;;18538:19;;;18535:39;;;18570:1;18567;18560:12;18535:39;18594:11;;;;18614:210;18630:6;18625:3;18622:15;18614:210;;;18703:3;18697:10;18720:31;18745:5;18720:31;:::i;:::-;18764:18;;18647:12;;;;18802;;;;18614:210;;18859:127;18920:10;18915:3;18911:20;18908:1;18901:31;18951:4;18948:1;18941:15;18975:4;18972:1;18965:15;18991:135;19030:3;-1:-1:-1;;19051:17:486;;19048:43;;;19071:18;;:::i;:::-;-1:-1:-1;19118:1:486;19107:13;;18991:135::o;19339:184::-;19409:6;19462:2;19450:9;19441:7;19437:23;19433:32;19430:52;;;19478:1;19475;19468:12;19430:52;-1:-1:-1;19501:16:486;;19339:184;-1:-1:-1;19339:184:486:o;19528:977::-;19623:6;19654:2;19697;19685:9;19676:7;19672:23;19668:32;19665:52;;;19713:1;19710;19703:12;19665:52;19746:9;19740:16;-1:-1:-1;;;;;19771:6:486;19768:30;19765:50;;;19811:1;19808;19801:12;19765:50;19834:22;;19887:4;19879:13;;19875:27;-1:-1:-1;19865:55:486;;19916:1;19913;19906:12;19865:55;19945:2;19939:9;19968:81;19984:64;20045:2;19984:64;:::i;19968:81::-;20083:15;;;20165:1;20161:10;;;;20153:19;;20149:28;;;20114:12;;;;20189:19;;;20186:39;;;20221:1;20218;20211:12;20186:39;20245:11;;;;20265:210;20281:6;20276:3;20273:15;20265:210;;;20354:3;20348:10;20371:31;20396:5;20371:31;:::i;:::-;20415:18;;20298:12;;;;20453;;;;20265:210;;20510:164;20586:13;;20635;;20628:21;20618:32;;20608:60;;20664:1;20661;20654:12;20679:202;20746:6;20799:2;20787:9;20778:7;20774:23;20770:32;20767:52;;;20815:1;20812;20805:12;20767:52;20838:37;20865:9;20838:37;:::i;20886:263::-;20962:6;20970;21023:2;21011:9;21002:7;20998:23;20994:32;20991:52;;;21039:1;21036;21029:12;20991:52;21062:37;21089:9;21062:37;:::i;:::-;21052:47;;21139:2;21128:9;21124:18;21118:25;21108:35;;20886:263;;;;;:::o;21154:2552::-;21223:5;21253:4;21297:3;21292:2;21284:6;21280:15;21276:25;21266:53;;21315:1;21312;21305:12;21266:53;21344:6;21338:13;21370:4;21394:81;21410:64;21471:2;21410:64;:::i;21394:81::-;21509:15;;;21595:1;21591:10;;;;21579:23;;21575:32;;;21540:12;;;;21619:15;;;21616:35;;;21647:1;21644;21637:12;21616:35;21683:2;21675:6;21671:15;21695:1982;21711:6;21706:3;21703:15;21695:1982;;;21790:3;21784:10;-1:-1:-1;;;;;21867:2:486;21854:11;21851:19;21848:109;;;21911:1;21940:2;21936;21929:14;21848:109;21980:24;;;;22027:4;-1:-1:-1;;22085:12:486;;;22081:21;;22077:30;-1:-1:-1;22074:120:486;;;22148:1;22177:2;22173;22166:14;22074:120;22220:22;;:::i;:::-;22285:2;22281;22277:11;22271:18;22318:2;22308:8;22305:16;22302:109;;;22363:1;22393:3;22388;22381:16;22302:109;22435:17;;22488:2;22479:12;;22475:22;-1:-1:-1;22465:123:486;;22540:1;22570:3;22565;22558:16;22465:123;22627:2;22622:3;22618:12;22612:19;22655:2;22650:3;22647:11;22644:37;;;22661:18;;:::i;:::-;22709:47;22752:2;22747;22742;22737:3;22733:12;22729:21;22725:30;22709:47;:::i;:::-;22694:62;;22785:3;22776:7;22769:20;22813:2;22802:13;;22859:3;22853;22847;22842;22838:13;22834:23;22831:32;22828:125;;;22905:1;22935:3;22930;22923:16;22828:125;22975:1;22989:145;23003:3;23000:1;22997:10;22989:145;;;23101:11;;;23097:21;;23091:28;23069:15;;;23065:24;;23058:62;23015:10;;22989:145;;;23156:3;23153:1;23150:10;23147:95;;;23226:1;23221:2;23215:3;23206:7;23202:17;23198:26;23191:37;23147:95;;;;23269:7;23262:5;23255:22;23313:43;23351:3;23347:2;23343:12;23313:43;:::i;:::-;23308:2;23301:5;23297:14;23290:67;23381:2;23370:13;;23420:43;23458:3;23454:2;23450:12;23420:43;:::i;:::-;23403:15;;;23396:68;;;;23488:3;23534:12;;;23528:19;23511:15;;;23504:44;;;;23591:11;;23585:18;23568:15;;;23561:43;23617:18;;23655:12;;;;21728;;21695:1982;;;-1:-1:-1;23695:5:486;21154:2552;-1:-1:-1;;;;;;;21154:2552:486:o;23711:1181::-;23862:6;23870;23923:2;23911:9;23902:7;23898:23;23894:32;23891:52;;;23939:1;23936;23929:12;23891:52;23972:9;23966:16;-1:-1:-1;;;;;24042:2:486;24034:6;24031:14;24028:34;;;24058:1;24055;24048:12;24028:34;24096:6;24085:9;24081:22;24071:32;;24141:7;24134:4;24130:2;24126:13;24122:27;24112:55;;24163:1;24160;24153:12;24112:55;24192:2;24186:9;24214:4;24238:81;24254:64;24315:2;24254:64;:::i;24238:81::-;24353:15;;;24435:1;24431:10;;;;24423:19;;24419:28;;;24384:12;;;;24459:19;;;24456:39;;;24491:1;24488;24481:12;24456:39;24515:11;;;;24535:135;24551:6;24546:3;24543:15;24535:135;;;24617:10;;24605:23;;24568:12;;;;24648;;;;24535:135;;;24725:18;;;24719:25;24689:5;;-1:-1:-1;24719:25:486;;-1:-1:-1;;;24756:16:486;;;24753:36;;;24785:1;24782;24775:12;24753:36;;24808:78;24878:7;24867:8;24856:9;24852:24;24808:78;:::i;:::-;24798:88;;;23711:1181;;;;;:::o;26928:125::-;26968:4;26996:1;26993;26990:8;26987:34;;;27001:18;;:::i;:::-;-1:-1:-1;27038:9:486;;26928:125::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "directory()": "c41c2f24", + "getFlywheelsToClaim(address)": "998e2d4a", + "getMaxBorrow(address,address)": "1ec18ec0", + "getMaxRedeem(address,address)": "64129042", + "getPoolOwnership(address)": "97f35ff0", + "getRewardSpeedsByPool(address)": "84b3403d", + "getRewardSpeedsByPools(address[])": "3fc5fab5", + "getRewardsDistributorsBySupplier(address)": "d24eaf13", + "getUnclaimedRewardsByDistributors(address,address[])": "338038fa", + "initialize(address)": "c4d66de8" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/PythPriceOracle.json b/packages/sdk/deployments/mode/PythPriceOracle.json new file mode 100644 index 0000000000..324a8e75a6 --- /dev/null +++ b/packages/sdk/deployments/mode/PythPriceOracle.json @@ -0,0 +1,580 @@ +{ + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "NATIVE_TOKEN_USD_FEED", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PYTH", + "outputs": [ + { + "internalType": "contract IPyth", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "USD_TOKEN", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pythAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nativeTokenUsdFeed", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "usdToken", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "priceFeedIds", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pythAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nativeTokenUsdFeed", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "usdToken", + "type": "address" + } + ], + "name": "reinitialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "bytes32[]", + "name": "feedIds", + "type": "bytes32[]" + } + ], + "name": "setPriceFeeds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "transactionIndex": 1, + "gasUsed": "840112", + "logsBloom": "0x00000000000000000000000010000000400000000000800000800000000200000000000000000000000000000000008000000000100000000000004000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000800000001000000000000000400000000000000000000000000000000000000000004080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd", + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000013fd2701c3017bcc375ad14dd8433c6d7a441794" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + }, + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + }, + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + }, + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + }, + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + } + ], + "blockNumber": 2097582, + "cumulativeGasUsed": "887025", + "status": 1, + "byzantium": true + }, + "args": [ + "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xd26b3e6e000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace000000000000000000000000d988097fb8612cc24eec14542bc03424c656005f" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", + "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace", + "0xd988097fb8612cc24eeC14542bC03424c656005f" + ] + }, + "implementation": "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/PythPriceOracle_Implementation.json b/packages/sdk/deployments/mode/PythPriceOracle_Implementation.json new file mode 100644 index 0000000000..f19429f5bd --- /dev/null +++ b/packages/sdk/deployments/mode/PythPriceOracle_Implementation.json @@ -0,0 +1,1000 @@ +{ + "address": "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "NATIVE_TOKEN_USD_FEED", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PYTH", + "outputs": [ + { + "internalType": "contract IPyth", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "USD_TOKEN", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pythAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nativeTokenUsdFeed", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "usdToken", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "priceFeedIds", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pythAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nativeTokenUsdFeed", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "usdToken", + "type": "address" + } + ], + "name": "reinitialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "bytes32[]", + "name": "feedIds", + "type": "bytes32[]" + } + ], + "name": "setPriceFeeds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xdbf33db8a767b7fdc5b62eb7c6c6a23e1362ebc038e33d7914bd286e13a81d60", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "transactionIndex": 1, + "gasUsed": "1060392", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc97882b6efedb25075ce7da8cc92f20424e0efaba89bc458bb3f71fd3dbb65ec", + "transactionHash": "0xdbf33db8a767b7fdc5b62eb7c6c6a23e1362ebc038e33d7914bd286e13a81d60", + "logs": [], + "blockNumber": 2097578, + "cumulativeGasUsed": "1107305", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "NATIVE_TOKEN_USD_FEED", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "PYTH", + "outputs": [ + { + "internalType": "contract IPyth", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "USD_TOKEN", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pythAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nativeTokenUsdFeed", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "usdToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "priceFeedIds", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pythAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nativeTokenUsdFeed", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "usdToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reinitialize" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "bytes32[]", + "name": "feedIds", + "type": "bytes32[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setPriceFeeds" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "getUnderlyingPrice(address)": { + "details": "Implements the `PriceOracle` interface for Ionic pools (and Compound v2).", + "returns": { + "_0": "Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "price(address)": { + "details": "Returns the price in ETH of `underlying` (implements `BasePriceOracle`)." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setPriceFeeds(address[],bytes32[])": { + "details": "Admin-only function to set price feeds.", + "params": { + "feedIds": "The Pyth Network feed IDs`.", + "underlyings": "Underlying token addresses for which to set price feeds." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "NATIVE_TOKEN_USD_FEED()": { + "notice": "DIA NATIVE/USD price feed contracts." + }, + "USD_TOKEN()": { + "notice": "MasterPriceOracle for backup for USD price." + }, + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "getUnderlyingPrice(address)": { + "notice": "Returns the price in ETH of the token underlying `cToken`." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + }, + "priceFeedIds(address)": { + "notice": "Maps ERC20 token addresses to Pyth price IDs." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/oracles/default/PythPriceOracle.sol": "PythPriceOracle" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x9807f66d6f8aa8005c3e4da70b7dc64d16daeccd02bc865a49d809e0094a81a2", + "urls": [ + "bzz-raw://12d8bf913ca8d8051c62a803204ed899e011efeda842e90639f3c8e5fe0270cf", + "dweb:/ipfs/Qmd8bXgWwamyWgk4AGFQE4N6JGMtXBw9mDqAYH27sVPLKY" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/PythPriceOracle.sol": { + "keccak256": "0x78b807249630d7858b00a94b941e23b7d30c85831214b328f08877db4e32a771", + "urls": [ + "bzz-raw://c9e3198f7c462729beabd5adfb76493be2bdda6963afa3545373aac6f1a46aa9", + "dweb:/ipfs/QmRtgCGfZ2FtFLyjPJU57HWcbURGyEWW5hnM2UxcBZjKXV" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/pyth-sdk-solidity/IPyth.sol": { + "keccak256": "0x949c65c65fea0578c09a6fc068e09ed1165adede2c835984cefcb25d76de1de2", + "urls": [ + "bzz-raw://4d7cb071e08e81bb8b113a928f4c2d2b3cdf950ad64c6c7003ea3d874163ca77", + "dweb:/ipfs/QmRbQchPxRTBMHi7WzLb8XnMGzPDQcWhu7i2u5naUsCRoZ" + ], + "license": "Apache-2.0" + }, + "lib/pyth-sdk-solidity/IPythEvents.sol": { + "keccak256": "0x048a35526c2e77d107d43ba336f1dcf31f64cef25ba429ae1f7a0fbc11c23320", + "urls": [ + "bzz-raw://b75be4c3643b22305995aba71fc92146dbf51fa82d2f9728c515d7749b32dca3", + "dweb:/ipfs/QmRby4XA9jJQGhxoJ16BTUDuU7BzLFfadbfTgBiQsDgNyZ" + ], + "license": "Apache-2.0" + }, + "lib/pyth-sdk-solidity/PythStructs.sol": { + "keccak256": "0x95ff0a6d64517348ef604b8bcf246b561a9445d7e607b8f48491c617cfda9b65", + "urls": [ + "bzz-raw://fb7f4ffe03be7379d3833c5946e38153de26aef4a4da0323a1ec603787de9eb7", + "dweb:/ipfs/QmW4WkkLPGjDJrLrW4mYfxtFh8e9KAcPhrnNdxPQsfkS6t" + ], + "license": "Apache-2.0" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50611239806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639d23c81211610097578063e30c397811610066578063e30c3978146101ee578063f2fde38b14610201578063fc4d33f914610214578063fc57d4df1461021c57600080fd5b80639d23c812146101a2578063aea91078146101b5578063ca4737ca146101c8578063d26b3e6e146101db57600080fd5b80636e96dfd7116100d35780636e96dfd71461016d578063715018a61461018057806380f96bd1146101885780638da5cb5b1461019157600080fd5b806301e169e4146100fa578063336eb6ae1461010f57806367e406d514610142575b600080fd5b61010d610108366004610e3a565b61022f565b005b61012f61011d366004610efc565b60666020526000908152604090205481565b6040519081526020015b60405180910390f35b606954610155906001600160a01b031681565b6040516001600160a01b039091168152602001610139565b61010d61017b366004610efc565b610339565b61010d6103a3565b61012f60675481565b6033546001600160a01b0316610155565b606854610155906001600160a01b031681565b61012f6101c3366004610efc565b6103e6565b61010d6101d6366004610f20565b6103f7565b61010d6101e9366004610f20565b6104ee565b606554610155906001600160a01b031681565b61010d61020f366004610efc565b610638565b61010d6106a9565b61012f61022a366004610efc565b6107bd565b6102376108f1565b60008251118015610249575080518251145b6102c05760405162461bcd60e51b815260206004820152603860248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201527f7175616c20616e642067726561746572207468616e20302e000000000000000060648201526084015b60405180910390fd5b60005b82518110156103345760008382815181106102e0576102e0610f62565b602002602001015190508282815181106102fc576102fc610f62565b6020908102919091018101516001600160a01b039092166000908152606690915260409020558061032c81610f8e565b9150506102c3565b505050565b6103416108f1565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6103ab6108f1565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016102b7565b60006103f18261094d565b92915050565b6033546001600160a01b03163314806104b657600061043d7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b0381163314806104b35760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b60648201526084016102b7565b50505b50606791909155606880546001600160a01b039283166001600160a01b03199182161790915560698054939092169216919091179055565b600054610100900460ff161580801561050e5750600054600160ff909116105b806105285750303b158015610528575060005460ff166001145b61058b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102b7565b6000805460ff1916600117905580156105ae576000805461ff0019166101001790555b6105b733610c68565b6067839055606880546001600160a01b038085166001600160a01b03199283161790925560698054928716929091169190911790558015610632576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6106406108f1565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146106fb5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016102b7565b600061070f6033546001600160a01b031690565b6065549091506001600160a01b031661072781610ca3565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610397565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190610fa9565b9050600061082f8261094d565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108959190610fc6565b60ff16905060128111156108c8576108ae601282610fe9565b6108b990600a6110e4565b6108c390836110f0565b6108e8565b6108d3816012610fe9565b6108de90600a6110e4565b6108e89083611112565b95945050505050565b6033546001600160a01b0316331461094b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b7565b565b6001600160a01b038116600090815260666020526040812054806109d95760405162461bcd60e51b815260206004820152603b60248201527f4e6f206f7261636c65207072696365206665656420666f756e6420666f72207460448201527f68697320756e6465726c79696e6720455243323020746f6b656e2e000000000060648201526084016102b7565b606754610b30576068546040516315d5220f60e31b81526001600160a01b039091166004820152600090339063aea9107890602401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611131565b90506000610a6c826ec097ce7bc90715b34b9f10000000006110f0565b6069546040516396834ad360e01b8152600481018690529192506000916001600160a01b03909116906396834ad390602401608060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf919061114a565b90506000816000015160070b1215610af8576000610b26565b80518290610b1c9067ffffffffffffffff166b204fce5e3e25026110000000611112565b610b2691906110f0565b9695505050505050565b6069546067546040516396834ad360e01b815260048101919091526000916001600160a01b0316906396834ad390602401608060405180830381865afa158015610b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba2919061114a565b5167ffffffffffffffff16905080610bbe575060009392505050565b6069546040516396834ad360e01b8152600481018490526000916001600160a01b0316906396834ad390602401608060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c919061114a565b5167ffffffffffffffff1690506fffffffffffffffffffffffffffffffff8216610c5e82670de0b6b3a7640000611112565b6108e891906110f0565b600054610100900460ff16610c8f5760405162461bcd60e51b81526004016102b7906111e1565b610c97610cf5565b610ca081610ca3565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610d1c5760405162461bcd60e51b81526004016102b7906111e1565b61094b600054610100900460ff16610d465760405162461bcd60e51b81526004016102b7906111e1565b61094b33610ca3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8e57610d8e610d4f565b604052919050565b600067ffffffffffffffff821115610db057610db0610d4f565b5060051b60200190565b6001600160a01b0381168114610ca057600080fd5b600082601f830112610de057600080fd5b81356020610df5610df083610d96565b610d65565b82815260059290921b84018101918181019086841115610e1457600080fd5b8286015b84811015610e2f5780358352918301918301610e18565b509695505050505050565b60008060408385031215610e4d57600080fd5b823567ffffffffffffffff80821115610e6557600080fd5b818501915085601f830112610e7957600080fd5b81356020610e89610df083610d96565b82815260059290921b84018101918181019089841115610ea857600080fd5b948201945b83861015610ecf578535610ec081610dba565b82529482019490820190610ead565b96505086013592505080821115610ee557600080fd5b50610ef285828601610dcf565b9150509250929050565b600060208284031215610f0e57600080fd5b8135610f1981610dba565b9392505050565b600080600060608486031215610f3557600080fd5b8335610f4081610dba565b9250602084013591506040840135610f5781610dba565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610fa257610fa2610f78565b5060010190565b600060208284031215610fbb57600080fd5b8151610f1981610dba565b600060208284031215610fd857600080fd5b815160ff81168114610f1957600080fd5b600082821015610ffb57610ffb610f78565b500390565b600181815b8085111561103b57816000190482111561102157611021610f78565b8085161561102e57918102915b93841c9390800290611005565b509250929050565b600082611052575060016103f1565b8161105f575060006103f1565b8160018114611075576002811461107f5761109b565b60019150506103f1565b60ff84111561109057611090610f78565b50506001821b6103f1565b5060208310610133831016604e8410600b84101617156110be575081810a6103f1565b6110c88383611000565b80600019048211156110dc576110dc610f78565b029392505050565b6000610f198383611043565b60008261110d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561112c5761112c610f78565b500290565b60006020828403121561114357600080fd5b5051919050565b60006080828403121561115c57600080fd5b6040516080810167ffffffffffffffff828210818311171561118057611180610d4f565b81604052845191508160070b821461119757600080fd5b90825260208401519080821682146111ae57600080fd5b5060208201526040830151600381900b81146111c957600080fd5b60408201526060928301519281019290925250919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "721:4051:258:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80639d23c81211610097578063e30c397811610066578063e30c3978146101ee578063f2fde38b14610201578063fc4d33f914610214578063fc57d4df1461021c57600080fd5b80639d23c812146101a2578063aea91078146101b5578063ca4737ca146101c8578063d26b3e6e146101db57600080fd5b80636e96dfd7116100d35780636e96dfd71461016d578063715018a61461018057806380f96bd1146101885780638da5cb5b1461019157600080fd5b806301e169e4146100fa578063336eb6ae1461010f57806367e406d514610142575b600080fd5b61010d610108366004610e3a565b61022f565b005b61012f61011d366004610efc565b60666020526000908152604090205481565b6040519081526020015b60405180910390f35b606954610155906001600160a01b031681565b6040516001600160a01b039091168152602001610139565b61010d61017b366004610efc565b610339565b61010d6103a3565b61012f60675481565b6033546001600160a01b0316610155565b606854610155906001600160a01b031681565b61012f6101c3366004610efc565b6103e6565b61010d6101d6366004610f20565b6103f7565b61010d6101e9366004610f20565b6104ee565b606554610155906001600160a01b031681565b61010d61020f366004610efc565b610638565b61010d6106a9565b61012f61022a366004610efc565b6107bd565b6102376108f1565b60008251118015610249575080518251145b6102c05760405162461bcd60e51b815260206004820152603860248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201527f7175616c20616e642067726561746572207468616e20302e000000000000000060648201526084015b60405180910390fd5b60005b82518110156103345760008382815181106102e0576102e0610f62565b602002602001015190508282815181106102fc576102fc610f62565b6020908102919091018101516001600160a01b039092166000908152606690915260409020558061032c81610f8e565b9150506102c3565b505050565b6103416108f1565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6103ab6108f1565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016102b7565b60006103f18261094d565b92915050565b6033546001600160a01b03163314806104b657600061043d7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b0381163314806104b35760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b60648201526084016102b7565b50505b50606791909155606880546001600160a01b039283166001600160a01b03199182161790915560698054939092169216919091179055565b600054610100900460ff161580801561050e5750600054600160ff909116105b806105285750303b158015610528575060005460ff166001145b61058b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102b7565b6000805460ff1916600117905580156105ae576000805461ff0019166101001790555b6105b733610c68565b6067839055606880546001600160a01b038085166001600160a01b03199283161790925560698054928716929091169190911790558015610632576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6106406108f1565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146106fb5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016102b7565b600061070f6033546001600160a01b031690565b6065549091506001600160a01b031661072781610ca3565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610397565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190610fa9565b9050600061082f8261094d565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108959190610fc6565b60ff16905060128111156108c8576108ae601282610fe9565b6108b990600a6110e4565b6108c390836110f0565b6108e8565b6108d3816012610fe9565b6108de90600a6110e4565b6108e89083611112565b95945050505050565b6033546001600160a01b0316331461094b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b7565b565b6001600160a01b038116600090815260666020526040812054806109d95760405162461bcd60e51b815260206004820152603b60248201527f4e6f206f7261636c65207072696365206665656420666f756e6420666f72207460448201527f68697320756e6465726c79696e6720455243323020746f6b656e2e000000000060648201526084016102b7565b606754610b30576068546040516315d5220f60e31b81526001600160a01b039091166004820152600090339063aea9107890602401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611131565b90506000610a6c826ec097ce7bc90715b34b9f10000000006110f0565b6069546040516396834ad360e01b8152600481018690529192506000916001600160a01b03909116906396834ad390602401608060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf919061114a565b90506000816000015160070b1215610af8576000610b26565b80518290610b1c9067ffffffffffffffff166b204fce5e3e25026110000000611112565b610b2691906110f0565b9695505050505050565b6069546067546040516396834ad360e01b815260048101919091526000916001600160a01b0316906396834ad390602401608060405180830381865afa158015610b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba2919061114a565b5167ffffffffffffffff16905080610bbe575060009392505050565b6069546040516396834ad360e01b8152600481018490526000916001600160a01b0316906396834ad390602401608060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c919061114a565b5167ffffffffffffffff1690506fffffffffffffffffffffffffffffffff8216610c5e82670de0b6b3a7640000611112565b6108e891906110f0565b600054610100900460ff16610c8f5760405162461bcd60e51b81526004016102b7906111e1565b610c97610cf5565b610ca081610ca3565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610d1c5760405162461bcd60e51b81526004016102b7906111e1565b61094b600054610100900460ff16610d465760405162461bcd60e51b81526004016102b7906111e1565b61094b33610ca3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8e57610d8e610d4f565b604052919050565b600067ffffffffffffffff821115610db057610db0610d4f565b5060051b60200190565b6001600160a01b0381168114610ca057600080fd5b600082601f830112610de057600080fd5b81356020610df5610df083610d96565b610d65565b82815260059290921b84018101918181019086841115610e1457600080fd5b8286015b84811015610e2f5780358352918301918301610e18565b509695505050505050565b60008060408385031215610e4d57600080fd5b823567ffffffffffffffff80821115610e6557600080fd5b818501915085601f830112610e7957600080fd5b81356020610e89610df083610d96565b82815260059290921b84018101918181019089841115610ea857600080fd5b948201945b83861015610ecf578535610ec081610dba565b82529482019490820190610ead565b96505086013592505080821115610ee557600080fd5b50610ef285828601610dcf565b9150509250929050565b600060208284031215610f0e57600080fd5b8135610f1981610dba565b9392505050565b600080600060608486031215610f3557600080fd5b8335610f4081610dba565b9250602084013591506040840135610f5781610dba565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610fa257610fa2610f78565b5060010190565b600060208284031215610fbb57600080fd5b8151610f1981610dba565b600060208284031215610fd857600080fd5b815160ff81168114610f1957600080fd5b600082821015610ffb57610ffb610f78565b500390565b600181815b8085111561103b57816000190482111561102157611021610f78565b8085161561102e57918102915b93841c9390800290611005565b509250929050565b600082611052575060016103f1565b8161105f575060006103f1565b8160018114611075576002811461107f5761109b565b60019150506103f1565b60ff84111561109057611090610f78565b50506001821b6103f1565b5060208310610133831016604e8410600b84101617156110be575081810a6103f1565b6110c88383611000565b80600019048211156110dc576110dc610f78565b029392505050565b6000610f198383611043565b60008261110d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561112c5761112c610f78565b500290565b60006020828403121561114357600080fd5b5051919050565b60006080828403121561115c57600080fd5b6040516080810167ffffffffffffffff828210818311171561118057611180610d4f565b81604052845191508160070b821461119757600080fd5b90825260208401519080821682146111ae57600080fd5b5060208201526040830151600381900b81146111c957600080fd5b60408201526060928301519281019290925250919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "721:4051:258:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2012:495;;;;;;:::i;:::-;;:::i;:::-;;864:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3035:25:486;;;3023:2;3008:18;864:47:258;;;;;;;;1284:17;;;;;-1:-1:-1;;;;;1284:17:258;;;;;;-1:-1:-1;;;;;3251:32:486;;;3233:51;;3221:2;3206:18;1284:17:258;3071:219:486;1602:386:134;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;978:36:258:-;;;;;;1441:85:436;1513:6;;-1:-1:-1;;;;;1513:6:436;1441:85;;1088:24:258;;;;;-1:-1:-1;;;;;1088:24:258;;;3857:112;;;;;;:::i;:::-;;:::i;1578:239::-;;;;;;:::i;:::-;;:::i;1306:268::-;;;;;;:::i;:::-;;:::i;530:27:134:-;;;;;-1:-1:-1;;;;;530:27:134;;;2839:155;;;;;;:::i;:::-;;:::i;2158:541::-;;;:::i;4246:524:258:-;;;;;;:::i;:::-;;:::i;2012:495::-;1334:13:436;:11;:13::i;:::-;2176:1:258::1;2155:11;:18;:22;:62;;;;;2203:7;:14;2181:11;:18;:36;2155:62;2140:149;;;::::0;-1:-1:-1;;;2140:149:258;;4617:2:486;2140:149:258::1;::::0;::::1;4599:21:486::0;4656:2;4636:18;;;4629:30;4695:34;4675:18;;;4668:62;4766:26;4746:18;;;4739:54;4810:19;;2140:149:258::1;;;;;;;;;2328:9;2323:180;2347:11;:18;2343:1;:22;2323:180;;;2380:18;2401:11;2413:1;2401:14;;;;;;;;:::i;:::-;;;;;;;2380:35;;2486:7;2494:1;2486:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;2459:24:258;;::::1;;::::0;;;:12:::1;:24:::0;;;;;;:37;2367:3;::::1;::::0;::::1;:::i;:::-;;;;2323:180;;;;2012:495:::0;;:::o;1602:386:134:-;1334:13:436;:11;:13::i;:::-;1758:12:134::1;::::0;;-1:-1:-1;;;;;1830:30:134;;::::1;-1:-1:-1::0;;;;;;1830:30:134;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;5456:34:486::0;;;5521:2;5506:18;;5499:43;;;;1934:49:134::1;::::0;5391:18:486;1934:49:134::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:436;:11;:13::i;:::-;2804:26:134::1;::::0;-1:-1:-1;;;2804:26:134;;5755:2:486;2804:26:134::1;::::0;::::1;5737:21:486::0;5794:2;5774:18;;;5767:30;-1:-1:-1;;;5813:18:486;;;5806:46;5869:18;;2804:26:134::1;5553:340:486::0;3857:112:258;3924:7;3946:18;3953:10;3946:6;:18::i;:::-;3939:25;3857:112;-1:-1:-1;;3857:112:258:o;1578:239::-;1513:6:436;;-1:-1:-1;;;;;1513:6:436;929:10:449;791:23:134;;820:183;;842:13;858:16;3090:66;3262:15;-1:-1:-1;;;;;3262:15:134;;2998:284;858:16;842:32;-1:-1:-1;;;;;;897:21:134;;929:10:449;897:21:134;;926:70;;;;-1:-1:-1;;;926:70:134;;6100:2:486;926:70:134;;;6082:21:486;6139:2;6119:18;;;6112:30;6178:34;6158:18;;;6151:62;-1:-1:-1;;;6229:18:486;;;6222:48;6287:19;;926:70:134;5898:414:486;926:70:134;834:169;;820:183;-1:-1:-1;1713:21:258::1;:42:::0;;;;1761:9:::1;:20:::0;;-1:-1:-1;;;;;1761:20:258;;::::1;-1:-1:-1::0;;;;;;1761:20:258;;::::1;;::::0;;;1787:4:::1;:25:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;1578:239::o;1306:268::-;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;6519:2:486;3314:201:439;;;6501:21:486;6558:2;6538:18;;;6531:30;6597:34;6577:18;;;6570:62;-1:-1:-1;;;6648:18:486;;;6641:44;6702:19;;3314:201:439;6317:410:486;3314:201:439;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;1434:30:258::1;1453:10;1434:18;:30::i;:::-;1470:21;:42:::0;;;1518:9:::1;:20:::0;;-1:-1:-1;;;;;1518:20:258;;::::1;-1:-1:-1::0;;;;;;1518:20:258;;::::1;;::::0;;;1544:4:::1;:25:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3636:99:439;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;6884:36:486;;3710:14:439;;6872:2:486;6857:18;3710:14:439;;;;;;;3636:99;3258:483;1306:268:258;;;:::o;2839:155:134:-;1334:13:436;:11;:13::i;:::-;2937:12:134::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:134;;::::1;5456:34:486::0;;5526:15;;;5521:2;5506:18;;5499:43;2921:39:134::1;::::0;5391:18:486;2921:39:134::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:134::1;-1:-1:-1::0;;;;;2966:23:134;;;::::1;::::0;;;::::1;::::0;;2839:155::o;2158:541::-;2285:12;;-1:-1:-1;;;;;2285:12:134;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:134;;7133:2:486;2263:60:134;;;7115:21:486;7172:2;7152:18;;;7145:30;-1:-1:-1;;;7191:18:486;;;7184:51;7252:18;;2263:60:134;6931:345:486;2263:60:134;2378:16;2397:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;2397:7:134;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:134;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:134;;;2605:32;;;-1:-1:-1;;;;;5474:15:486;;5456:34;;-1:-1:-1;5521:2:486;5506:18;;5499:43;2605:32:134;;5391:18:486;2605:32:134;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;5474:15:486;;;5456:34;;2681:12:134;;;5521:2:486;5506:18;;5499:43;2648:46:134;;5391:18:486;2648:46:134;5244:304:486;4246:524:258;4322:7;4373:18;4394:6;-1:-1:-1;;;;;4394:17:258;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4373:40;;4437:19;4459:18;4466:10;4459:6;:18::i;:::-;4437:40;;4515:26;4569:10;-1:-1:-1;;;;;4552:37:258;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4544:48;;4515:77;;4633:2;4611:18;:24;;:154;;4740:23;4761:2;4740:18;:23;:::i;:::-;4735:29;;:2;:29;:::i;:::-;4711:54;;4719:11;4711:54;:::i;:::-;4611:154;;;4675:23;4680:18;4675:2;:23;:::i;:::-;4670:29;;:2;:29;:::i;:::-;4646:54;;4654:11;4646:54;:::i;:::-;4598:167;4246:524;-1:-1:-1;;;;;4246:524:258:o;1599:130:436:-;1513:6;;-1:-1:-1;;;;;1513:6:436;929:10:449;1662:23:436;1654:68;;;;-1:-1:-1;;;1654:68:436;;9916:2:486;1654:68:436;;;9898:21:486;;;9935:18;;;9928:30;9994:34;9974:18;;;9967:62;10046:18;;1654:68:436;9714:356:486;1654:68:436;1599:130::o;2655:1103:258:-;-1:-1:-1;;;;;2786:24:258;;2714:7;2786:24;;;:12;:24;;;;;;2824:10;2816:82;;;;-1:-1:-1;;;2816:82:258;;10277:2:486;2816:82:258;;;10259:21:486;10316:2;10296:18;;;10289:30;10355:34;10335:18;;;10328:62;10426:29;10406:18;;;10399:57;10473:19;;2816:82:258;10075:423:486;2816:82:258;2909:21;;2905:849;;3052:9;;3018:44;;-1:-1:-1;;;3018:44:258;;-1:-1:-1;;;;;3052:9:258;;;3018:44;;;3233:51:486;2988:27:258;;3034:10;;3018:33;;3206:18:486;;3018:44:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2988:74;-1:-1:-1;3070:27:258;3100:26;2988:74;3100:4;:26;:::i;:::-;3211:4;;:25;;-1:-1:-1;;;3211:25:258;;;;;3035::486;;;3070:56:258;;-1:-1:-1;3170:38:258;;-1:-1:-1;;;;;3211:4:258;;;;:19;;3008:18:486;;3211:25:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3170:66;;3319:1;3296:13;:19;;;:24;;;;:107;;3402:1;3296:107;;;3339:19;;3379;;3324:43;;:36;;3363:4;3324:43;:::i;:::-;3323:76;;;;:::i;:::-;3281:122;2655:1103;-1:-1:-1;;;;;;2655:1103:258:o;2905:849::-;3469:4;;3489:21;;3469:42;;-1:-1:-1;;;3469:42:258;;;;;3035:25:486;;;;3424:27:258;;-1:-1:-1;;;;;3469:4:258;;:19;;3008:18:486;;3469:42:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;3454:65;;;-1:-1:-1;3531:24:258;3527:38;;-1:-1:-1;3564:1:258;;2655:1103;-1:-1:-1;;;2655:1103:258:o;3527:38::-;3612:4;;:25;;-1:-1:-1;;;3612:25:258;;;;;3035::486;;;3573:21:258;;-1:-1:-1;;;;;3612:4:258;;:19;;3008:18:486;;3612:25:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;3597:48;;;-1:-1:-1;3715:28:258;;;3682:29;3597:48;3707:4;3682:29;:::i;:::-;3681:62;;;;:::i;562:129:134:-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;638:16:134::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;:::-;562:129:::0;:::o;2673:187:436:-;2765:6;;;-1:-1:-1;;;;;2781:17:436;;;-1:-1:-1;;;;;;2781:17:436;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1065:26:436::1;5363:13:439::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1176:32:436::1;929:10:449::0;1176:18:436::1;:32::i;14:127:486:-:0;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:275;217:2;211:9;282:2;263:13;;-1:-1:-1;;259:27:486;247:40;;317:18;302:34;;338:22;;;299:62;296:88;;;364:18;;:::i;:::-;400:2;393:22;146:275;;-1:-1:-1;146:275:486:o;426:183::-;486:4;519:18;511:6;508:30;505:56;;;541:18;;:::i;:::-;-1:-1:-1;586:1:486;582:14;598:4;578:25;;426:183::o;614:131::-;-1:-1:-1;;;;;689:31:486;;679:42;;669:70;;735:1;732;725:12;750:662;804:5;857:3;850:4;842:6;838:17;834:27;824:55;;875:1;872;865:12;824:55;911:6;898:20;937:4;961:60;977:43;1017:2;977:43;:::i;:::-;961:60;:::i;:::-;1055:15;;;1141:1;1137:10;;;;1125:23;;1121:32;;;1086:12;;;;1165:15;;;1162:35;;;1193:1;1190;1183:12;1162:35;1229:2;1221:6;1217:15;1241:142;1257:6;1252:3;1249:15;1241:142;;;1323:17;;1311:30;;1361:12;;;;1274;;1241:142;;;-1:-1:-1;1401:5:486;750:662;-1:-1:-1;;;;;;750:662:486:o;1417:1215::-;1535:6;1543;1596:2;1584:9;1575:7;1571:23;1567:32;1564:52;;;1612:1;1609;1602:12;1564:52;1652:9;1639:23;1681:18;1722:2;1714:6;1711:14;1708:34;;;1738:1;1735;1728:12;1708:34;1776:6;1765:9;1761:22;1751:32;;1821:7;1814:4;1810:2;1806:13;1802:27;1792:55;;1843:1;1840;1833:12;1792:55;1879:2;1866:16;1901:4;1925:60;1941:43;1981:2;1941:43;:::i;1925:60::-;2019:15;;;2101:1;2097:10;;;;2089:19;;2085:28;;;2050:12;;;;2125:19;;;2122:39;;;2157:1;2154;2147:12;2122:39;2181:11;;;;2201:217;2217:6;2212:3;2209:15;2201:217;;;2297:3;2284:17;2314:31;2339:5;2314:31;:::i;:::-;2358:18;;2234:12;;;;2396;;;;2201:217;;;2437:5;-1:-1:-1;;2480:18:486;;2467:32;;-1:-1:-1;;2511:16:486;;;2508:36;;;2540:1;2537;2530:12;2508:36;;2563:63;2618:7;2607:8;2596:9;2592:24;2563:63;:::i;:::-;2553:73;;;1417:1215;;;;;:::o;2637:247::-;2696:6;2749:2;2737:9;2728:7;2724:23;2720:32;2717:52;;;2765:1;2762;2755:12;2717:52;2804:9;2791:23;2823:31;2848:5;2823:31;:::i;:::-;2873:5;2637:247;-1:-1:-1;;;2637:247:486:o;3685:456::-;3762:6;3770;3778;3831:2;3819:9;3810:7;3806:23;3802:32;3799:52;;;3847:1;3844;3837:12;3799:52;3886:9;3873:23;3905:31;3930:5;3905:31;:::i;:::-;3955:5;-1:-1:-1;4007:2:486;3992:18;;3979:32;;-1:-1:-1;4063:2:486;4048:18;;4035:32;4076:33;4035:32;4076:33;:::i;:::-;4128:7;4118:17;;;3685:456;;;;;:::o;4840:127::-;4901:10;4896:3;4892:20;4889:1;4882:31;4932:4;4929:1;4922:15;4956:4;4953:1;4946:15;4972:127;5033:10;5028:3;5024:20;5021:1;5014:31;5064:4;5061:1;5054:15;5088:4;5085:1;5078:15;5104:135;5143:3;-1:-1:-1;;5164:17:486;;5161:43;;;5184:18;;:::i;:::-;-1:-1:-1;5231:1:486;5220:13;;5104:135::o;7281:251::-;7351:6;7404:2;7392:9;7383:7;7379:23;7375:32;7372:52;;;7420:1;7417;7410:12;7372:52;7452:9;7446:16;7471:31;7496:5;7471:31;:::i;7537:273::-;7605:6;7658:2;7646:9;7637:7;7633:23;7629:32;7626:52;;;7674:1;7671;7664:12;7626:52;7706:9;7700:16;7756:4;7749:5;7745:16;7738:5;7735:27;7725:55;;7776:1;7773;7766:12;7815:125;7855:4;7883:1;7880;7877:8;7874:34;;;7888:18;;:::i;:::-;-1:-1:-1;7925:9:486;;7815:125::o;7945:422::-;8034:1;8077:5;8034:1;8091:270;8112:7;8102:8;8099:21;8091:270;;;8171:4;8167:1;8163:6;8159:17;8153:4;8150:27;8147:53;;;8180:18;;:::i;:::-;8230:7;8220:8;8216:22;8213:55;;;8250:16;;;;8213:55;8329:22;;;;8289:15;;;;8091:270;;;8095:3;7945:422;;;;;:::o;8372:806::-;8421:5;8451:8;8441:80;;-1:-1:-1;8492:1:486;8506:5;;8441:80;8540:4;8530:76;;-1:-1:-1;8577:1:486;8591:5;;8530:76;8622:4;8640:1;8635:59;;;;8708:1;8703:130;;;;8615:218;;8635:59;8665:1;8656:10;;8679:5;;;8703:130;8740:3;8730:8;8727:17;8724:43;;;8747:18;;:::i;:::-;-1:-1:-1;;8803:1:486;8789:16;;8818:5;;8615:218;;8917:2;8907:8;8904:16;8898:3;8892:4;8889:13;8885:36;8879:2;8869:8;8866:16;8861:2;8855:4;8852:12;8848:35;8845:77;8842:159;;;-1:-1:-1;8954:19:486;;;8986:5;;8842:159;9033:34;9058:8;9052:4;9033:34;:::i;:::-;9103:6;9099:1;9095:6;9091:19;9082:7;9079:32;9076:58;;;9114:18;;:::i;:::-;9152:20;;8372:806;-1:-1:-1;;;8372:806:486:o;9183:131::-;9243:5;9272:36;9299:8;9293:4;9272:36;:::i;9319:217::-;9359:1;9385;9375:132;;9429:10;9424:3;9420:20;9417:1;9410:31;9464:4;9461:1;9454:15;9492:4;9489:1;9482:15;9375:132;-1:-1:-1;9521:9:486;;9319:217::o;9541:168::-;9581:7;9647:1;9643;9639:6;9635:14;9632:1;9629:21;9624:1;9617:9;9610:17;9606:45;9603:71;;;9654:18;;:::i;:::-;-1:-1:-1;9694:9:486;;9541:168::o;10503:184::-;10573:6;10626:2;10614:9;10605:7;10601:23;10597:32;10594:52;;;10642:1;10639;10632:12;10594:52;-1:-1:-1;10665:16:486;;10503:184;-1:-1:-1;10503:184:486:o;10692:937::-;10787:6;10840:3;10828:9;10819:7;10815:23;10811:33;10808:53;;;10857:1;10854;10847:12;10808:53;10890:2;10884:9;10932:3;10924:6;10920:16;10955:18;11023:6;11011:10;11008:22;11003:2;10991:10;10988:18;10985:46;10982:72;;;11034:18;;:::i;:::-;11074:10;11070:2;11063:22;11113:9;11107:16;11094:29;;11166:5;11163:1;11152:20;11145:5;11142:31;11132:59;;11187:1;11184;11177:12;11132:59;11200:21;;;11266:2;11251:18;;11245:25;;11301:16;;;11289:29;;11279:57;;11332:1;11329;11322:12;11279:57;-1:-1:-1;11364:2:486;11352:15;;11345:32;11422:2;11407:18;;11401:25;11468:1;11457:22;;;11445:35;;11435:63;;11494:1;11491;11484:12;11435:63;11526:2;11514:15;;11507:32;11593:2;11578:18;;;11572:25;11555:15;;;11548:50;;;;-1:-1:-1;11518:6:486;10692:937;-1:-1:-1;10692:937:486:o;11634:407::-;11836:2;11818:21;;;11875:2;11855:18;;;11848:30;11914:34;11909:2;11894:18;;11887:62;-1:-1:-1;;;11980:2:486;11965:18;;11958:41;12031:3;12016:19;;11634:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "NATIVE_TOKEN_USD_FEED()": "80f96bd1", + "PYTH()": "67e406d5", + "USD_TOKEN()": "9d23c812", + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "getUnderlyingPrice(address)": "fc57d4df", + "initialize(address,bytes32,address)": "d26b3e6e", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "price(address)": "aea91078", + "priceFeedIds(address)": "336eb6ae", + "reinitialize(address,bytes32,address)": "ca4737ca", + "renounceOwnership()": "715018a6", + "setPriceFeeds(address[],bytes32[])": "01e169e4", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/PythPriceOracle_Proxy.json b/packages/sdk/deployments/mode/PythPriceOracle_Proxy.json new file mode 100644 index 0000000000..7707328167 --- /dev/null +++ b/packages/sdk/deployments/mode/PythPriceOracle_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "transactionIndex": 1, + "gasUsed": "840112", + "logsBloom": "0x00000000000000000000000010000000400000000000800000800000000200000000000000000000000000000000008000000000100000000000004000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000800000001000000000000000400000000000000000000000000000000000000000004080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd", + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000013fd2701c3017bcc375ad14dd8433c6d7a441794" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + }, + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + }, + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + }, + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + }, + { + "transactionIndex": 1, + "blockNumber": 2097582, + "transactionHash": "0x329db83abc4615d9f9453155b5be593a1e450b875b9800b93ff19b6c7a0a0517", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x72755e70c3adcb4ab391e39db8412299b6cd07bb092dcb4961488a85b37c44fd" + } + ], + "blockNumber": 2097582, + "cumulativeGasUsed": "887025", + "status": 1, + "byzantium": true + }, + "args": [ + "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xd26b3e6e000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace000000000000000000000000d988097fb8612cc24eec14542bc03424c656005f" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/SimplePriceOracle.json b/packages/sdk/deployments/mode/SimplePriceOracle.json new file mode 100644 index 0000000000..78a3511f65 --- /dev/null +++ b/packages/sdk/deployments/mode/SimplePriceOracle.json @@ -0,0 +1,547 @@ +{ + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousPriceMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "requestedPriceMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPriceMantissa", + "type": "uint256" + } + ], + "name": "PricePosted", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "assetPrices", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "setDirectPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "underlyingPriceMantissa", + "type": "uint256" + } + ], + "name": "setUnderlyingPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "transactionIndex": 1, + "gasUsed": "771780", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100200000000000000000200000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000040000000c00000000000000000000000100000000400000000000080000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000080000000000000000000000000000000000000", + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8", + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000cd4d7c8e2ba627684a9b18f7fe88239341d3ba5c" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + }, + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + }, + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + }, + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + }, + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + } + ], + "blockNumber": 2097492, + "cumulativeGasUsed": "818693", + "status": 1, + "byzantium": true + }, + "args": [ + "0xcD4D7c8e2bA627684a9B18F7fe88239341D3ba5c", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0x8129fc1c" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [] + }, + "implementation": "0xcD4D7c8e2bA627684a9B18F7fe88239341D3ba5c", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/SimplePriceOracle_Implementation.json b/packages/sdk/deployments/mode/SimplePriceOracle_Implementation.json new file mode 100644 index 0000000000..ef59ef75ad --- /dev/null +++ b/packages/sdk/deployments/mode/SimplePriceOracle_Implementation.json @@ -0,0 +1,901 @@ +{ + "address": "0xcD4D7c8e2bA627684a9B18F7fe88239341D3ba5c", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "NewOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldPendingOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "NewPendingOwner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousPriceMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "requestedPriceMantissa", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPriceMantissa", + "type": "uint256" + } + ], + "name": "PricePosted", + "type": "event" + }, + { + "inputs": [], + "name": "_acceptOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "name": "_setPendingOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "assetPrices", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "setDirectPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "underlyingPriceMantissa", + "type": "uint256" + } + ], + "name": "setUnderlyingPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xf77d0174182ac3dd7b4ec0f4f22e790246d25c070327f7f3e4e7e055b5b9263c", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xcD4D7c8e2bA627684a9B18F7fe88239341D3ba5c", + "transactionIndex": 1, + "gasUsed": "784108", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x10cf6e5c6eef3a7dd3bdafd461576d267c9e987ef743a39b2e25874ab8aac4e7", + "transactionHash": "0xf77d0174182ac3dd7b4ec0f4f22e790246d25c070327f7f3e4e7e055b5b9263c", + "logs": [], + "blockNumber": 2097488, + "cumulativeGasUsed": "831021", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "previousPriceMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "requestedPriceMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newPriceMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "PricePosted", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "assetPrices", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setDirectPrice" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "underlyingPriceMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setUnderlyingPrice" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "getUnderlyingPrice(address)": { + "params": { + "cToken": "The cToken to get the underlying price of" + }, + "returns": { + "_0": "The underlying asset price mantissa (scaled by 1e18). Zero means the price is unavailable." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "price(address)": { + "params": { + "underlying": "The underlying asset to get the price of." + }, + "returns": { + "_0": "The underlying asset price in ETH as a mantissa (scaled by 1e18). Zero means the price is unavailable." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "getUnderlyingPrice(address)": { + "notice": "Get the underlying price of a cToken asset" + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + }, + "price(address)": { + "notice": "Get the price of an underlying asset." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/oracles/default/SimplePriceOracle.sol": "SimplePriceOracle" + }, + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xe9fb6da8159c644e6387cccaef1da0c48f2b5e9a585ab145c700df3b9411c531", + "urls": [ + "bzz-raw://ac514f91278e6162f960a72f9104d8ce9eca3b4517f501d557270464a7bb06f0", + "dweb:/ipfs/QmQ59Mr6Qchg8SbcnGQPw7yVphT3BoihXZHJXdXP1U8JcM" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0x890c596f841f9078cc1f2ae0469fd6a6ba514c8c6a8b4ee42dc05ba3d5c4cced", + "urls": [ + "bzz-raw://49486c1c0083ea428d8ea8d458b61858c5e31e3516fc8b1e6655e330deb907c5", + "dweb:/ipfs/QmfPY3uAggTTrCuyDUJwoW5mSSmf3AnPcM7in4yNQvH1cY" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/SimplePriceOracle.sol": { + "keccak256": "0xdbcea6c06314c3deffcf383629f85507d16bd7995798787ffe220fe215ca8c41", + "urls": [ + "bzz-raw://382a82bd1d66c4ffb6c3325410133a3a62198b4ac6be302861eb525ad1faf554", + "dweb:/ipfs/QmSNRPAp2PZCYcGYqcMgfuXBHB9rzmpzcw2xZiseGjN8ps" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50610d39806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b14610140578063aea91078146100e1578063e30c397814610165578063f2fde38b14610178578063fc4d33f91461018b578063fc57d4df1461019357600080fd5b806309a8acb0146100b9578063127ffda0146100ce5780635e9a523c146100e15780636e96dfd71461011d578063715018a6146101305780638129fc1c14610138575b600080fd5b6100cc6100c73660046109e4565b6101a6565b005b6100cc6100dc3660046109e4565b610229565b61010a6100ef366004610a10565b6001600160a01b031660009081526066602052604090205490565b6040519081526020015b60405180910390f35b6100cc61012b366004610a10565b610312565b6100cc61037c565b6100cc6103c4565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610114565b60655461014d906001600160a01b031681565b6100cc610186366004610a10565b6104d6565b6100cc610547565b61010a6101a1366004610a10565b61065b565b6101ae610839565b6001600160a01b038216600081815260666020908152604091829020548251938452908301528101829052606081018290527fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79060800160405180910390a16001600160a01b03909116600090815260666020526040902055565b610231610839565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610a34565b6001600160a01b038116600081815260666020908152604091829020548251938452908301528101849052606081018490529091507fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79060800160405180910390a16001600160a01b031660009081526066602052604090205550565b61031a610839565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b610384610839565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b600054610100900460ff16158080156103e45750600054600160ff909116105b806103fe5750303b1580156103fe575060005460ff166001145b6104615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103bb565b6000805460ff191660011790558015610484576000805461ff0019166101001790555b61048d33610895565b80156104d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6104de610839565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146105995760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016103bb565b60006105ad6033546001600160a01b031690565b6065549091506001600160a01b03166105c5816108c9565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610370565b60006106e8826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c69190810190610a97565b604051806040016040528060048152602001630c68aa8960e31b81525061091b565b156106fc5750670de0b6b3a7640000919050565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610a34565b6001600160a01b038116600081815260666020908152604080832054815163313ce56760e01b815291519596509492939263313ce567926004808401939192918290030181865afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd9190610b44565b60ff1690506012811115610810576107f6601282610b7d565b61080190600a610c78565b61080b9083610c84565b610830565b61081b816012610b7d565b61082690600a610c78565b6108309083610ca6565b95945050505050565b6033546001600160a01b031633146108935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bb565b565b600054610100900460ff166108bc5760405162461bcd60e51b81526004016103bb90610cc5565b6108c4610975565b6104d3815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160405160200161092e9190610d10565b60405160208183030381529060405280519060200120836040516020016109559190610d10565b604051602081830303815290604052805190602001201490505b92915050565b600054610100900460ff1661099c5760405162461bcd60e51b81526004016103bb90610cc5565b610893600054610100900460ff166109c65760405162461bcd60e51b81526004016103bb90610cc5565b610893336108c9565b6001600160a01b03811681146104d357600080fd5b600080604083850312156109f757600080fd5b8235610a02816109cf565b946020939093013593505050565b600060208284031215610a2257600080fd5b8135610a2d816109cf565b9392505050565b600060208284031215610a4657600080fd5b8151610a2d816109cf565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610a82578181015183820152602001610a6a565b83811115610a91576000848401525b50505050565b600060208284031215610aa957600080fd5b815167ffffffffffffffff80821115610ac157600080fd5b818401915084601f830112610ad557600080fd5b815181811115610ae757610ae7610a51565b604051601f8201601f19908116603f01168101908382118183101715610b0f57610b0f610a51565b81604052828152876020848701011115610b2857600080fd5b610b39836020830160208801610a67565b979650505050505050565b600060208284031215610b5657600080fd5b815160ff81168114610a2d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610b8f57610b8f610b67565b500390565b600181815b80851115610bcf578160001904821115610bb557610bb5610b67565b80851615610bc257918102915b93841c9390800290610b99565b509250929050565b600082610be65750600161096f565b81610bf35750600061096f565b8160018114610c095760028114610c1357610c2f565b600191505061096f565b60ff841115610c2457610c24610b67565b50506001821b61096f565b5060208310610133831016604e8410600b8410161715610c52575081810a61096f565b610c5c8383610b94565b8060001904821115610c7057610c70610b67565b029392505050565b6000610a2d8383610bd7565b600082610ca157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610cc057610cc0610b67565b500290565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251610d22818460208701610a67565b919091019291505056fea164736f6c634300080a000a", + "sourceMap": "262:1831:261:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b14610140578063aea91078146100e1578063e30c397814610165578063f2fde38b14610178578063fc4d33f91461018b578063fc57d4df1461019357600080fd5b806309a8acb0146100b9578063127ffda0146100ce5780635e9a523c146100e15780636e96dfd71461011d578063715018a6146101305780638129fc1c14610138575b600080fd5b6100cc6100c73660046109e4565b6101a6565b005b6100cc6100dc3660046109e4565b610229565b61010a6100ef366004610a10565b6001600160a01b031660009081526066602052604090205490565b6040519081526020015b60405180910390f35b6100cc61012b366004610a10565b610312565b6100cc61037c565b6100cc6103c4565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610114565b60655461014d906001600160a01b031681565b6100cc610186366004610a10565b6104d6565b6100cc610547565b61010a6101a1366004610a10565b61065b565b6101ae610839565b6001600160a01b038216600081815260666020908152604091829020548251938452908301528101829052606081018290527fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79060800160405180910390a16001600160a01b03909116600090815260666020526040902055565b610231610839565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610a34565b6001600160a01b038116600081815260666020908152604091829020548251938452908301528101849052606081018490529091507fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79060800160405180910390a16001600160a01b031660009081526066602052604090205550565b61031a610839565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b610384610839565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b600054610100900460ff16158080156103e45750600054600160ff909116105b806103fe5750303b1580156103fe575060005460ff166001145b6104615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103bb565b6000805460ff191660011790558015610484576000805461ff0019166101001790555b61048d33610895565b80156104d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6104de610839565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146105995760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016103bb565b60006105ad6033546001600160a01b031690565b6065549091506001600160a01b03166105c5816108c9565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610370565b60006106e8826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c69190810190610a97565b604051806040016040528060048152602001630c68aa8960e31b81525061091b565b156106fc5750670de0b6b3a7640000919050565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610a34565b6001600160a01b038116600081815260666020908152604080832054815163313ce56760e01b815291519596509492939263313ce567926004808401939192918290030181865afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd9190610b44565b60ff1690506012811115610810576107f6601282610b7d565b61080190600a610c78565b61080b9083610c84565b610830565b61081b816012610b7d565b61082690600a610c78565b6108309083610ca6565b95945050505050565b6033546001600160a01b031633146108935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bb565b565b600054610100900460ff166108bc5760405162461bcd60e51b81526004016103bb90610cc5565b6108c4610975565b6104d3815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160405160200161092e9190610d10565b60405160208183030381529060405280519060200120836040516020016109559190610d10565b604051602081830303815290604052805190602001201490505b92915050565b600054610100900460ff1661099c5760405162461bcd60e51b81526004016103bb90610cc5565b610893600054610100900460ff166109c65760405162461bcd60e51b81526004016103bb90610cc5565b610893336108c9565b6001600160a01b03811681146104d357600080fd5b600080604083850312156109f757600080fd5b8235610a02816109cf565b946020939093013593505050565b600060208284031215610a2257600080fd5b8135610a2d816109cf565b9392505050565b600060208284031215610a4657600080fd5b8151610a2d816109cf565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610a82578181015183820152602001610a6a565b83811115610a91576000848401525b50505050565b600060208284031215610aa957600080fd5b815167ffffffffffffffff80821115610ac157600080fd5b818401915084601f830112610ad557600080fd5b815181811115610ae757610ae7610a51565b604051601f8201601f19908116603f01168101908382118183101715610b0f57610b0f610a51565b81604052828152876020848701011115610b2857600080fd5b610b39836020830160208801610a67565b979650505050505050565b600060208284031215610b5657600080fd5b815160ff81168114610a2d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610b8f57610b8f610b67565b500390565b600181815b80851115610bcf578160001904821115610bb557610bb5610b67565b80851615610bc257918102915b93841c9390800290610b99565b509250929050565b600082610be65750600161096f565b81610bf35750600061096f565b8160018114610c095760028114610c1357610c2f565b600191505061096f565b60ff841115610c2457610c24610b67565b50506001821b61096f565b5060208310610133831016604e8410600b8410161715610c52575081810a61096f565b610c5c8383610b94565b8060001904821115610c7057610c70610b67565b029392505050565b6000610a2d8383610bd7565b600082610ca157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610cc057610cc0610b67565b500290565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251610d22818460208701610a67565b919091019291505056fea164736f6c634300080a000a", + "sourceMap": "262:1831:261:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1469:165;;;;;;:::i;:::-;;:::i;:::-;;1168:297;;;;;;:::i;:::-;;:::i;1813:99::-;;;;;;:::i;:::-;-1:-1:-1;;;;;1894:13:261;1872:7;1894:13;;;:6;:13;;;;;;;1813:99;;;;1205:25:486;;;1193:2;1178:18;1813:99:261;;;;;;;;1602:386:134;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;520:82:261:-;;;:::i;1441:85:436:-;1513:6;;-1:-1:-1;;;;;1513:6:436;1441:85;;;-1:-1:-1;;;;;1405:32:486;;;1387:51;;1375:2;1360:18;1441:85:436;1241:203:486;530:27:134;;;;;-1:-1:-1;;;;;530:27:134;;;2839:155;;;;;;:::i;:::-;;:::i;2158:541::-;;;:::i;606:558:261:-;;;;;;:::i;:::-;;:::i;1469:165::-;1334:13:436;:11;:13::i;:::-;-1:-1:-1;;;;;1571:13:261;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;;;1552:49;;1949:51:486;;;2016:18;;;2009:34;2059:18;;2052:34;;;2117:2;2102:18;;2095:34;;;1552:49:261::1;::::0;1936:3:486;1921:19;1552:49:261::1;;;;;;;-1:-1:-1::0;;;;;1607:13:261;;::::1;;::::0;;;:6:::1;:13;::::0;;;;:22;1469:165::o;1168:297::-;1334:13:436;:11;:13::i;:::-;1268::261::1;1300:6;-1:-1:-1::0;;;;;1284:35:261::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1351:13:261;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;;;1332:83;;1949:51:486;;;2016:18;;;2009:34;2059:18;;2052:34;;;2117:2;2102:18;;2095:34;;;1351:13:261;;-1:-1:-1;1332:83:261::1;::::0;1936:3:486;1921:19;1332:83:261::1;;;;;;;-1:-1:-1::0;;;;;1421:13:261::1;;::::0;;;:6:::1;:13;::::0;;;;:39;-1:-1:-1;1168:297:261:o;1602:386:134:-;1334:13:436;:11;:13::i;:::-;1758:12:134::1;::::0;;-1:-1:-1;;;;;1830:30:134;;::::1;-1:-1:-1::0;;;;;;1830:30:134;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;2608:34:486::0;;;2673:2;2658:18;;2651:43;;;;1934:49:134::1;::::0;2543:18:486;1934:49:134::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:436;:11;:13::i;:::-;2804:26:134::1;::::0;-1:-1:-1;;;2804:26:134;;2907:2:486;2804:26:134::1;::::0;::::1;2889:21:486::0;2946:2;2926:18;;;2919:30;-1:-1:-1;;;2965:18:486;;;2958:46;3021:18;;2804:26:134::1;;;;;;;;520:82:261::0;3268:19:439;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:439;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:439;1476:19:448;:23;;;3376:66:439;;-1:-1:-1;3425:12:439;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:439;;3252:2:486;3314:201:439;;;3234:21:486;3291:2;3271:18;;;3264:30;3330:34;3310:18;;;3303:62;-1:-1:-1;;;3381:18:486;;;3374:44;3435:19;;3314:201:439;3050:410:486;3314:201:439;3525:12;:16;;-1:-1:-1;;3525:16:439;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:439;;;;;3551:65;567:30:261::1;586:10;567:18;:30::i;:::-;3640:14:439::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:439;;;3710:14;;-1:-1:-1;3617:36:486;;3710:14:439;;3605:2:486;3590:18;3710:14:439;;;;;;;3636:99;3258:483;520:82:261:o;2839:155:134:-;1334:13:436;:11;:13::i;:::-;2937:12:134::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:134;;::::1;2608:34:486::0;;2678:15;;;2673:2;2658:18;;2651:43;2921:39:134::1;::::0;2543:18:486;2921:39:134::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:134::1;-1:-1:-1::0;;;;;2966:23:134;;;::::1;::::0;;;::::1;::::0;;2839:155::o;2158:541::-;2285:12;;-1:-1:-1;;;;;2285:12:134;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:134;;3866:2:486;2263:60:134;;;3848:21:486;3905:2;3885:18;;;3878:30;-1:-1:-1;;;3924:18:486;;;3917:51;3985:18;;2263:60:134;3664:345:486;2263:60:134;2378:16;2397:7;1513:6:436;;-1:-1:-1;;;;;1513:6:436;;1441:85;2397:7:134;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:134;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:134;;;2605:32;;;-1:-1:-1;;;;;2626:15:486;;2608:34;;-1:-1:-1;2673:2:486;2658:18;;2651:43;2605:32:134;;2543:18:486;2605:32:134;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;2626:15:486;;;2608:34;;2681:12:134;;;2673:2:486;2658:18;;2651:43;2648:46:134;;2543:18:486;2648:46:134;2396:304:486;606:558:261;680:7;699:39;714:6;-1:-1:-1;;;;;714:13:261;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;714:15:261;;;;;;;;;;;;:::i;:::-;699:39;;;;;;;;;;;;;-1:-1:-1;;;699:39:261;;;:14;:39::i;:::-;695:465;;;-1:-1:-1;755:4:261;;606:558;-1:-1:-1;606:558:261:o;695:465::-;780:18;817:6;-1:-1:-1;;;;;801:35:261;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;868:18:261;;846:19;868:18;;;:6;:18;;;;;;;;;932:39;;-1:-1:-1;;;932:39:261;;;;780:58;;-1:-1:-1;868:18:261;846:19;;868:18;932:37;;:39;;;;;868:18;;932:39;;;;;;868:18;932:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;924:48;;895:77;;1017:2;995:18;:24;;:158;;1128:23;1149:2;1128:18;:23;:::i;:::-;1123:29;;:2;:29;:::i;:::-;1099:54;;1107:11;1099:54;:::i;:::-;995:158;;;1061:23;1066:18;1061:2;:23;:::i;:::-;1056:29;;:2;:29;:::i;:::-;1032:54;;1040:11;1032:54;:::i;:::-;980:173;606:558;-1:-1:-1;;;;;606:558:261:o;1599:130:436:-;1513:6;;-1:-1:-1;;;;;1513:6:436;929:10:449;1662:23:436;1654:68;;;;-1:-1:-1;;;1654:68:436;;7809:2:486;1654:68:436;;;7791:21:486;;;7828:18;;;7821:30;7887:34;7867:18;;;7860:62;7939:18;;1654:68:436;7607:356:486;1654:68:436;1599:130::o;562:129:134:-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;638:16:134::1;:14;:16::i;:::-;660:26;679:6;2673:187:436::0;2765:6;;;-1:-1:-1;;;;;2781:17:436;;;-1:-1:-1;;;;;;2781:17:436;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1916:175:261:-;1997:4;2081:1;2063:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;2053:32;;;;;;2045:1;2027:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;2017:32;;;;;;:68;2009:77;;1916:175;;;;;:::o;1003:95:436:-;5363:13:439;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1065:26:436::1;5363:13:439::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:439;;;;;;;:::i;:::-;1176:32:436::1;929:10:449::0;1176:18:436::1;:32::i;14:131:486:-:0;-1:-1:-1;;;;;89:31:486;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:486:o;807:247::-;866:6;919:2;907:9;898:7;894:23;890:32;887:52;;;935:1;932;925:12;887:52;974:9;961:23;993:31;1018:5;993:31;:::i;:::-;1043:5;807:247;-1:-1:-1;;;807:247:486:o;2140:251::-;2210:6;2263:2;2251:9;2242:7;2238:23;2234:32;2231:52;;;2279:1;2276;2269:12;2231:52;2311:9;2305:16;2330:31;2355:5;2330:31;:::i;4014:127::-;4075:10;4070:3;4066:20;4063:1;4056:31;4106:4;4103:1;4096:15;4130:4;4127:1;4120:15;4146:258;4218:1;4228:113;4242:6;4239:1;4236:13;4228:113;;;4318:11;;;4312:18;4299:11;;;4292:39;4264:2;4257:10;4228:113;;;4359:6;4356:1;4353:13;4350:48;;;4394:1;4385:6;4380:3;4376:16;4369:27;4350:48;;4146:258;;;:::o;4409:884::-;4489:6;4542:2;4530:9;4521:7;4517:23;4513:32;4510:52;;;4558:1;4555;4548:12;4510:52;4591:9;4585:16;4620:18;4661:2;4653:6;4650:14;4647:34;;;4677:1;4674;4667:12;4647:34;4715:6;4704:9;4700:22;4690:32;;4760:7;4753:4;4749:2;4745:13;4741:27;4731:55;;4782:1;4779;4772:12;4731:55;4811:2;4805:9;4833:2;4829;4826:10;4823:36;;;4839:18;;:::i;:::-;4914:2;4908:9;4882:2;4968:13;;-1:-1:-1;;4964:22:486;;;4988:2;4960:31;4956:40;4944:53;;;5012:18;;;5032:22;;;5009:46;5006:72;;;5058:18;;:::i;:::-;5098:10;5094:2;5087:22;5133:2;5125:6;5118:18;5173:7;5168:2;5163;5159;5155:11;5151:20;5148:33;5145:53;;;5194:1;5191;5184:12;5145:53;5207:55;5259:2;5254;5246:6;5242:15;5237:2;5233;5229:11;5207:55;:::i;:::-;5281:6;4409:884;-1:-1:-1;;;;;;;4409:884:486:o;5298:273::-;5366:6;5419:2;5407:9;5398:7;5394:23;5390:32;5387:52;;;5435:1;5432;5425:12;5387:52;5467:9;5461:16;5517:4;5510:5;5506:16;5499:5;5496:27;5486:55;;5537:1;5534;5527:12;5576:127;5637:10;5632:3;5628:20;5625:1;5618:31;5668:4;5665:1;5658:15;5692:4;5689:1;5682:15;5708:125;5748:4;5776:1;5773;5770:8;5767:34;;;5781:18;;:::i;:::-;-1:-1:-1;5818:9:486;;5708:125::o;5838:422::-;5927:1;5970:5;5927:1;5984:270;6005:7;5995:8;5992:21;5984:270;;;6064:4;6060:1;6056:6;6052:17;6046:4;6043:27;6040:53;;;6073:18;;:::i;:::-;6123:7;6113:8;6109:22;6106:55;;;6143:16;;;;6106:55;6222:22;;;;6182:15;;;;5984:270;;;5988:3;5838:422;;;;;:::o;6265:806::-;6314:5;6344:8;6334:80;;-1:-1:-1;6385:1:486;6399:5;;6334:80;6433:4;6423:76;;-1:-1:-1;6470:1:486;6484:5;;6423:76;6515:4;6533:1;6528:59;;;;6601:1;6596:130;;;;6508:218;;6528:59;6558:1;6549:10;;6572:5;;;6596:130;6633:3;6623:8;6620:17;6617:43;;;6640:18;;:::i;:::-;-1:-1:-1;;6696:1:486;6682:16;;6711:5;;6508:218;;6810:2;6800:8;6797:16;6791:3;6785:4;6782:13;6778:36;6772:2;6762:8;6759:16;6754:2;6748:4;6745:12;6741:35;6738:77;6735:159;;;-1:-1:-1;6847:19:486;;;6879:5;;6735:159;6926:34;6951:8;6945:4;6926:34;:::i;:::-;6996:6;6992:1;6988:6;6984:19;6975:7;6972:32;6969:58;;;7007:18;;:::i;:::-;7045:20;;6265:806;-1:-1:-1;;;6265:806:486:o;7076:131::-;7136:5;7165:36;7192:8;7186:4;7165:36;:::i;7212:217::-;7252:1;7278;7268:132;;7322:10;7317:3;7313:20;7310:1;7303:31;7357:4;7354:1;7347:15;7385:4;7382:1;7375:15;7268:132;-1:-1:-1;7414:9:486;;7212:217::o;7434:168::-;7474:7;7540:1;7536;7532:6;7528:14;7525:1;7522:21;7517:1;7510:9;7503:17;7499:45;7496:71;;;7547:18;;:::i;:::-;-1:-1:-1;7587:9:486;;7434:168::o;7968:407::-;8170:2;8152:21;;;8209:2;8189:18;;;8182:30;8248:34;8243:2;8228:18;;8221:62;-1:-1:-1;;;8314:2:486;8299:18;;8292:41;8365:3;8350:19;;7968:407::o;8380:276::-;8511:3;8549:6;8543:13;8565:53;8611:6;8606:3;8599:4;8591:6;8587:17;8565:53;:::i;:::-;8634:16;;;;;8380:276;-1:-1:-1;;8380:276:486:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "assetPrices(address)": "5e9a523c", + "getUnderlyingPrice(address)": "fc57d4df", + "initialize()": "8129fc1c", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "price(address)": "aea91078", + "renounceOwnership()": "715018a6", + "setDirectPrice(address,uint256)": "09a8acb0", + "setUnderlyingPrice(address,uint256)": "127ffda0", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/SimplePriceOracle_Proxy.json b/packages/sdk/deployments/mode/SimplePriceOracle_Proxy.json new file mode 100644 index 0000000000..a45bb9ad00 --- /dev/null +++ b/packages/sdk/deployments/mode/SimplePriceOracle_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "transactionIndex": 1, + "gasUsed": "771780", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100200000000000000000200000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000040000000c00000000000000000000000100000000400000000000080000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000080000000000000000000000000000000000000", + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8", + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000cd4d7c8e2ba627684a9b18f7fe88239341d3ba5c" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + }, + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + }, + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + }, + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + }, + { + "transactionIndex": 1, + "blockNumber": 2097492, + "transactionHash": "0xafccfe609a0d983c8f6a360aea8da346ff5d86fb9c8377ec1b89d0cfcf7c9e97", + "address": "0x5f0369AA93f36cA6a8B5ed7aAc47bf9e76086D03", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000985a323a1ccca8cd5fb8935590ee33fbcfe849d0", + "logIndex": 4, + "blockHash": "0x012401a51cb6b8a1ff6aac3dd602f0c5236cd1f29c1c6c4b307f815e52c9c1b8" + } + ], + "blockNumber": 2097492, + "cumulativeGasUsed": "818693", + "status": 1, + "byzantium": true + }, + "args": [ + "0xcD4D7c8e2bA627684a9B18F7fe88239341D3ba5c", + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0x8129fc1c" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/mode/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/packages/sdk/deployments/mode/solcInputs/0e89febeebc7444140de8e67c9067d2c.json new file mode 100644 index 0000000000..6eb5ed905b --- /dev/null +++ b/packages/sdk/deployments/mode/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -0,0 +1,80 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/packages/sdk/hardhat.config.ts b/packages/sdk/hardhat.config.ts index 596ee0ac89..65a7377689 100644 --- a/packages/sdk/hardhat.config.ts +++ b/packages/sdk/hardhat.config.ts @@ -171,6 +171,12 @@ const config: HardhatUserConfig = { url: OVERRIDE_RPC_URL || `https://zkevm-rpc.com`, accounts: { mnemonic }, chainId: 1101 + }, + mode: { + url: OVERRIDE_RPC_URL || `https://mainnet.mode.network/`, + accounts: { mnemonic }, + chainId: 34443, + gasPrice: 101 } } }; diff --git a/packages/sdk/lib/contracts b/packages/sdk/lib/contracts index b19aa43739..ed9f75343a 160000 --- a/packages/sdk/lib/contracts +++ b/packages/sdk/lib/contracts @@ -1 +1 @@ -Subproject commit b19aa43739f893843e89072bcda12e730e275ca9 +Subproject commit ed9f75343a3e84355d35f4980830290f3412591a diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 0ef5b50739..75acbcb555 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -30,13 +30,14 @@ "test:bsc": "SIMULATION=true FORK_RPC_URL=${FORK_RPC_URL} FORK_CHAIN_ID=56 hardhat test --no-compile", "test:forge": "cd lib/contracts && forge test", "export": "hardhat export --export-all ./deployments.json", - "export:all": "npm run export:bsc && npm run export:polygon && npm run export:neon && npm run export:chapel && npm run export:arbitrum && npm run export:linea && npm run export:zkevm", + "export:all": "npm run export:bsc && npm run export:polygon && npm run export:neon && npm run export:chapel && npm run export:arbitrum && npm run export:linea && npm run export:mode && npm run export:zkevm", "export:bsc": "hardhat export --network bsc --export ../chains/deployments/bsc.json", "export:polygon": "hardhat export --network polygon --export ../chains/deployments/polygon.json", "export:ethereum": "hardhat export --network ethereum --export ../chains/deployments/ethereum.json", "export:arbitrum": "hardhat export --network arbitrum --export ../chains/deployments/arbitrum.json", "export:neon": "hardhat export --network neon --export ../chains/deployments/neon.json", "export:linea": "hardhat export --network linea --export ../chains/deployments/linea.json", + "export:mode": "hardhat export --network mode --export ../chains/deployments/mode.json", "export:zkevm": "hardhat export --network zkevm --export ../chains/deployments/zkevm.json", "export:chapel": "hardhat export --network chapel --export ../chains/deployments/chapel.json", "export:ganache": "hardhat export --network localhost --export ../chains/deployments/ganache.json", @@ -50,6 +51,7 @@ "deploy:arbitrum": "hardhat --network arbitrum deploy --tags prod --no-compile", "deploy:neon": "hardhat --network neon deploy --tags prod --no-compile", "deploy:linea": "hardhat --network linea deploy --tags prod --no-compile", + "deploy:mode": "hardhat --network mode deploy --tags prod --no-compile --gasprice 100", "deploy:zkevm": "hardhat --network zkevm deploy --tags prod --no-compile", "deploy:localhost": "hardhat --network localhost deploy --tags prod --no-compile", "deploy:localeth": "hardhat --network localeth deploy --tags prod --no-compile", diff --git a/packages/sdk/src/IonicSdk/config.ts b/packages/sdk/src/IonicSdk/config.ts index 10043f712f..6c6da6391a 100644 --- a/packages/sdk/src/IonicSdk/config.ts +++ b/packages/sdk/src/IonicSdk/config.ts @@ -7,7 +7,6 @@ export const COMPTROLLER_ERROR_CODES: Array = [ "INVALID_CLOSE_FACTOR", "INVALID_COLLATERAL_FACTOR", "INVALID_LIQUIDATION_INCENTIVE", - "MARKET_NOT_ENTERED", // no longer possible "MARKET_NOT_LISTED", "MARKET_ALREADY_LISTED", "MATH_ERROR", diff --git a/packages/sdk/src/IonicSdk/index.ts b/packages/sdk/src/IonicSdk/index.ts index 32b4dd50b8..93d76ace38 100644 --- a/packages/sdk/src/IonicSdk/index.ts +++ b/packages/sdk/src/IonicSdk/index.ts @@ -28,9 +28,9 @@ import UnitrollerArtifact from "../../artifacts/Unitroller.sol/Unitroller.json"; import { CTokenFirstExtension } from "../../typechain/CTokenFirstExtension"; import { EIP20Interface } from "../../typechain/EIP20Interface"; import { FeeDistributor } from "../../typechain/FeeDistributor.sol/FeeDistributor"; +import { ILiquidator } from "../../typechain/ILiquidator"; import { IonicERC4626 as IonicERC4626 } from "../../typechain/IonicERC4626"; import { IonicFlywheelLensRouter as IonicFlywheelLensRouter } from "../../typechain/IonicFlywheelLensRouter.sol/IonicFlywheelLensRouter"; -import { IonicLiquidator } from "../../typechain/IonicLiquidator"; import { PoolDirectory } from "../../typechain/PoolDirectory"; import { PoolLens } from "../../typechain/PoolLens"; import { PoolLensSecondary } from "../../typechain/PoolLensSecondary.sol/PoolLensSecondary"; @@ -66,7 +66,7 @@ export type StaticContracts = { PoolDirectory: PoolDirectory; PoolLens: PoolLens; PoolLensSecondary: PoolLensSecondary; - IonicLiquidator: IonicLiquidator; + IonicLiquidator: ILiquidator; [contractName: string]: Contract; }; @@ -138,10 +138,12 @@ export class IonicBase { this.provider ) as PoolLensSecondary, IonicLiquidator: new Contract( - this.chainDeployment.IonicLiquidator.address, + this.chainId == 34443 + ? this.chainDeployment.IonicUniV3Liquidator.address + : this.chainDeployment.IonicLiquidator.address, IonicLiquidatorArtifact.abi, this.provider - ) as IonicLiquidator, + ) as ILiquidator, FeeDistributor: new Contract( this.chainDeployment.FeeDistributor.address, FeeDistributorArtifact.abi, diff --git a/packages/sdk/src/modules/Pools.ts b/packages/sdk/src/modules/Pools.ts index 3eddb885b6..43f1f3ed85 100644 --- a/packages/sdk/src/modules/Pools.ts +++ b/packages/sdk/src/modules/Pools.ts @@ -1,4 +1,4 @@ -import { arbitrum, bsc, chapel, ethereum, ganache, linea, neon, polygon, zkevm } from "@ionicprotocol/chains"; +import { arbitrum, bsc, chapel, ethereum, ganache, linea, mode, neon, polygon, zkevm } from "@ionicprotocol/chains"; import { ChainSupportedAssets as ChainSupportedAssetsType, IonicPoolData, @@ -31,7 +31,8 @@ export const ChainSupportedAssets: ChainSupportedAssetsType = { [SupportedChains.arbitrum]: arbitrum.assets, [SupportedChains.linea]: linea.assets, [SupportedChains.ethereum]: ethereum.assets, - [SupportedChains.zkevm]: zkevm.assets + [SupportedChains.zkevm]: zkevm.assets, + [SupportedChains.mode]: mode.assets }; export function withPools(Base: TBase) { diff --git a/packages/sdk/src/modules/liquidation/encodeLiquidateTx.ts b/packages/sdk/src/modules/liquidation/encodeLiquidateTx.ts index ef6d79e5a8..505b31862e 100644 --- a/packages/sdk/src/modules/liquidation/encodeLiquidateTx.ts +++ b/packages/sdk/src/modules/liquidation/encodeLiquidateTx.ts @@ -54,10 +54,8 @@ export default async function encodeLiquidateTx( cErc20: borrower.debt[0].cToken, cTokenCollateral: borrower.collateral[0].cToken, minProfitAmount: 0, - flashSwapPair, + flashSwapContract: flashSwapPair, exchangeProfitTo: exchangeToTokenAddress, - uniswapV2RouterForBorrow: sdk.chainSpecificAddresses.UNISWAP_V2_ROUTER, - uniswapV2RouterForCollateral: sdk.chainSpecificAddresses.UNISWAP_V2_ROUTER, redemptionStrategies: strategiesAndDatas.strategies, strategyData: strategiesAndDatas.datas, ethToCoinbase: 0, diff --git a/packages/sdk/src/modules/liquidation/estimateGas.ts b/packages/sdk/src/modules/liquidation/estimateGas.ts index 0e305e4f64..3469fed696 100644 --- a/packages/sdk/src/modules/liquidation/estimateGas.ts +++ b/packages/sdk/src/modules/liquidation/estimateGas.ts @@ -3,7 +3,7 @@ import { BigNumber } from "ethers"; import { IonicSdk } from "../../IonicSdk"; -import { getUniswapV2Router, StrategiesAndDatas } from "./redemptionStrategy"; +import { StrategiesAndDatas } from "./redemptionStrategy"; import { PoolUserWithAssets } from "./utils"; const estimateGas = async ( @@ -37,11 +37,9 @@ const estimateGas = async ( cErc20: borrower.debt[0].cToken, cTokenCollateral: borrower.collateral[0].cToken, minProfitAmount: 0, - uniswapV2RouterForBorrow: sdk.chainSpecificAddresses.UNISWAP_V2_ROUTER, // TODO ASSET_SPECIFIC_ROUTER - uniswapV2RouterForCollateral: getUniswapV2Router(sdk, borrower.collateral[0].cToken), redemptionStrategies: strategiesAndDatas.strategies, strategyData: strategiesAndDatas.datas, - flashSwapPair, + flashSwapContract: flashSwapPair, debtFundingStrategies, debtFundingStrategiesData }, diff --git a/packages/sdk/tasks/admin/transaction.ts b/packages/sdk/tasks/admin/transaction.ts index bf1760d1d3..d567c03e68 100644 --- a/packages/sdk/tasks/admin/transaction.ts +++ b/packages/sdk/tasks/admin/transaction.ts @@ -32,7 +32,18 @@ task("cancel:tx", "cancel a tx with the same nonce") .addParam("sender", "sender address", "deployer", types.string) .setAction(async ({ nonce, sender }, { ethers, getChainId }) => { const chainid = parseInt(await getChainId()); - if (chainid != 137) throw new Error(`configure the max gas fees for the chain`); + let maxFeePerGas; + let maxPriorityFeePerGas; + let gasPrice; + if (chainid == 137) { + maxFeePerGas = ethers.utils.parseUnits("300", "gwei"); + maxPriorityFeePerGas = ethers.utils.parseUnits("120", "gwei"); + } else if (chainid == 34443) { + maxFeePerGas = 166; + maxPriorityFeePerGas = 13; + } else { + throw new Error(`configure the max gas fees for the chain`); + } const signer = await ethers.getNamedSigner(sender); const tx = await signer.sendTransaction({ @@ -40,8 +51,8 @@ task("cancel:tx", "cancel a tx with the same nonce") to: signer.address, value: 0, nonce, - maxFeePerGas: ethers.utils.parseUnits("300", "gwei"), - maxPriorityFeePerGas: ethers.utils.parseUnits("120", "gwei") + maxFeePerGas, + maxPriorityFeePerGas }); console.log(`cancelling tx hash ${tx.hash}`); await tx.wait(); diff --git a/packages/sdk/tasks/auth/pool.ts b/packages/sdk/tasks/auth/pool.ts index 92dfcf7ec3..9c70522dd8 100644 --- a/packages/sdk/tasks/auth/pool.ts +++ b/packages/sdk/tasks/auth/pool.ts @@ -101,7 +101,31 @@ task("auth:pool:borrow", "Set ability to borrow for a pool") tx = await poolAuth.closePoolBorrowerCapabilities(pool); await tx.wait(); } - console.log(`Set ability to supply for pool ${pool} to ${open}: ${tx.hash}`); + console.log(`Set ability to borrow for pool ${pool} to ${open}: ${tx.hash}`); + }); + +task("auth:pool:liquidate", "Set ability to liqiuidate for a pool") + .addParam("signer", "The address of the current deployer", "deployer", types.string) + .addParam("pool", "Address of pool", undefined, types.string) + .addParam("open", "If liquidations are open or not", true, types.boolean) + .setAction(async ({ signer, pool, open }, hre) => { + const deployer = await hre.ethers.getNamedSigner(signer); + console.log("current deployer", deployer.address); + + const poolAuth = await setUpAuth(hre, deployer, pool); + if (poolAuth === null) { + return; + } + + let tx; + if (open === true) { + tx = await poolAuth.configureOpenPoolLiquidatorCapabilities(pool); + await tx.wait(); + } else { + tx = await poolAuth.configureClosedPoolLiquidatorCapabilities(pool); + await tx.wait(); + } + console.log(`Set ability to liquidate for pool ${pool} to ${open}: ${tx.hash}`); }); async function setUpAuth( diff --git a/packages/sdk/tasks/ionicSdk.ts b/packages/sdk/tasks/ionicSdk.ts index fe786d3027..15cc5ec3e2 100644 --- a/packages/sdk/tasks/ionicSdk.ts +++ b/packages/sdk/tasks/ionicSdk.ts @@ -1,5 +1,5 @@ import { JsonRpcProvider } from "@ethersproject/providers"; -import { arbitrum, bsc, chapel, ethereum, ganache, linea, neon, polygon, zkevm } from "@ionicprotocol/chains"; +import { arbitrum, bsc, chapel, ethereum, ganache, linea, mode, neon, polygon, zkevm } from "@ionicprotocol/chains"; import { ChainConfig, ChainDeployment, SupportedChains } from "@ionicprotocol/types"; import { Signer } from "ethers"; import { deployments, ethers } from "hardhat"; @@ -207,6 +207,9 @@ export const getOrCreateIonic = async (signerOrProviderOrSignerName?: unknown | case SupportedChains.zkevm: chainConfig = zkevm; break; + case SupportedChains.mode: + chainConfig = mode; + break; } // Override for when in SIMULATION diff --git a/packages/sdk/tasks/leverage/configurePair.ts b/packages/sdk/tasks/leverage/configurePair.ts index 7b7e84ec41..97acd654c9 100644 --- a/packages/sdk/tasks/leverage/configurePair.ts +++ b/packages/sdk/tasks/leverage/configurePair.ts @@ -351,10 +351,10 @@ task("chapel-stables-mint", "mints testing stables in the levered pair borrowing } ); -task("trasnfer-test-tokens").setAction(async ({}, { ethers, getNamedAccounts }) => { +task("transfer-test-tokens").setAction(async ({}, { ethers, getNamedAccounts }) => { const { deployer } = await getNamedAccounts(); - const newDeployer = "0x9308dddeC9B5cCd8a2685A46E913C892FE31C826"; + const newDeployer = ""; const testingBombAddress = "0xe45589fBad3A1FB90F5b2A8A3E8958a8BAB5f768"; const stableAddress = "0x4f1885D25eF219D3D4Fa064809D6D4985FAb9A0b"; // TUSD diff --git a/packages/sdk/tasks/liquidation.ts b/packages/sdk/tasks/liquidation.ts index 23dbecdd9d..3e2569fa9a 100644 --- a/packages/sdk/tasks/liquidation.ts +++ b/packages/sdk/tasks/liquidation.ts @@ -3,6 +3,7 @@ import { task, types } from "hardhat/config"; import { CErc20Delegate } from "../typechain/CErc20Delegate"; import { ERC20 } from "../typechain/ERC20"; +import { ILiquidator } from "../typechain/ILiquidator"; import { IonicLiquidator } from "../typechain/IonicLiquidator"; export default task("get-liquidations", "Get potential liquidations") @@ -134,15 +135,13 @@ task("liquidate:hardcoded", "Liquidate a position without a flash loan").setActi const safeLiquidator = (await hre.ethers.getContract("IonicLiquidator", signer)) as IonicLiquidator; console.log(`Liquidating...`); - const vars: IonicLiquidator.LiquidateToTokensWithFlashSwapVarsStruct = { + const vars: ILiquidator.LiquidateToTokensWithFlashSwapVarsStruct = { borrower: "0xF93A5F0A4925EeC32cD585641c88a498523f383C", repayAmount: "1372091245495", cErc20: "0xa9736bA05de1213145F688e4619E5A7e0dcf4C72", cTokenCollateral: "0xb3D83F2CAb787adcB99d4c768f1Eb42c8734b563", - flashSwapPair: "0xa927E1e1E044CA1D9fe1854585003477331fE2Af", + flashSwapContract: "0xa927E1e1E044CA1D9fe1854585003477331fE2Af", minProfitAmount: BigNumber.from("0"), - uniswapV2RouterForBorrow: "0x70085a09D30D6f8C4ecF6eE10120d1847383BB57", - uniswapV2RouterForCollateral: "0x70085a09D30D6f8C4ecF6eE10120d1847383BB57", redemptionStrategies: [], strategyData: [], debtFundingStrategies: ["0xB8423EE8aa0476a909786D079dF5C0766cB09142"], diff --git a/packages/sdk/tasks/market/admin.ts b/packages/sdk/tasks/market/admin.ts index 9db6df4a86..e34229dbc1 100644 --- a/packages/sdk/tasks/market/admin.ts +++ b/packages/sdk/tasks/market/admin.ts @@ -8,16 +8,16 @@ import { ICErc20 } from "../../typechain/CTokenInterfaces.sol/ICErc20"; import { PoolDirectory } from "../../typechain/PoolDirectory"; export default task("market:unsupport", "Unsupport a market") - .addParam("comptroller", "Comptroller Address", undefined, types.string) - .addParam("ctoken", "The address of the ctoken to unsupport", undefined, types.string) - .setAction(async (taskArgs, { ethers }) => { + .addParam("pool", "Comptroller Address", undefined, types.string) + .addParam("market", "The address of the ctoken to unsupport", undefined, types.string) + .setAction(async ({ pool, market }, { ethers }) => { const signer = await ethers.getNamedSigner("deployer"); const ionicSdkModule = await import("../ionicSdk"); const sdk = await ionicSdkModule.getOrCreateIonic(); - const comptroller = await sdk.createComptroller(taskArgs.comptroller, signer); - const tx = await comptroller._unsupportMarket(taskArgs.ctoken); + const comptroller = await sdk.createComptroller(pool, signer); + const tx = await comptroller._unsupportMarket(market); const receipt: TransactionReceipt = await tx.wait(); console.log("Unsupported market with status:", receipt.status); }); diff --git a/packages/sdk/tasks/market/deploy.ts b/packages/sdk/tasks/market/deploy.ts index c2166e88a8..a511d85ea5 100644 --- a/packages/sdk/tasks/market/deploy.ts +++ b/packages/sdk/tasks/market/deploy.ts @@ -1,11 +1,43 @@ -import { MarketConfig } from "@ionicprotocol/types"; +import { assetFilter, assetSymbols, MarketConfig, underlying } from "@ionicprotocol/types"; import { task, types } from "hardhat/config"; +import { assets as modeAssets } from "../../../chains/src/mode/assets"; + +task("markets:deploy:mode", "deploy mode markets").setAction(async (taskArgs, { run }) => { + const symbols = [ + // assetSymbols.WETH, + // assetSymbols.USDC, + // assetSymbols.USDT, + assetSymbols.DAI, + assetSymbols.LINK, + assetSymbols.BAL, + assetSymbols.SNX, + assetSymbols.UNI, + assetSymbols.WBTC, + assetSymbols.AAVE + ]; + + for (let i = 0; i < symbols.length; i++) { + const symbol = symbols[i]; + const asset = assetFilter(modeAssets, symbol); + await run("market:deploy", { + signer: "deployer", + cf: "70", + underlying: asset.underlying, + comptroller: "0xFB3323E24743Caf4ADD0fDCCFB268565c0685556", + symbol: "ion" + asset.symbol, + name: `Ionic ${asset.name}` + }); + } +}); + task("market:deploy", "deploy market") .addParam("signer", "Named account to use for tx", "deployer", types.string) .addParam("cf", "Collateral factor", "80", types.string) - .addParam("underlying", "Collateral factor", "80", types.string) + .addParam("underlying", "Asset token address", undefined, types.string) .addParam("comptroller", "Comptroller address", undefined, types.string) + .addParam("symbol", "CToken symbol", undefined, types.string) + .addParam("name", "CToken name", undefined, types.string) .setAction(async (taskArgs, { ethers }) => { const signer = await ethers.getNamedSigner(taskArgs.signer); const ionicSdkModule = await import("../ionicSdk"); @@ -20,14 +52,14 @@ task("market:deploy", "deploy market") const config: MarketConfig = { underlying: taskArgs.underlying, comptroller: comptroller.address, - adminFee: 0, + adminFee: 10, collateralFactor: parseInt(taskArgs.cf), interestRateModel: sdk.chainDeployment.JumpRateModel.address, - reserveFactor: 0, + reserveFactor: 10, bypassPriceFeedCheck: true, feeDistributor: sdk.chainDeployment.FeeDistributor.address, - symbol: "fUSDR-1", - name: "Pearl Farm USDR" + symbol: taskArgs.symbol, + name: taskArgs.name }; const reserveFactorBN = ethers.utils.parseUnits((config.reserveFactor / 100).toString()); @@ -68,6 +100,6 @@ task("market:deploy", "deploy market") // Recreate Address of Deployed Market const receipt = await tx.wait(); if (receipt.status != ethers.constants.One.toNumber()) { - throw "Failed to deploy market "; + throw `Failed to deploy market for ${config.underlying}`; } }); diff --git a/packages/sdk/tasks/one-time/flywheels.ts b/packages/sdk/tasks/one-time/flywheels.ts index 5a5936549c..749dfbf8af 100644 --- a/packages/sdk/tasks/one-time/flywheels.ts +++ b/packages/sdk/tasks/one-time/flywheels.ts @@ -49,3 +49,8 @@ export default task("one-time:deploy-ion-fws", "Deploy static rewards flywheel f }); } }); + +task("accounts:print").setAction(async ({}, { ethers, getNamedAccounts }) => { + const { deployer } = await getNamedAccounts(); + console.log(`the deployer address is ${deployer}`); +}); diff --git a/packages/sdk/tasks/one-time/index.ts b/packages/sdk/tasks/one-time/index.ts index e641b66898..00cb34b93e 100644 --- a/packages/sdk/tasks/one-time/index.ts +++ b/packages/sdk/tasks/one-time/index.ts @@ -1 +1,2 @@ import "./flywheels"; +import "./mode-test-txs"; diff --git a/packages/sdk/tasks/one-time/mode-test-txs.ts b/packages/sdk/tasks/one-time/mode-test-txs.ts new file mode 100644 index 0000000000..bdc7a3dfa5 --- /dev/null +++ b/packages/sdk/tasks/one-time/mode-test-txs.ts @@ -0,0 +1,101 @@ +import { task } from "hardhat/config"; + +import { IonicComptroller } from "../../typechain/ComptrollerInterface.sol/IonicComptroller"; +import { ICErc20 } from "../../typechain/CTokenInterfaces.sol/ICErc20"; +import { ERC20 } from "../../typechain/ERC20"; +import { WETH } from "../../typechain/WETH"; + +task("test:txs").setAction(async ({}, { ethers, getNamedAccounts }) => { + let tx; + const modePoolAddr = "0xFB3323E24743Caf4ADD0fDCCFB268565c0685556"; + const usdcMarketAddr = "0xd3af2e473317e002a3c8daf2aeaf2f7de8008e91"; + const wethMarketAddr = "0xb7dd0b1e3b5f2a4343ab4d84be865b1635c5ecaa"; + const { deployer } = await getNamedAccounts(); + + const modePool = (await ethers.getContractAt("IonicComptroller", modePoolAddr)) as IonicComptroller; + + const wethMarket = (await ethers.getContractAt("CTokenInterfaces.sol:ICErc20", wethMarketAddr)) as ICErc20; + const usdcMarket = (await ethers.getContractAt("CTokenInterfaces.sol:ICErc20", usdcMarketAddr)) as ICErc20; + + const wethUnderlying = await wethMarket.callStatic.underlying(); + const usdcUnderlying = await usdcMarket.callStatic.underlying(); + + const wethToken = (await ethers.getContractAt("WETH", wethUnderlying)) as WETH; + const usdcToken = (await ethers.getContractAt("ERC20", usdcUnderlying)) as ERC20; + + const wethAllowance = await wethToken.callStatic.allowance(deployer, wethMarketAddr); + const usdcAllowance = await usdcToken.callStatic.allowance(deployer, usdcMarketAddr); + + const wethBalance = await wethToken.callStatic.balanceOf(deployer); + if (wethBalance.isZero()) { + tx = await wethToken.deposit({ value: ethers.utils.parseEther("0.06") }); + console.log(`waiting to wrap WETH with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + } + + if (wethAllowance.isZero()) { + tx = await wethToken.approve(wethMarketAddr, ethers.utils.parseEther("100")); + console.log(`waiting to approve WETH with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + } + + if (usdcAllowance.isZero()) { + tx = await usdcToken.approve(usdcMarketAddr, ethers.utils.parseEther("100")); + console.log(`waiting to approve USDC with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + } + + const usdcDeployerBalance = await usdcMarket.callStatic.balanceOf(deployer); + if (usdcDeployerBalance.isZero()) { + tx = await usdcMarket.mint("10000000"); + console.log(`waiting to supply USDC with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + } else { + const usdcCTokensBalance = await usdcMarket.callStatic.balanceOf(deployer); + tx = await usdcMarket.redeem(usdcCTokensBalance); + console.log(`waiting to redeem USDC with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + } + + const wethDeployerBalance = await wethMarket.callStatic.balanceOf(deployer); + if (wethDeployerBalance.isZero()) { + const mintAmount = ethers.utils.parseEther("0.01"); + console.log(`deployer ${deployer} has ${wethBalance} of ${wethToken.address}`); + console.log(`weth allowance ${wethAllowance} deployer will mint ${mintAmount}`); + tx = await wethMarket.mint(mintAmount); + console.log(`waiting to supply WETH with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + } else { + let cTokensBalance = await wethMarket.callStatic.balanceOf(deployer); + tx = await wethMarket.redeemUnderlying(cTokensBalance / 10); + console.log(`waiting to redeem underlying WETH with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + + cTokensBalance = await wethMarket.callStatic.balanceOf(deployer); + tx = await wethMarket.redeem(cTokensBalance); + console.log(`waiting to redeem WETH with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + } + + const borrowedUsdcDeployer = await usdcMarket.callStatic.borrowBalanceCurrent(deployer); + console.log(`borrowedUsdcDeployer ${borrowedUsdcDeployer}`); + if (borrowedUsdcDeployer.isZero()) { + tx = await usdcMarket.borrow("5000000"); + console.log(`waiting to borrow USDC with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + } else { + tx = await usdcMarket.repayBorrow(borrowedUsdcDeployer); + console.log(`waiting to repay USDC borrow with ${tx.hash}`); + await tx.wait(); + console.log(`mined ${tx.hash}`); + } +}); diff --git a/packages/sdk/tasks/pool/admin/create.ts b/packages/sdk/tasks/pool/admin/create.ts index f630960f7c..ddd2be0750 100644 --- a/packages/sdk/tasks/pool/admin/create.ts +++ b/packages/sdk/tasks/pool/admin/create.ts @@ -14,6 +14,17 @@ task("pool:create:chapel").setAction(async ({}, { run, ethers }) => { }); }); +task("pool:create:mode").setAction(async ({}, { run, ethers }) => { + await run("pool:create", { + name: "Mode Market", + creator: "deployer", + priceOracle: "0x2BAF3A2B667A5027a83101d218A9e8B73577F117", // MPO + closeFactor: "50", + liquidationIncentive: "8", + enforceWhitelist: "false" + }); +}); + // update the MPO=0x429041250873643235cb3788871447c6fF3205aA // npx hardhat pool:create --name Test --creator deployer --price-oracle $MPO --close-factor 50 --liquidation-incentive 8 --enforce-whitelist false --network localhost diff --git a/packages/sdk/verify.sh b/packages/sdk/verify.sh new file mode 100755 index 0000000000..729678e0d4 --- /dev/null +++ b/packages/sdk/verify.sh @@ -0,0 +1,13 @@ +#!/bin/zsh + +CONTRACTS_AND_ADDRESSES=$(cat ../chains/deployments/mode.json | jq '.contracts | to_entries') +LENGTH=$(echo $CONTRACTS_AND_ADDRESSES | jq 'length') + +for i in {1..$LENGTH} +do + ADDRESS=$(echo $CONTRACTS_AND_ADDRESSES | jq -r '.['$(($i-1))'].value.address') + CONTRACT=$(echo $CONTRACTS_AND_ADDRESSES | jq -r '.['$(($i-1))'].key') + #echo Verifying $CONTRACT at $ADDRESS ... + echo '' + echo "forge verify-contract --verifier blockscout --verifier-url 'https://explorer.mode.network/api?' --watch $ADDRESS $CONTRACT" +done diff --git a/packages/types/src/enums.ts b/packages/types/src/enums.ts index cb5c189b83..9b230518c0 100644 --- a/packages/types/src/enums.ts +++ b/packages/types/src/enums.ts @@ -7,7 +7,8 @@ export enum SupportedChains { polygon = 137, arbitrum = 42161, linea = 59144, - zkevm = 1101 + zkevm = 1101, + mode = 34443 } export const SupportedChainsArray = Object.entries(SupportedChains) @@ -210,6 +211,7 @@ export enum assetSymbols { MKR = "MKR", RAI = "RAI", SNX = "SNX", + UNI = "UNI", SOL = "SOL", SUSHI = "SUSHI", YFI = "YFI", diff --git a/packages/ui/.env.dist b/packages/ui/.env.dist index 8c024adf74..649214b2ca 100644 --- a/packages/ui/.env.dist +++ b/packages/ui/.env.dist @@ -5,6 +5,7 @@ POLYGON=true ARBITRUM=true ETHEREUM=true NEXT_PUBLIC_SHOW_TESTNETS=true +# MODE_NETWORK=true # TODO ICON_SERVER=https://d1912tcoux65lj.cloudfront.net FEATURE_CREATE_POOL=0x82eDcFe00bd0ce1f3aB968aF09d04266Bc092e0E diff --git a/packages/ui/.eslintrc.json b/packages/ui/.eslintrc.json index 91395a5882..f5b067c678 100644 --- a/packages/ui/.eslintrc.json +++ b/packages/ui/.eslintrc.json @@ -21,7 +21,12 @@ "ecmaVersion": 12, "sourceType": "module" }, - "plugins": ["@typescript-eslint", "unused-imports", "typescript-sort-keys", "sort-keys"], + "plugins": [ + "@typescript-eslint", + "unused-imports", + "typescript-sort-keys", + "sort-keys" + ], "settings": { "import/resolver": { "node": { @@ -42,7 +47,10 @@ "@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/sort-type-constituents": "error", - "@typescript-eslint/consistent-type-imports": ["error", { "prefer": "type-imports" }], + "@typescript-eslint/consistent-type-imports": [ + "error", + { "prefer": "type-imports" } + ], "no-console": ["error", { "allow": ["warn", "error"] }], "react/self-closing-comp": ["error", { "component": true, "html": true }], "react-hooks/exhaustive-deps": "error", @@ -53,7 +61,12 @@ "unused-imports/no-unused-imports": "error", "unused-imports/no-unused-vars": [ "warn", - { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" } + { + "vars": "all", + "varsIgnorePattern": "^_", + "args": "after-used", + "argsIgnorePattern": "^_" + } ], "typescript-sort-keys/interface": "error", "typescript-sort-keys/string-enum": "error", @@ -69,6 +82,7 @@ ], "sort-keys": 0, // disable default eslint sort-keys "sort-keys/sort-keys-fix": 2, - "comma-dangle": "off" + "comma-dangle": "off", + "@next/next/no-document-import-in-page": "off" } } diff --git a/packages/ui/.gitignore b/packages/ui/.gitignore index cc9979b8c9..c58b15a96a 100644 --- a/packages/ui/.gitignore +++ b/packages/ui/.gitignore @@ -1,11 +1,10 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -.idea -.vscode # dependencies /node_modules /.pnp .pnp.js +.yarn/install-state.gz # testing /coverage @@ -27,13 +26,11 @@ yarn-debug.log* yarn-error.log* # local env files -.env.local -.env.development.local -.env.test.local -.env.production.local - +.env*.local +.env # vercel .vercel # typescript *.tsbuildinfo +next-env.d.ts diff --git a/packages/ui/.prettierrc b/packages/ui/.prettierrc index 86a1fbf8f2..8484991147 100644 --- a/packages/ui/.prettierrc +++ b/packages/ui/.prettierrc @@ -1,8 +1,11 @@ { - "printWidth": 100, + "printWidth": 80, + "tabWidth": 2, "semi": true, "singleQuote": true, - "tabWidth": 2, - "useTabs": false, - "trailingComma": "none" + "trailingComma": "none", + "bracketSpacing": true, + "jsxBracketSameLine": false, + "arrowParens": "always", + "singleAttributePerLine": true } diff --git a/packages/ui/README.md b/packages/ui/README.md new file mode 100644 index 0000000000..c4033664f8 --- /dev/null +++ b/packages/ui/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/packages/ui/api/web3.api.tsx b/packages/ui/api/web3.api.tsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/ui/app/_components/Navbar.tsx b/packages/ui/app/_components/Navbar.tsx new file mode 100644 index 0000000000..79290aafd0 --- /dev/null +++ b/packages/ui/app/_components/Navbar.tsx @@ -0,0 +1,128 @@ +/* eslint-disable @next/next/no-img-element */ +'use client'; +import React, { useState, useEffect, useRef } from 'react'; +import Link from 'next/link'; +import { ConnectButton } from '@rainbow-me/rainbowkit'; +import { useAccount } from 'wagmi'; +// import { useStore } from "@/store/Store"; +import { usePathname } from 'next/navigation'; + +export default function Navbar() { + const [isActive, setIsActive] = useState(false); + const pathname = usePathname(); + + // useEffect(()=>{ + // console.log(pathbox.current.getElementsByClassName(pathname)); + + // },[pathname]) + return ( + + ); +} diff --git a/packages/ui/app/_components/ResultHandler.tsx b/packages/ui/app/_components/ResultHandler.tsx new file mode 100644 index 0000000000..c8e87eaad8 --- /dev/null +++ b/packages/ui/app/_components/ResultHandler.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import { ThreeCircles } from 'react-loader-spinner'; + +type ResultHandlerProps = { + children: React.ReactNode; + isLoading: boolean; + isFetching?: boolean; + width?: string; + height?: string; + color?: string; +}; + +export default function ResultHandler({ + children, + isLoading, + isFetching, + width = '40', + height = '40', + color = '#39ff88' +}: ResultHandlerProps) { + if (isLoading || isFetching) { + return ( +
+ +
+ ); + } + + return <>{children}; +} diff --git a/packages/ui/app/_components/dashboards/SupplyRows.tsx b/packages/ui/app/_components/dashboards/SupplyRows.tsx new file mode 100644 index 0000000000..73e8962fe8 --- /dev/null +++ b/packages/ui/app/_components/dashboards/SupplyRows.tsx @@ -0,0 +1,64 @@ +/* eslint-disable @next/next/no-img-element */ +import Link from 'next/link'; +import React from 'react'; +import { usePathname } from 'next/navigation'; +interface ISupply { + asset: string; + amount: number; + cAPR: number; + sAPR: number; + utilisation: number; + rewards: number; + mode?: string; +} +const SupplyRows = ({ + asset, + amount, + cAPR, + sAPR, + utilisation, + rewards, + mode = 'SUPPLY' +}: ISupply) => { + const pathname = usePathname(); + return ( +
+
+ {asset} +

{asset}

+
+

{amount}

+

{cAPR}

+

{sAPR}

+

{utilisation}

+

{rewards}

+
+ + {mode === 'SUPPLY' ? 'REPAY' : 'Withdraw'} + + + Manage + +
+
+ ); +}; + +export default SupplyRows; diff --git a/packages/ui/app/_components/markets/PoolRows.tsx b/packages/ui/app/_components/markets/PoolRows.tsx new file mode 100644 index 0000000000..3fa3c1ff42 --- /dev/null +++ b/packages/ui/app/_components/markets/PoolRows.tsx @@ -0,0 +1,73 @@ +/* eslint-disable @next/next/no-img-element */ +'use client'; +import Link from 'next/link'; + +import React, { Dispatch, SetStateAction } from 'react'; + +interface IRows { + asset: string; + colleteralT: string; + borrowing: string; + borrowingT: string; + lendingT: string; + lAPR: string; + bAPR: string; + logo: string; + setSelectedSymbol: Dispatch>; +} +const PoolRows = ({ + asset, + colleteralT, + borrowing, + borrowingT, + lendingT, + lAPR, + bAPR, + logo, + setSelectedSymbol +}: IRows) => { + return ( +
+
+ {asset} +

{asset}

+
+

{colleteralT}

+

{lendingT}

+

{borrowing}

+

{borrowingT}

+

{lAPR}

+

{bAPR}

+
+ setSelectedSymbol(asset)} + > + Supply + + setSelectedSymbol(asset)} + > + Borrow + +
+ {/* + Details + */} +
+ ); +}; + +export default PoolRows; diff --git a/packages/ui/app/_components/markets/PoolToggle.tsx b/packages/ui/app/_components/markets/PoolToggle.tsx new file mode 100644 index 0000000000..1d6ebace8c --- /dev/null +++ b/packages/ui/app/_components/markets/PoolToggle.tsx @@ -0,0 +1,32 @@ +import React, { useState } from 'react'; + +const PoolToggle = () => { + const [active, setActive] = useState('all'); + return ( +
+

setActive('all')} + className={`rounded-xl py-1 px-3 cursor-pointer ${ + active === 'all' ? 'bg-darkone text-accent ' : 'text-white/40 ' + } transition-all duration-200 ease-linear `} + > + All Pools +

+ {/*

setActive('stable')} + className={` rounded-xl py-1 px-3 ${ + active === 'stable' ? 'bg-darkone text-accent ' : 'text-white/40' + } cursor-pointer transition-all duration-200 ease-linear`} + > + Stablecoin Pools +

*/} +
+ ); +}; + +export default PoolToggle; +{ + /*
*/ +} diff --git a/packages/ui/app/_components/points_comp/FlatMap.tsx b/packages/ui/app/_components/points_comp/FlatMap.tsx new file mode 100644 index 0000000000..78827e4f53 --- /dev/null +++ b/packages/ui/app/_components/points_comp/FlatMap.tsx @@ -0,0 +1,37 @@ +import React, { useMemo } from 'react'; + +interface IFlatMap { + rewardsData?: number[]; + colorData?: string[]; +} +const FlatMap = ({ + rewardsData = [10, 30, 30, 15, 5], + colorData = ['#3bff89ff', '#f3fa96ff', '#f29c3fff', '#ff3863ff', '#c768f2ff'] +}: IFlatMap) => { + const totalSum: number = rewardsData.reduce((acc, curr) => acc + curr, 0); + function calculatePercentages(numbers: number[], total: number): number[] { + return numbers.map( + (number: number) => +((number / total) * 100).toFixed(1) + ); + } + const percentVals = useMemo(() => { + return calculatePercentages(rewardsData, totalSum); + }, [rewardsData, totalSum]); + + return ( +
+ {percentVals[0] && + percentVals.map((vals: number, idx: number) => ( + + {' '} + + ))} +
+ ); +}; + +export default FlatMap; diff --git a/packages/ui/app/_components/points_comp/PercentMeter.tsx b/packages/ui/app/_components/points_comp/PercentMeter.tsx new file mode 100644 index 0000000000..86ec3ceda2 --- /dev/null +++ b/packages/ui/app/_components/points_comp/PercentMeter.tsx @@ -0,0 +1,20 @@ +import React from 'react'; + +interface IMeter { + color?: string; + percent: number; +} +const PercentMeter = ({ color = '#3bff89ff', percent }: IMeter) => { + return ( +
+

+

+

{percent}%

+
+ ); +}; + +export default PercentMeter; diff --git a/packages/ui/app/_components/points_comp/ReferralLeaderboard.tsx b/packages/ui/app/_components/points_comp/ReferralLeaderboard.tsx new file mode 100644 index 0000000000..22cfc81475 --- /dev/null +++ b/packages/ui/app/_components/points_comp/ReferralLeaderboard.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import PercentMeter from './PercentMeter'; +interface IRefLed { + rank: number; + eid: string; + vaultSupply: number; + points: number; + percent: number; +} +const ReferralLeaderboard = ({ + rank, + eid, + vaultSupply, + points, + percent +}: IRefLed) => { + return ( +
+ #{rank} + {eid} + ${vaultSupply} + {points} + +
+ ); +}; + +export default ReferralLeaderboard; diff --git a/packages/ui/app/_components/points_comp/StrategyROW.tsx b/packages/ui/app/_components/points_comp/StrategyROW.tsx new file mode 100644 index 0000000000..75e2478975 --- /dev/null +++ b/packages/ui/app/_components/points_comp/StrategyROW.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import PercentMeter from './PercentMeter'; + +interface IStrategy { + earnBy: string; + amount: number; + vaultSupply: number; + points: number; + percent: number; + color: string; +} +const StrategyROW = ({ + earnBy, + amount, + vaultSupply, + points, + percent, + color +}: IStrategy) => { + return ( +
+
+ + {earnBy} +
+ {amount} + ${vaultSupply} + {points} + +
+ ); +}; + +export default StrategyROW; diff --git a/packages/ui/app/_components/popup/Amount.tsx b/packages/ui/app/_components/popup/Amount.tsx new file mode 100644 index 0000000000..3ae2dfc7f6 --- /dev/null +++ b/packages/ui/app/_components/popup/Amount.tsx @@ -0,0 +1,77 @@ +/* eslint-disable @next/next/no-img-element */ +'use client'; +import { MarketData } from '@ui/types/TokensDataMap'; +import dynamic from 'next/dynamic'; +import React, { useState } from 'react'; +import { useAccount, useBalance } from 'wagmi'; + +interface IAmount { + selectedMarketData: MarketData; + handleInput: (val?: number) => void; + amount?: number; + hintText?: string; + max?: number; + symbol: string; +} +const Amount = ({ + selectedMarketData, + handleInput, + amount, + hintText = 'Wallet Balance', + max = 0, + symbol +}: IAmount) => { + const marketDataDecimals = parseInt( + selectedMarketData.underlyingDecimals.toString() + ); + //neeed to get the wallet balance + function handlInpData(e: React.ChangeEvent) { + const currentValue = + e.target.value.trim() === '' ? 0 : parseFloat(e.target.value); + + handleInput(currentValue > max ? max : currentValue); + } + function handleMax(val: number) { + handleInput(val); + } + + return ( +
+
+ Amount + + {hintText} {max.toFixed(marketDataDecimals)} + + +
+
+ + link + {symbol} +
+
+ ); +}; + +// export default Amount +export default dynamic(() => Promise.resolve(Amount), { ssr: false }); +{ + /*
*/ +} diff --git a/packages/ui/app/_components/popup/Approved.tsx b/packages/ui/app/_components/popup/Approved.tsx new file mode 100644 index 0000000000..f62dcf948e --- /dev/null +++ b/packages/ui/app/_components/popup/Approved.tsx @@ -0,0 +1,47 @@ +import React from 'react'; + +interface IApproved { + status?: string; +} +const Approved = ({ status = 'STEP0' }: IApproved) => { + return ( +
+
+ {status === 'STEP2' ? '✔️' : '1'} +
+
+
+ {/*
*/} +
+
+ 2 +
+
+ ); +}; + +export default Approved; diff --git a/packages/ui/app/_components/popup/Slider.tsx b/packages/ui/app/_components/popup/Slider.tsx new file mode 100644 index 0000000000..7ea70447bb --- /dev/null +++ b/packages/ui/app/_components/popup/Slider.tsx @@ -0,0 +1,68 @@ +'use client'; +// SliderComponent.js +import React, { useState } from 'react'; +interface IUtilization { + handleUtilization: (val: number) => void; +} +const SliderComponent = ({ handleUtilization }: IUtilization) => { + const [sliderValue, setSliderValue] = useState(0); + + const handleSliderChange = (e: React.ChangeEvent) => { + setSliderValue(+e.target.value); + handleUtilization(+e.target.value); + }; + + const getColor = () => { + if (sliderValue < 60) { + return 'bg-accent'; + } else if (sliderValue < 80) { + return 'bg-yellow-500'; + } else { + return 'bg-red-500'; + } + }; + const gettextColor = () => { + if (sliderValue < 60) { + return 'text-accent'; + } else if (sliderValue < 80) { + return 'text-yellow-500'; + } else { + return 'text-red-500'; + } + }; + + return ( +
+
+ {sliderValue}% + 80% + 100% +
+
+
+
+
+ + +
+
+ ); +}; + +export default SliderComponent; + +// #666666ff diff --git a/packages/ui/app/_components/popup/Tab.tsx b/packages/ui/app/_components/popup/Tab.tsx new file mode 100644 index 0000000000..51e5969d6c --- /dev/null +++ b/packages/ui/app/_components/popup/Tab.tsx @@ -0,0 +1,62 @@ +import React from 'react'; +interface IMode { + mode: string; + setActive: (val: string) => void; + active: string; +} +const Tab = ({ mode, setActive, active }: IMode) => { + return ( +
+ {(mode === 'SUPPLY' || mode === 'DEFAULT') && ( + <> +

setActive('COLLATERAL')} + className={`rounded-md py-1 text-center cursor-pointer ${ + active === 'COLLATERAL' + ? 'bg-darkone text-accent ' + : 'text-white/40 ' + } transition-all duration-200 ease-linear `} + > + COLLATERAL +

+

setActive('WITHDRAW')} + className={` rounded-md py-1 px-3 ${ + active === 'WITHDRAW' + ? 'bg-darkone text-accent ' + : 'text-white/40' + } cursor-pointer transition-all duration-200 ease-linear`} + > + WITHDRAW +

+ + )} + {(mode === 'BORROW' || mode === 'DEFAULT') && ( + <> +

setActive('BORROW')} + className={` rounded-md py-1 px-3 ${ + active === 'BORROW' ? 'bg-darkone text-accent ' : 'text-white/40' + } cursor-pointer transition-all duration-200 ease-linear`} + > + BORROW +

+

setActive('REPAY')} + className={` rounded-md py-1 px-3 ${ + active === 'REPAY' ? 'bg-darkone text-accent ' : 'text-white/40' + } cursor-pointer transition-all duration-200 ease-linear`} + > + REPAY +

+ + )} +
+ ); +}; + +export default Tab; diff --git a/packages/ui/app/_components/popup/page.tsx b/packages/ui/app/_components/popup/page.tsx new file mode 100644 index 0000000000..ff525c3908 --- /dev/null +++ b/packages/ui/app/_components/popup/page.tsx @@ -0,0 +1,722 @@ +'use client'; +/* eslint-disable @next/next/no-img-element */ +import React, { useEffect, useMemo, useReducer, useRef, useState } from 'react'; +import SliderComponent from './Slider'; +import Approved from './Approved'; +import Amount from './Amount'; +import Tab from './Tab'; +import { useRouter } from 'next/navigation'; +import { useAccount, useBalance, useChainId } from 'wagmi'; +import { useMultiMidas } from '@ui/context/MultiIonicContext'; +import { MarketData } from '@ui/types/TokensDataMap'; +import { useBorrowLimitMarket } from '@ui/hooks/useBorrowLimitMarket'; +import { useSdk } from '@ui/hooks/fuse/useSdk'; +import { useRewardsInfoForMarket } from '@ui/hooks/rewards/useRewardsInfoForMarket'; +import { useRewardsForMarket } from '@ui/hooks/useRewards'; +import { useTotalSupplyAPYs } from '@ui/hooks/useTotalSupplyAPYs'; +import { useAllFundedInfo } from '@ui/hooks/useAllFundedInfo'; +import { useBorrowAPYs } from '@ui/hooks/useBorrowAPYs'; +import { useQueryClient } from '@tanstack/react-query'; +import ResultHandler from '../ResultHandler'; +import { BigNumber, BigNumberish, constants, ethers } from 'ethers'; +import { useMaxWithdrawAmount } from '@ui/hooks/useMaxWithdrawAmount'; +import { useMaxBorrowAmount } from '@ui/hooks/useMaxBorrowAmount'; +import { useBorrowLimitTotal } from '@ui/hooks/useBorrowLimitTotal'; +import { useBorrowMinimum } from '@ui/hooks/useBorrowMinimum'; +import { fetchBalance } from 'wagmi/actions'; +import { useAllUsdPrices } from '@ui/hooks/useAllUsdPrices'; +import { formatUnits } from 'ethers/lib/utils.js'; + +interface IPopup { + mode?: string; + specific?: string | null; + selectedMarketData: MarketData; + comptrollerAddress: string; +} +const Popup = ({ + mode = 'DEFAULT', + specific = null, + selectedMarketData, + comptrollerAddress +}: IPopup) => { + // console.log(mode); + const { currentSdk, address } = useMultiMidas(); + const chainId = useChainId(); + const { data: minBorrowAmount } = useBorrowMinimum( + selectedMarketData, + chainId + ); + const { data: balanceData } = useBalance({ + address: (address as any) ?? `0x0`, + token: selectedMarketData.underlyingToken as any + }); + const { data: assetsSupplyAprData } = useTotalSupplyAPYs( + [selectedMarketData], + chainId + ); + const { data: assetsBorrowAprData } = useBorrowAPYs( + [selectedMarketData], + chainId + ); + const collateralApr = useMemo(() => { + // Todo: add the market rewards to this calculation + if (assetsSupplyAprData) { + return `${assetsSupplyAprData[selectedMarketData.cToken].apy.toFixed( + 2 + )}%`; + } + + return '0.00%'; + }, [assetsSupplyAprData]); + const borrowApr = useMemo(() => { + if (assetsBorrowAprData) { + return `${assetsBorrowAprData[selectedMarketData.cToken].toFixed(2)}%`; + } + + return '0.00%'; + }, [assetsBorrowAprData]); + const [active, setActive] = useState(''); + const slide = useRef(null!); + const router = useRouter(); + const [amount, setAmount] = useReducer((_: number, value: number): number => { + const marketDataDecimals = parseInt( + selectedMarketData.underlyingDecimals.toString() + ); + + return parseFloat(value.toFixed(marketDataDecimals)); + }, 0); + const amountAsBInt = useMemo( + () => + amount + ? ( + amount * + Math.pow( + 10, + parseInt(selectedMarketData.underlyingDecimals.toString()) + ) + ).toString() + : '0', + [amount] + ); + const [isExecutingAction, setIsExecutingAction] = useState(false); + const { data: maxBorrowAmount } = useMaxBorrowAmount( + selectedMarketData, + comptrollerAddress, + chainId + ); + const currentBorrowAmountAsFloat = useMemo( + () => parseFloat(selectedMarketData.borrowBalance.toString()), + [selectedMarketData] + ); + const queryClient = useQueryClient(); + + useEffect(() => { + if (mode === 'DEFAULT' || 'SUPPLY') { + if (specific) { + setActive(specific); + return; + } + setActive('COLLATERAL'); + } + + if (mode === 'BORROW') { + if (specific) { + setActive(specific); + return; + } + setActive('BORROW'); + } + }, [mode, specific]); + + useEffect(() => { + setAmount(0); + + if (mode === 'DEFAULT') { + if (active === 'COLLATERAL') { + slide.current.style.transform = 'translateX(0%)'; + } + if (active === 'WITHDRAW') { + slide.current.style.transform = 'translateX(-100%)'; + } + if (active === 'BORROW') { + slide.current.style.transform = 'translateX(-200%)'; + } + if (active === 'REPAY') { + slide.current.style.transform = 'translateX(-300%)'; + } + } + if (mode === 'SUPPLY') { + if (active === 'COLLATERAL') { + slide.current.style.transform = 'translateX(0%)'; + } + if (active === 'WITHDRAW') { + slide.current.style.transform = 'translateX(-100%)'; + } + } + if (mode === 'BORROW') { + if (active === 'BORROW') { + slide.current.style.transform = 'translateX(0%)'; + } + if (active === 'REPAY') { + slide.current.style.transform = 'translateX(-100%)'; + } + } + }, [active, mode]); + + const handleSupplyUtilization = (utilizationPercentage: number) => { + setAmount( + parseFloat( + ( + (utilizationPercentage / 100) * + parseFloat(balanceData?.formatted ?? '0.0') + ).toFixed(parseInt(selectedMarketData.underlyingDecimals.toString())) + ) + ); + }; + + const supplyAmount = async (collateral: boolean = false) => { + if (!isExecutingAction && currentSdk && address && amount && amount > 0) { + setIsExecutingAction(true); + + try { + const token = currentSdk.getEIP20TokenInstance( + selectedMarketData.underlyingToken, + currentSdk.signer + ); + const hasApprovedEnough = ( + await token.callStatic.allowance(address, selectedMarketData.cToken) + ).gte(amountAsBInt); + + if (!hasApprovedEnough) { + const tx = await currentSdk.approve( + selectedMarketData.cToken, + selectedMarketData.underlyingToken + ); + + await tx.wait(); + } + + if (collateral) { + const tx = await currentSdk.enterMarkets( + selectedMarketData.cToken, + comptrollerAddress + ); + + await tx.wait(); + } + + const { tx } = await currentSdk.mint( + selectedMarketData.cToken, + amountAsBInt as any + ); + + await tx?.wait(); + + await Promise.all([ + queryClient.refetchQueries({ queryKey: ['useFusePoolData'] }), + queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }), + queryClient.refetchQueries({ queryKey: ['useMaxWithdrawAmount'] }), + queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }), + queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }), + queryClient.refetchQueries({ + queryKey: ['useSupplyCapsDataForPool'] + }), + queryClient.refetchQueries({ + queryKey: ['useBorrowCapsDataForAsset'] + }) + ]); + } catch (error) { + console.error(error); + } + } + + setIsExecutingAction(false); + }; + + const withdrawAmount = async () => { + if ( + !isExecutingAction && + currentSdk && + address && + amount && + amount > 0 && + amount <= selectedMarketData.supplyBalanceNative + ) { + setIsExecutingAction(true); + + try { + if (selectedMarketData.supplyBalanceNative === amount) { + const { tx } = await currentSdk.withdraw( + selectedMarketData.cToken, + constants.MaxUint256 + ); + + await tx?.wait(); + } else { + const { tx } = await currentSdk.withdraw( + selectedMarketData.cToken, + amountAsBInt as any + ); + + await tx?.wait(); + } + } catch (error) { + console.error(error); + } + } + + setIsExecutingAction(false); + }; + + const borrowAmount = async () => { + if ( + !isExecutingAction && + currentSdk && + address && + amount && + amount > 0 && + minBorrowAmount && + amount > (minBorrowAmount?.minBorrowUSD ?? 0) && + maxBorrowAmount && + amount <= maxBorrowAmount.number + ) { + setIsExecutingAction(true); + + try { + const { tx, errorCode } = await currentSdk.borrow( + selectedMarketData.cToken, + amountAsBInt as any + ); + + if (errorCode) { + console.error(`Borrowing error: ${errorCode}`); + } + + await tx?.wait(); + await queryClient.refetchQueries({ queryKey: ['useFusePoolData'] }); + await queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }); + await queryClient.refetchQueries({ + queryKey: ['useMaxWithdrawAmount'] + }); + await queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }); + await queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }); + await queryClient.refetchQueries({ + queryKey: ['useSupplyCapsDataForPool'] + }); + await queryClient.refetchQueries({ + queryKey: ['useBorrowCapsDataForAsset'] + }); + } catch (error) { + console.error(error); + } + } + + setIsExecutingAction(false); + }; + + const repayAmount = async () => { + if ( + !isExecutingAction && + currentSdk && + address && + amount && + amount > 0 && + currentBorrowAmountAsFloat + ) { + setIsExecutingAction(true); + + try { + const token = currentSdk.getEIP20TokenInstance( + selectedMarketData.underlyingToken, + currentSdk.signer + ); + const hasApprovedEnough = ( + await token.callStatic.allowance(address, selectedMarketData.cToken) + ).gte(amountAsBInt); + + if (!hasApprovedEnough) { + const tx = await currentSdk.approve( + selectedMarketData.cToken, + selectedMarketData.underlyingToken + ); + + await tx.wait(); + } + + const isRepayingMax = + parseInt(selectedMarketData.borrowBalance.toString()) <= + parseInt(amountAsBInt); + const { tx, errorCode } = await currentSdk.repay( + selectedMarketData.cToken, + isRepayingMax, + isRepayingMax + ? selectedMarketData.borrowBalance + : (amountAsBInt as any) + ); + + if (errorCode) { + throw new Error('Error during repaying!'); + } + + await tx?.wait(); + await queryClient.refetchQueries({ queryKey: ['useFusePoolData'] }); + await queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }); + await queryClient.refetchQueries({ + queryKey: ['useMaxWithdrawAmount'] + }); + await queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }); + await queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }); + await queryClient.refetchQueries({ + queryKey: ['useSupplyCapsDataForPool'] + }); + await queryClient.refetchQueries({ + queryKey: ['useBorrowCapsDataForAsset'] + }); + } catch (error) { + console.error(error); + } + } + + setIsExecutingAction(false); + }; + + // console.log(supplyUtilization); + // console.log(amount); + + return ( +
+
+ close router.back()} + /> +
+ modlogo +
+ + {/* all the respective slides */} + +
+ {(mode === 'SUPPLY' || mode === 'DEFAULT') && ( + <> + {/* ---------------------------------------------------------------------------- */} + {/* SUPPLY-Collateral section */} + {/* ---------------------------------------------------------------------------- */} +
+ setAmount(val ?? 0)} + amount={amount} + max={parseFloat(balanceData?.formatted ?? '0')} + symbol={balanceData?.symbol ?? ''} + /> +
+
+ COLLATERAL APR + + {collateralApr} + {/* to do: add the rewards to the calculation */} + +
+
+

+ BALANCE UTILIZATION +

+ +
+
+ Market Supply Balance + + {selectedMarketData.liquidityNative.toFixed( + parseInt(selectedMarketData.underlyingDecimals.toString()) + )}{' '} + -{'> '} + {( + selectedMarketData.liquidityNative + (amount ?? 0) + ).toFixed( + parseInt(selectedMarketData.underlyingDecimals.toString()) + )} + {/* this will be dynamic */} + +
+
+ Market Supply APR + + {collateralApr} + {/* this will be dynamic */} + +
+
+ Market Borrow Apr + + {borrowApr} + {/* this will be dynamic */} + +
+
+ + + +
+ {/* */} +
+
+ {/* ---------------------------------------------------------------------------- */} + {/* SUPPLY-Withdraw section */} + {/* ---------------------------------------------------------------------------- */} + setAmount(val ?? 0)} + amount={amount} + max={parseFloat( + selectedMarketData.supplyBalanceNative.toString() + )} + symbol={balanceData?.symbol ?? ''} + hintText="Max Withdraw" + /> +
+ +
+ Market Supply Balance + + {selectedMarketData.liquidityNative.toFixed( + parseInt(selectedMarketData.underlyingDecimals.toString()) + )}{' '} + -{'> '} + {( + selectedMarketData.liquidityNative - (amount ?? 0) + ).toFixed( + parseInt(selectedMarketData.underlyingDecimals.toString()) + )} + {/* this will be dynamic */} + +
+
+ +
+ {/* */} +
+ + )} + {(mode === 'BORROW' || mode === 'DEFAULT') && ( + <> +
+ {/* ---------------------------------------------------------------------------- */} + {/* SUPPLY-borrow section */} + {/* ---------------------------------------------------------------------------- */} + setAmount(val ?? 0)} + amount={amount} + max={maxBorrowAmount?.number ?? 0} + symbol={balanceData?.symbol ?? ''} + hintText="Max Borrow Amount" + /> +
+
+ MIN BORROW + + {formatUnits( + minBorrowAmount?.minBorrowAsset ?? '0', + parseInt(selectedMarketData.underlyingDecimals.toString()) + )} + {/* this will be dynamic */} + +
+
+ MAX BORROW + + {maxBorrowAmount?.number?.toFixed( + parseInt(selectedMarketData.underlyingDecimals.toString()) + ) ?? '0.00'} + {/* this will be dynamic */} + +
+
+
+ +
+
+
+ {/* ---------------------------------------------------------------------------- */} + {/* SUPPLY-repay section */} + {/* ---------------------------------------------------------------------------- */} + setAmount(val ?? 0)} + amount={amount} + max={parseFloat(balanceData?.formatted ?? '0')} + symbol={balanceData?.symbol ?? ''} + /> + +
+
+ CURRENTLY BORROWING + + {selectedMarketData.borrowBalanceNative.toFixed( + parseInt(selectedMarketData.underlyingDecimals.toString()) + ) ?? '0.00'} + {/* this will be dynamic */} + +
+
+
+ +
+
+ + )} +
+
+
+ ); +}; + +export default Popup; + +/*mode should be of +supply consist of collateral , withdraw + borrow ( borrow repay) +manage collateral withdraw borrow repay - default +*/ + +/*

+

colleteralT , borrowingT , lendingT , cAPR , lAPR , bAPR} */ diff --git a/packages/ui/app/_constants/mock.ts b/packages/ui/app/_constants/mock.ts new file mode 100644 index 0000000000..64a2a91cbe --- /dev/null +++ b/packages/ui/app/_constants/mock.ts @@ -0,0 +1,162 @@ +//----------donut chart + +export const donutdata = { + labels: ['Lend', 'Total'], + datasets: [ + { + // label: 'My First Dataset', + data: [30, 70], + backgroundColor: ['#3bff89ff', '#34363dff'] + } + ] +}; + +export const donutoptions = { + maintainAspectRatio: false, + // spacing :10 , + plugins: { + legend: { + display: false + } + }, + elements: { + arc: { + borderWidth: 0, + borderDash: [90] + } + } +}; + +//--------------------- flat dounuts rewards section----------- + +// export const rewardsData = { +// labels: [ +// 'Red', +// 'Blue', +// 'Yellow' +// ], +// datasets: [{ + +// data: [300, 50, 100], +// backgroundColor: [ +// 'rgb(255, 99, 132)', +// 'rgb(54, 162, 235)', +// 'rgb(255, 205, 86)' +// ], +// hoverOffset: 4 +// }] +// } + +// export const rewardsOption ={ +// maintainAspectRatio: false, +// // spacing :10 , +// plugins: { +// legend: { +// display : false, +// }}, +// elements :{ +// arc :{ +// circular : false , +// borderWidth : 0 , +// borderDash : [90] +// } +// } +// } + +//------------------------graph chart------------------- +export const chartoptions = { + responsive: true, + plugins: { + legend: { + display: false, + position: 'right' as const + }, + title: { + display: true, + text: 'Supply APR', + position: 'top' as const + } + }, + maintainAspectRatio: false, + scales: { + y: { + grid: { + display: false + } + }, + x: { + grid: { + display: false + } + } + } +}; +export const chartoptions2 = { + responsive: true, + plugins: { + legend: { + display: false + }, + title: { + display: true, + text: 'Borrow APR Variable', + position: 'top' as const + } + }, + maintainAspectRatio: false, + scales: { + y: { + grid: { + display: false + } + }, + x: { + grid: { + display: false + } + } + } +}; + +const x = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; +const y = [87, -73, 24, 45, 75, -44, 76]; + +export const chartdata = { + labels: x, + datasets: [ + { + fill: true, + label: 'Dataset 2', + data: y, + borderColor: '#3bff89ff', + backgroundColor: '#3bff8910' + } + ] +}; + +const x1 = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; +const y1 = [0, 0, 0, 0, 75, 44, 76]; + +export const chartdata2 = { + labels: x1, + datasets: [ + // { + { + fill: 'origin', + data: y1, + borderColor: '#ff3863ff', + backgroundColor: '#ff386310' + } + + // 0: fill to 'origin' + // {fill: '-1'}, // 1: fill to dataset 0 + // {fill: 1}, // 2: fill to dataset 1 + // {fill: false}, // 3: no fill + // {fill: '-2'} + // label: 'Dataset 2', + // data: y, + // borderColor: '#3bff89ff', + // backgroundColor: '#3bff8910', + // }, + ] +}; diff --git a/packages/ui/app/borrow/page.tsx b/packages/ui/app/borrow/page.tsx new file mode 100644 index 0000000000..cbbda43e3d --- /dev/null +++ b/packages/ui/app/borrow/page.tsx @@ -0,0 +1,12 @@ +'use client'; + +import { useState } from 'react'; +export default function Borrow() { + return ( +
+
+

Borrow me

+
+
+ ); +} diff --git a/packages/ui/app/dashboard/page.tsx b/packages/ui/app/dashboard/page.tsx new file mode 100644 index 0000000000..a690605222 --- /dev/null +++ b/packages/ui/app/dashboard/page.tsx @@ -0,0 +1,242 @@ +/* eslint-disable @next/next/no-img-element */ +'use client'; + +import { useState } from 'react'; +import SupplyRows from '../_components/dashboards/SupplyRows'; +import Popup from '../_components/popup/page'; +import { useSearchParams } from 'next/navigation'; +import Link from 'next/link'; +export default function Dashboard() { + const searchParams = useSearchParams(); + const popmode = searchParams.get('popmode'); + const specific = searchParams.get('specific'); + const supplyrow = [ + { + asset: 'DUSD', + amount: 168, + cAPR: 2, + sAPR: 5, + utilisation: 234, + rewards: 65 + }, + { + asset: 'DUSD', + amount: 245, + cAPR: 42, + sAPR: 54, + utilisation: 234354, + rewards: 64535 + }, + { + asset: 'DUSD', + amount: 45, + cAPR: 6, + sAPR: 765, + utilisation: 2364, + rewards: 6588 + } + ]; + return ( +
+
+
+
+
+ NET ASSET VALUE + $56,87,939 +
+
+
+

Total Collateral

+

$867

+ {/* this neeeds to be changed */} +
+
+

Total Utilization

+

$36782

+ {/* this neeeds to be changed */} +
+
+

Total Supply

+

$29387

+ {/* this neeeds to be changed */} +
+
+
+
+
+ NET APR + 2.99 % +
+
+
+

EVG. COLLATERAL APR

+

4.54%

+ {/* this neeeds to be changed */} +
+
+

EVG BORROWING APR

+

4%

+ {/* this neeeds to be changed */} +
+
+

EVG SUPPLY APR

+

78%

+ {/* this neeeds to be changed */} +
+
+
+
+
+ CLAIMABLE POINTS + 73982 +
+ + CLAIM POINTS + +
+
+
+
+

Your Collateral (supply)

+
+ searchico + +
+

Sort By

+ downarr +
+
+
+
+

SUPPLY ASSETS

+

AMOUNT

+

COLLATERAL APR

+

SUPPLY APR

+

UTILISATION

+

REWARDS

+
+ {supplyrow && + supplyrow.map((val: any, idx: number) => ( + + ))} +
+
+
+

Your Borrows (Loans)

+
+ searchico + +
+

Sort By

+ downarr +
+
+
+
+

SUPPLY ASSETS

+

AMOUNT

+

COLLATERAL APR

+

SUPPLY APR

+

UTILISATION

+

REWARDS

+
+ {supplyrow && + supplyrow.map((val: any, idx: number) => ( + + ))} +
+
+ {/* {popmode && ( + + )} */} +
+ ); +} diff --git a/packages/ui/app/favicon.ico b/packages/ui/app/favicon.ico new file mode 100644 index 0000000000..718d6fea48 Binary files /dev/null and b/packages/ui/app/favicon.ico differ diff --git a/packages/ui/app/globals.css b/packages/ui/app/globals.css new file mode 100644 index 0000000000..f5d29fb428 --- /dev/null +++ b/packages/ui/app/globals.css @@ -0,0 +1,60 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter&display=swap'); +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; +} + +@layer utilities { + .grid-cols-21 { + grid-template-columns: repeat(21, minmax(0, 1fr)); + } + .grid-cols-19 { + grid-template-columns: repeat(19, minmax(0, 1fr)); + } + .grid-cols-18 { + grid-template-columns: repeat(18, minmax(0, 1fr)); + } + .grid-cols-16 { + grid-template-columns: repeat(16, minmax(0, 1fr)); + } + input[type='number']::-webkit-inner-spin-button, + input[type='number']::-webkit-outer-spin-button { + -webkit-appearance: none; + appearance: none; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + } +} + +@media (prefers-color-scheme: light) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + } + + html { + color-scheme: dark; + } +} + +body { + color: rgb(var(--foreground-rgb)); + background: linear-gradient( + to bottom, + transparent, + rgb(var(--background-end-rgb)) + ) + rgb(var(--background-start-rgb)); +} diff --git a/packages/ui/app/layout.tsx b/packages/ui/app/layout.tsx new file mode 100644 index 0000000000..c0ae07dafc --- /dev/null +++ b/packages/ui/app/layout.tsx @@ -0,0 +1,98 @@ +'use client'; +import './globals.css'; +// import NextNProgress from "nextjs-progressbar"; +import { AppProgressBar as ProgressBar } from 'next-nprogress-bar'; +import '@rainbow-me/rainbowkit/styles.css'; + +import { + darkTheme, + getDefaultWallets, + RainbowKitProvider +} from '@rainbow-me/rainbowkit'; +import { Chain, configureChains, createClient, WagmiConfig } from 'wagmi'; +import Navbar from './_components/Navbar'; +import { jsonRpcProvider } from 'wagmi/providers/jsonRpc'; +import { getSupportedChains } from '@ui/utils/networkData'; +import { + MultiIonicContext, + MultiIonicProvider +} from '@ui/context/MultiIonicContext'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; + +const supportedChains: Chain[] = Object.values(getSupportedChains()).map( + (data) => { + return { + blockExplorers: data.specificParams.metadata.blockExplorerUrls, + iconUrl: data.specificParams.metadata.img, + id: data.chainId, + name: data.specificParams.metadata.name, + nativeCurrency: { + decimals: 18, + name: data.specificParams.metadata.nativeCurrency.name, + symbol: data.specificParams.metadata.nativeCurrency.symbol + }, + network: data.specificParams.metadata.name, + rpcUrls: data.specificParams.metadata.rpcUrls, + testnet: data.specificParams.metadata.testnet + }; + } +); +const { chains, provider } = configureChains(supportedChains, [ + jsonRpcProvider({ + rpc: (chain) => ({ + http: chain.rpcUrls.default.http[0] + }) + }) +]); + +const { connectors } = getDefaultWallets({ + appName: 'My RainbowKit App', + projectId: '3bbe45c28cc24c790a601f9cd2aa466b', + chains +}); + +const wagmiConfig = createClient({ + autoConnect: true, + connectors, + provider +}); + +const queryClient = new QueryClient(); + +export default function RootLayout({ + children +}: { + children: React.ReactNode; +}) { + return ( + + + + + + + + + {children} + + + + + + + ); +} diff --git a/packages/ui/app/lend/page.tsx b/packages/ui/app/lend/page.tsx new file mode 100644 index 0000000000..5373ff9be8 --- /dev/null +++ b/packages/ui/app/lend/page.tsx @@ -0,0 +1,12 @@ +'use client'; + +import { useState } from 'react'; +export default function Lend() { + return ( +
+
+

Lend me

+
+
+ ); +} diff --git a/packages/ui/app/market/details/[asset]/page.tsx b/packages/ui/app/market/details/[asset]/page.tsx new file mode 100644 index 0000000000..15500ac829 --- /dev/null +++ b/packages/ui/app/market/details/[asset]/page.tsx @@ -0,0 +1,338 @@ +/* eslint-disable @next/next/no-img-element */ +'use client'; +//---------------------IMPORTS------------------- +import React from 'react'; +import { useSearchParams, usePathname } from 'next/navigation'; +import { useRouter } from 'next/navigation'; + +import Link from 'next/link'; +import { + Chart as ChartJS, + CategoryScale, + LinearScale, + PointElement, + LineElement, + Title, + Tooltip, + Filler, + Legend, + ArcElement +} from 'chart.js'; +import { Line, Doughnut } from 'react-chartjs-2'; +import { + chartoptions, + chartoptions2, + chartdata, + chartdata2, + donutdata, + donutoptions +} from '../../../_constants/mock'; + +//-------------------Interfaces------------ +interface IProp { + params: { asset: string }; +} + +//------misc--------- +ChartJS.register( + CategoryScale, + LinearScale, + PointElement, + LineElement, + ArcElement, + Title, + Tooltip, + Filler, + Legend +); + +//-------------------------components----------- + +import { PieChart, Pie, Sector, Cell } from 'recharts'; +import Popup from '../../../_components/popup/page'; + +const data = [ + { name: 'Group A', value: 400 }, + { name: 'Group B', value: 300 }, + { name: 'Group C', value: 300 }, + { name: 'Group D', value: 200 } +]; +const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042']; + +const Asset = ({ params }: IProp) => { + //here we need to make a api to get the data of a certain asset (we can also check the current user with the help of wagmi) + //params.asset will be use to get the data of a certain asset + const pathname = usePathname(); + // using mock data + const assetdetails = { + asset: 'ETH', + colleteralT: 454, + borrowingT: 435, + lendingT: 65655, + cAPR: 25, + lAPR: 45, + bAPR: 8345 + }; + const router = useRouter(); + + const searchParams = useSearchParams(); + const info = searchParams.get('info'); + const popmode = searchParams.get('popmode'); + return ( +
+
+
+ router.back()} + src="/img/assets/back.png" + alt="modlogo" + className={`h-5 cursor-pointer`} + /> + {assetdetails.asset} +

{assetdetails.asset}

+ downarr +
+
+
+

Lending Supply

+

${assetdetails.lendingT}

+ {/* this neeeds to be changed */} +
+
+

Available APR

+

{assetdetails.lAPR}%

+ {/* this neeeds to be changed */} +
+
+

Total Borrows

+

${assetdetails.borrowingT}

+ {/* this neeeds to be changed */} +
+
+

Borrowing APR

+

{assetdetails.bAPR}%

+ {/* this neeeds to be changed */} +
+
+
+
+
+
+ + Supply Info + + + Borrow Info + +
+ +
+
+ +
+ +
+
+

TOTAL SUPPLIED

+

${assetdetails.borrowingT}

+

+ ${assetdetails.borrowingT} of ${assetdetails.borrowingT} +

+ {/* this neeeds to be changed */} +
+
+

APR

+

${assetdetails.bAPR}

+ {/* this neeeds to be changed */} +
+
+
+
+ {assetdetails.asset} +

+ COLLATERAL ASSET +

+

{assetdetails.asset}

+
+
+
+

Lending Supply

+

${assetdetails.lendingT}

+
+
+

Available APR

+

{assetdetails.lAPR}%

+
+
+

Total Borrows

+

${assetdetails.borrowingT}

+
+
+

Borrowing APR

+

{assetdetails.bAPR}%

+
+
+
+
+ +
+ +
+
+
+

Your Info

+

+ Wallet Info +

+

$786

+
+

+ Available to Supply{' '} +

+
+ 568793 USDC + + Supply + +
+
+ $568793 +
+

+ Available to Borrow{' '} +

+
+ 786 USDC + + Borrow + +
+
+ $867 +
+
+ warn + + To borrow you need to supply any asset to be used as collateral + +
+
+
+
+

Interest Rate Model

+
+ Interest Rate Strategy + link +
+
+
+

Utilisation Rate

+

65%

+
+
+ +
+
+
+ {/* {popmode && } */} +
+ ); +}; + +export default Asset; diff --git a/packages/ui/app/market/page.tsx b/packages/ui/app/market/page.tsx new file mode 100644 index 0000000000..590e4313df --- /dev/null +++ b/packages/ui/app/market/page.tsx @@ -0,0 +1,208 @@ +/* eslint-disable @next/next/no-img-element */ +'use client'; + +import { useMemo, useState } from 'react'; +import PoolToggle from '../_components/markets/PoolToggle'; +import PoolRows from '../_components/markets/PoolRows'; +import Popup from '../_components/popup/page'; +import { useSearchParams } from 'next/navigation'; +import { useFusePoolData } from '@ui/hooks/useFusePoolData'; +import { useChainId } from 'wagmi'; +import { MarketData } from '@ui/types/TokensDataMap'; +import { useAssets } from '@ui/hooks/useAssets'; +import { useBorrowAPYs } from '@ui/hooks/useBorrowAPYs'; +import { useTotalSupplyAPYs } from '@ui/hooks/useTotalSupplyAPYs'; +import ResultHandler from '../_components/ResultHandler'; + +export default function Market() { + const searchParams = useSearchParams(); + const popmode = searchParams.get('popmode'); + const chainId = useChainId(); + const { data: poolData, isLoading: isLoadingPoolData } = useFusePoolData( + '0', + chainId + ); + const { data: assetsBorrowAprData, isLoading: isLoadingAssetsBorrowAprData } = + useBorrowAPYs(poolData?.assets ?? [], chainId); + const { data: assetsSupplyAprData, isLoading: isLoadingAssetsSupplyAprData } = + useTotalSupplyAPYs(poolData?.assets ?? [], chainId); + const assets = useMemo( + () => poolData?.assets, + [poolData] + ); + const dataIsLoading = useMemo( + () => + isLoadingPoolData && + isLoadingAssetsBorrowAprData && + isLoadingAssetsSupplyAprData, + [ + isLoadingPoolData, + isLoadingAssetsBorrowAprData, + isLoadingAssetsSupplyAprData + ] + ); + const [selectedSymbol, setSelectedSymbol] = useState(); + const selectedMarketData = useMemo( + () => + poolData?.assets.find( + (_asset) => _asset.underlyingSymbol === selectedSymbol + ), + [selectedSymbol] + ); + + return ( +
+
+
+
+ modlogo +

Mode Market

+ downarr +
+ +
+
+

Total Market Size

+

+ $ + {poolData + ? ( + poolData?.totalLiquidityFiat + + poolData?.totalBorrowedFiat + ).toFixed(2) + : '0'} +

+ {/* this neeeds to be changed */} +
+
+

Total Available

+

+ ${poolData?.totalLiquidityFiat.toFixed(2) ?? '0'} +

+ {/* this neeeds to be changed */} +
+
+

Total Borrows

+

+ ${poolData?.totalBorrowedFiat.toFixed(2) ?? '0'} +

+ {/* this neeeds to be changed */} +
+
+
+
+
+
+

Mode Lending & Borrowing

+ {/*
+ searchico + +
+

Sort By

+ downarr +
+
*/} +
+ +
+

ASSETS

+

SUPPLY BALANCE

+

TOTAL SUPPLIED

+

BORROW BALANCE

+

TOTAL BORROWING

+

SUPPLY APR

+

BORROW APR

+

SUPPLY/BORROW

+
+ + <> + {assets && + assetsBorrowAprData && + assetsSupplyAprData && + assets.map((val: MarketData, idx: number) => ( + + ))} + + +
+
+ {popmode && selectedMarketData && poolData && ( + + )} +
+ ); +} + +{ + /*

+

colleteralT , borrowingT , lendingT , cAPR , lAPR , bAPR} */ +} diff --git a/packages/ui/app/page.tsx b/packages/ui/app/page.tsx new file mode 100644 index 0000000000..560a4e2cda --- /dev/null +++ b/packages/ui/app/page.tsx @@ -0,0 +1,13 @@ +'use client'; + +import { useState } from 'react'; +export default function Home() { + const [isdark, setIsdark] = useState(false); + return ( +
+
+ {/*

setIsdark(!isdark) }className={`text-red-500 text-3xl `}>toggle dark

*/} +
+
+ ); +} diff --git a/packages/ui/app/points/page.tsx b/packages/ui/app/points/page.tsx new file mode 100644 index 0000000000..ab7a5e42e4 --- /dev/null +++ b/packages/ui/app/points/page.tsx @@ -0,0 +1,212 @@ +/* eslint-disable @next/next/no-img-element */ +'use client'; + +import { useState } from 'react'; +import { Doughnut } from 'react-chartjs-2'; +import FlatMap from '../_components/points_comp/FlatMap'; +import StrategyROW from '../_components/points_comp/StrategyROW'; +import ReferralLeaderboard from '../_components/points_comp/ReferralLeaderboard'; + +export default function Points() { + const strategyData = [ + { + earnBy: 'referral', + amount: 2, + vaultSupply: 34, + points: 435, + percent: 45, + color: '#f3fa96ff' + }, + { + earnBy: 'supply', + amount: 54, + vaultSupply: 65, + points: 24, + percent: 53, + color: '#c768f2ff' + }, + { + earnBy: 'borrow', + amount: 67, + vaultSupply: 34, + points: 34, + percent: 35, + color: '#f29c3fff' + } + ]; + + const leaderboardData = [ + { + eid: '0x4e1b87465e51e1557e5b097f363e873d893e0ca2', + vaultSupply: 98437, + points: 34, + percent: 98 + }, + { + eid: '0x8f3a11c613CfE14980e0325d3aB4E172Fd347f1B', + vaultSupply: 3573, + points: 549, + percent: 28 + }, + { + eid: '0x1D46B84cFeBb50Cfb5b257fA32f902B1d704f513', + vaultSupply: 426, + points: 982, + percent: 78 + } + ]; + return ( +
+
+
+ modlogo +

Your Points

+
+

TOTAL AMOUNT

+

964783

+

+ Your Global Rank : 36 +

+
+
+

Points for Supply

+

873

+
+
+

Points for Borrow

+

8348

+
+
+

Points for Referal

+

27

+
+
+

Points for Extra

+

987

+
+
+ +

How do Points work ?

+ {/* this will be a link inn future */} +
+
+

Your Earning Strategy

+
+

Total Points

+

4359

+
+ + +
+

STRATEGY

+

AMOUNT

+

VAULT SUPPLY

+

POINTS

+

PERCENTAGE EARNINGS

+
+ {strategyData && + strategyData.map((val: any, idx: number) => ( + + ))} +
+ +
+

Your Top Referrals

+
+

Total Referrals

+

43

+
+
+

PERFORMER

+

ID

+

VAULT SUPPLY

+

POINTS

+

% EARNINGS

+
+ {leaderboardData && + leaderboardData.map((val: any, idx: number) => ( + + ))} +
+
+

Global Leaderboard

+
+

Total Referrals

+

43

+
+
+

PERFORMER

+

ID

+

VAULT SUPPLY

+

POINTS

+

% EARNINGS

+
+ {leaderboardData && + leaderboardData.map((val: any, idx: number) => ( + + ))} +
+
+ ); +} +// amount: 67, +// vaultSupply: 34, +// points: 34, +// percent: 345, +// vaultSupply : 426, +// points: 982, +// percent: 78, diff --git a/packages/ui/components/pages/AccountPage/FundedMarketsList/index.tsx b/packages/ui/components/pages/AccountPage/FundedMarketsList/index.tsx deleted file mode 100644 index 15695f852e..0000000000 --- a/packages/ui/components/pages/AccountPage/FundedMarketsList/index.tsx +++ /dev/null @@ -1,818 +0,0 @@ -import { ChevronLeftIcon, ChevronRightIcon, SettingsIcon } from '@chakra-ui/icons'; -import { - Box, - ButtonGroup, - Center, - Checkbox, - Flex, - Hide, - HStack, - IconButton, - Input, - Select, - Table, - Tbody, - Td, - Text, - Th, - Thead, - Tr, - VStack -} from '@chakra-ui/react'; -import type { - ColumnDef, - FilterFn, - PaginationState, - SortingFn, - SortingState, - VisibilityState -} from '@tanstack/react-table'; -import { - flexRender, - getCoreRowModel, - getExpandedRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - useReactTable -} from '@tanstack/react-table'; -import { Fragment, useEffect, useMemo, useState } from 'react'; -import * as React from 'react'; - -import { UserStats } from '@ui/components/pages/AccountPage/UserStats/index'; -import { Chain } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/Chain'; -import { PoolName } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/PoolName'; -import { AdditionalInfo } from '@ui/components/pages/PoolPage/MarketsList/AdditionalInfo/index'; -import { BorrowApy } from '@ui/components/pages/PoolPage/MarketsList/BorrowApy'; -import { BorrowBalance } from '@ui/components/pages/PoolPage/MarketsList/BorrowBalance'; -import { Liquidity } from '@ui/components/pages/PoolPage/MarketsList/Liquidity'; -import { SupplyApy } from '@ui/components/pages/PoolPage/MarketsList/SupplyApy'; -import { SupplyBalance } from '@ui/components/pages/PoolPage/MarketsList/SupplyBalance'; -import { TokenName } from '@ui/components/pages/PoolPage/MarketsList/TokenName'; -import { TotalBorrow } from '@ui/components/pages/PoolPage/MarketsList/TotalBorrow'; -import { TotalSupply } from '@ui/components/pages/PoolPage/MarketsList/TotalSupply'; -import { CButton, CIconButton } from '@ui/components/shared/Button'; -import { GradientButton } from '@ui/components/shared/GradientButton'; -import { GradientText } from '@ui/components/shared/GradientText'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TableHeaderCell } from '@ui/components/shared/TableHeaderCell'; -import { - ALL, - BORROW_APY, - BORROW_BALANCE, - BORROWABLE, - CHAIN, - COLLATERAL, - HIDDEN, - IONIC_LOCALSTORAGE_KEYS, - LIQUIDITY, - MARKET_LTV, - MARKETS_COUNT_PER_PAGE, - PAUSED, - POOL_NAME, - PROTECTED, - REWARDS, - SEARCH, - SUPPLY_APY, - SUPPLY_BALANCE, - TOTAL_BORROW, - TOTAL_SUPPLY -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import type { FundedAsset, resQuery } from '@ui/hooks/useAllFundedInfo'; -import { useColors } from '@ui/hooks/useColors'; -import { useDebounce } from '@ui/hooks/useDebounce'; -import { useIsMobile, useIsSemiSmallScreen } from '@ui/hooks/useScreenSize'; -import { sortAssets } from '@ui/utils/sorts'; - -export type Market = { - borrowApy: FundedAsset; - borrowBalance: FundedAsset; - chain: FundedAsset; - liquidity: FundedAsset; - market: FundedAsset; - poolName: FundedAsset; - supplyApy: FundedAsset; - supplyBalance: FundedAsset; - totalBorrow: FundedAsset; - totalSupply: FundedAsset; -}; - -export const FundedMarketsList = ({ - info, - initSorting, - initColumnVisibility -}: { - info: resQuery; - initColumnVisibility: VisibilityState; - initSorting: SortingState; -}) => { - const { - fundedAssets: assets, - allClaimableRewards, - totalSupplyAPYs: totalSupplyApyPerAsset, - borrowAPYs: borrowApyPerAsset, - rewards, - totalSupplyBalanceNative, - totalSupplyBalanceFiat, - totalBorrowBalanceNative, - totalBorrowBalanceFiat - } = info; - - const { address } = useMultiIonic(); - const [collateralCounts, protectedCounts, borrowableCounts, pausedCounts] = useMemo(() => { - return [ - assets.filter((asset) => asset.membership).length, - assets.filter((asset) => asset.isBorrowPaused && !asset.isSupplyPaused).length, - assets.filter((asset) => !asset.isBorrowPaused).length, - assets.filter((asset) => asset.isBorrowPaused && asset.isSupplyPaused).length - ]; - }, [assets]); - - const assetFilter: FilterFn = (row, columnId, value) => { - if ( - (!searchText || - (value.includes(SEARCH) && - (row.original.market.underlyingName.toLowerCase().includes(searchText.toLowerCase()) || - row.original.market.underlyingSymbol.toLowerCase().includes(searchText.toLowerCase()) || - row.original.market.cToken.toLowerCase().includes(searchText.toLowerCase())))) && - (!value.includes(HIDDEN) || - (value.includes(HIDDEN) && - (!row.original.market.supplyBalance.isZero() || - !row.original.market.borrowBalance.isZero()))) - ) { - if ( - value.includes(ALL) || - (value.includes(REWARDS) && - allClaimableRewards && - allClaimableRewards[row.original.market.cToken]) || - (value.includes(COLLATERAL) && row.original.market.membership) || - (value.includes(PROTECTED) && - row.original.market.isBorrowPaused && - !row.original.market.isSupplyPaused) || - (value.includes(BORROWABLE) && !row.original.market.isBorrowPaused) || - (value.includes(PAUSED) && - row.original.market.isBorrowPaused && - row.original.market.isSupplyPaused) - ) { - return true; - } else { - return false; - } - } else { - return false; - } - }; - - const assetSort: SortingFn = React.useCallback( - (rowA, rowB, columnId) => { - if (columnId === MARKET_LTV) { - return rowB.original.market.underlyingSymbol.localeCompare( - rowA.original.market.underlyingSymbol - ); - } else if (columnId === CHAIN) { - return Number(rowB.original.market.chainId) > Number(rowA.original.market.chainId) ? 1 : -1; - } else if (columnId === POOL_NAME) { - return rowB.original.market.poolName.localeCompare(rowA.original.market.poolName); - } else if (columnId === SUPPLY_APY) { - const rowASupplyAPY = totalSupplyApyPerAsset - ? totalSupplyApyPerAsset[rowA.original.market.cToken] - : 0; - const rowBSupplyAPY = totalSupplyApyPerAsset - ? totalSupplyApyPerAsset[rowB.original.market.cToken] - : 0; - return rowASupplyAPY > rowBSupplyAPY ? 1 : -1; - } else if (columnId === BORROW_APY) { - const rowABorrowAPY = - !rowA.original.market.isBorrowPaused && borrowApyPerAsset - ? borrowApyPerAsset[rowA.original.market.cToken] - : -1; - const rowBBorrowAPY = - !rowB.original.market.isBorrowPaused && borrowApyPerAsset - ? borrowApyPerAsset[rowB.original.market.cToken] - : -1; - return rowABorrowAPY > rowBBorrowAPY ? 1 : -1; - } else if (columnId === SUPPLY_BALANCE) { - return rowA.original.market.supplyBalanceFiat > rowB.original.market.supplyBalanceFiat - ? 1 - : -1; - } else if (columnId === BORROW_BALANCE) { - return rowA.original.market.borrowBalanceFiat > rowB.original.market.borrowBalanceFiat - ? 1 - : -1; - } else if (columnId === TOTAL_SUPPLY) { - return rowA.original.market.totalSupplyFiat > rowB.original.market.totalSupplyFiat ? 1 : -1; - } else if (columnId === TOTAL_BORROW) { - return rowA.original.market.totalBorrowFiat > rowB.original.market.totalBorrowFiat ? 1 : -1; - } else if (columnId === LIQUIDITY) { - const liquidityA = !rowA.original.market.isBorrowPaused - ? rowA.original.market.liquidityFiat - : -1; - const liquidityB = !rowB.original.market.isBorrowPaused - ? rowB.original.market.liquidityFiat - : -1; - return liquidityA > liquidityB ? 1 : -1; - } else { - return 0; - } - }, - [totalSupplyApyPerAsset, borrowApyPerAsset] - ); - - const data: Market[] = useMemo(() => { - return sortAssets(assets).map((asset) => { - return { - borrowApy: asset, - borrowBalance: asset, - chain: asset, - liquidity: asset, - market: asset, - poolName: asset, - supplyApy: asset, - supplyBalance: asset, - totalBorrow: asset, - totalSupply: asset - }; - }); - }, [assets]); - - const columns: ColumnDef[] = useMemo(() => { - return [ - { - accessorFn: (row) => row.chain, - cell: ({ getValue }) => ().chainId)} />, - enableHiding: false, - footer: (props) => props.column.id, - header: () => null, - id: CHAIN, - sortingFn: assetSort - }, - { - accessorFn: (row) => row.market, - cell: ({ getValue }) => ( - ()} - assets={assets} - poolAddress={getValue().comptroller} - poolChainId={Number(getValue().chainId)} - /> - ), - enableHiding: false, - filterFn: assetFilter, - footer: (props) => props.column.id, - header: (context) => Market / LTV, - id: MARKET_LTV, - sortingFn: assetSort - }, - { - accessorFn: (row) => row.poolName, - cell: ({ getValue }) => ( - ().chainId)} - comptroller={getValue().comptroller} - isDisabledTooltip={true} - poolId={Number(getValue().poolId)} - poolName={getValue().poolName} - /> - ), - enableHiding: false, - footer: (props) => props.column.id, - header: (context) => Pool Name, - id: POOL_NAME, - sortingFn: assetSort - }, - { - accessorFn: (row) => row.supplyApy, - cell: ({ getValue }) => ( - ()} - poolChainId={Number(getValue().chainId)} - rewards={rewards} - totalApy={totalSupplyApyPerAsset[getValue().cToken]?.totalApy} - /> - ), - enableSorting: !!totalSupplyApyPerAsset, - footer: (props) => props.column.id, - - header: (context) => Supply APY, - id: SUPPLY_APY, - sortingFn: assetSort - }, - { - accessorFn: (row) => row.borrowApy, - cell: ({ getValue }) => ( - ()} borrowApyPerAsset={borrowApyPerAsset} /> - ), - footer: (props) => props.column.id, - header: (context) => Borrow APY, - id: BORROW_APY, - sortingFn: assetSort - }, - { - accessorFn: (row) => row.supplyBalance, - cell: ({ getValue }) => ( - ()} - poolChainId={Number(getValue().chainId)} - /> - ), - footer: (props) => props.column.id, - header: (context) => Supply Balance, - - id: SUPPLY_BALANCE, - sortingFn: assetSort - }, - { - accessorFn: (row) => row.borrowBalance, - cell: ({ getValue }) => ( - ()} - poolChainId={Number(getValue().chainId)} - /> - ), - footer: (props) => props.column.id, - header: (context) => Borrow Balance, - - id: BORROW_BALANCE, - sortingFn: assetSort - }, - { - accessorFn: (row) => row.totalSupply, - cell: ({ getValue }) => ( - ()} - comptrollerAddress={getValue().comptroller} - poolChainId={Number(getValue().chainId)} - /> - ), - footer: (props) => props.column.id, - header: (context) => Total Supply, - - id: TOTAL_SUPPLY, - sortingFn: assetSort - }, - { - accessorFn: (row) => row.totalBorrow, - cell: ({ getValue }) => ( - ()} - comptrollerAddress={getValue().comptroller} - poolChainId={Number(getValue().chainId)} - /> - ), - footer: (props) => props.column.id, - header: (context) => Total Borrow, - - id: TOTAL_BORROW, - sortingFn: assetSort - }, - { - accessorFn: (row) => row.liquidity, - cell: ({ getValue }) => ( - ()} - poolChainId={Number(getValue().chainId)} - /> - ), - footer: (props) => props.column.id, - header: (context) => Liquidity, - - id: LIQUIDITY, - sortingFn: assetSort - } - ]; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [rewards, totalSupplyApyPerAsset, assets, borrowApyPerAsset]); - - const [sorting, setSorting] = useState(initSorting); - const [pagination, onPagination] = useState({ - pageIndex: 0, - pageSize: MARKETS_COUNT_PER_PAGE[0] - }); - const isSemiSmallScreen = useIsSemiSmallScreen(); - - const [globalFilter, setGlobalFilter] = useState([ALL]); - const [columnVisibility, setColumnVisibility] = useState(initColumnVisibility); - const [searchText, setSearchText] = useState(''); - - const table = useReactTable({ - columns, - data, - enableSortingRemoval: false, - getColumnCanGlobalFilter: () => true, - getCoreRowModel: getCoreRowModel(), - getExpandedRowModel: getExpandedRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), - getRowCanExpand: () => true, - getSortedRowModel: getSortedRowModel(), - globalFilterFn: assetFilter, - onColumnVisibilityChange: setColumnVisibility, - onGlobalFilterChange: setGlobalFilter, - onPaginationChange: onPagination, - onSortingChange: setSorting, - state: { - columnVisibility, - globalFilter, - pagination, - sorting - } - }); - - const { cCard } = useColors(); - - const onFilter = (filter: string) => { - if (globalFilter.includes(SEARCH) && globalFilter.includes(HIDDEN)) { - setGlobalFilter([filter, SEARCH, HIDDEN]); - } else if (globalFilter.includes(SEARCH)) { - setGlobalFilter([filter, SEARCH]); - } else if (globalFilter.includes(HIDDEN)) { - setGlobalFilter([filter, HIDDEN]); - } else { - setGlobalFilter([filter]); - } - }; - - const onSearchFiltered = () => { - if (searchText) { - setGlobalFilter([...globalFilter, SEARCH]); - } else { - setGlobalFilter(globalFilter.filter((f) => f !== SEARCH)); - } - }; - - useEffect(() => { - onSearchFiltered(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchText]); - - useEffect(() => { - const oldData = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - let oldObj; - if (oldData) { - oldObj = JSON.parse(oldData); - } - const arr: string[] = []; - Object.entries(columnVisibility).map(([key, value]) => { - if (value) { - arr.push(key); - } - }); - const data = { ...oldObj, userMarketColumnVisibility: arr, userMarketSorting: sorting }; - localStorage.setItem(IONIC_LOCALSTORAGE_KEYS, JSON.stringify(data)); - }, [sorting, columnVisibility]); - - return ( - - {address ? ( - <> - {/* Supply & Borrow Balance */} - - - - - ) : null} - - {/* Table Filter and Search */} - - - onFilter(ALL)} - p={0} - variant="filter" - width="80px" - > -
{`All (${data.length})`}
-
- {allClaimableRewards && Object.keys(allClaimableRewards).length !== 0 && ( - onFilter(REWARDS)} - width="115px" - > -
- - {`Rewards (${ - (allClaimableRewards && Object.keys(allClaimableRewards).length) || 0 - })`} - -
-
- )} - {collateralCounts !== 0 && ( - onFilter(COLLATERAL)} - p={0} - variant="filter" - width="125px" - > -
- {`Collateral (${collateralCounts})`} -
-
- )} - {borrowableCounts !== 0 && ( - onFilter(BORROWABLE)} - p={0} - variant="filter" - width="135px" - > -
- {`Borrowable (${borrowableCounts})`} -
-
- )} - {protectedCounts !== 0 && ( - onFilter(PROTECTED)} - p={0} - variant="filter" - width="125px" - > -
- {`Protected (${protectedCounts})`} -
-
- )} - {pausedCounts !== 0 && ( - onFilter(PAUSED)} - p={0} - variant="filter" - width="140px" - > -
- {`Paused (${pausedCounts})`} -
-
- )} -
- - - setSearchText(searchText)} /> - - Show/Hide Columns - - All - - {table.getAllColumns().map((column) => { - if (column.getCanHide()) { - return ( - - {column.id} - - ); - } - })} - - } - contentProps={{ width: '200px' }} - > - } - maxWidth={10} - variant="_outline" - /> - - -
- - {/* Market Table */} - - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - ); - })} - - ))} - - - {table.getRowModel().rows && table.getRowModel().rows.length !== 0 ? ( - table.getRowModel().rows.map((row) => ( - - row.toggleExpanded()} - > - {row.getVisibleCells().map((cell) => { - return ( - - ); - })} - - {row.getIsExpanded() && ( - - {/* 2nd row is a custom 1 cell row */} - - - )} - - )) - ) : assets.length === 0 ? ( - - - - ) : ( - - - - )} - -
- - {flexRender(header.column.columnDef.header, header.getContext())} - -
- {flexRender(cell.column.columnDef.cell, cell.getContext())} -
- -
-
There are no assets in this pool.
-
-
There are no results
-
- - {/* Pagination Elements */} - - - - Markets Per Page - - - - - - {table.getFilteredRowModel().rows.length === 0 - ? 0 - : pagination.pageIndex * pagination.pageSize + 1}{' '} - -{' '} - {(pagination.pageIndex + 1) * pagination.pageSize > - table.getFilteredRowModel().rows.length - ? table.getFilteredRowModel().rows.length - : (pagination.pageIndex + 1) * pagination.pageSize}{' '} - of {table.getFilteredRowModel().rows.length} - - - } - isDisabled={!table.getCanPreviousPage()} - isRound - onClick={() => table.previousPage()} - variant="_outline" - /> - } - isDisabled={!table.getCanNextPage()} - isRound - onClick={() => table.nextPage()} - variant="_outline" - /> - - - -
- ); -}; - -const ControlledSearchInput = ({ onUpdate }: { onUpdate: (value: string) => void }) => { - const [searchText, setSearchText] = useState(''); - const isMobile = useIsMobile(); - const debouncedText = useDebounce(searchText, 400); - - useEffect(() => { - onUpdate(debouncedText); - }, [debouncedText, onUpdate]); - - const onSearch = (e: React.ChangeEvent) => { - setSearchText(e.target.value); - }; - - return ( - - {!isMobile && Search} - - - ); -}; diff --git a/packages/ui/components/pages/AccountPage/UserStats/UserStat.tsx b/packages/ui/components/pages/AccountPage/UserStats/UserStat.tsx deleted file mode 100644 index acdaf8d2a7..0000000000 --- a/packages/ui/components/pages/AccountPage/UserStats/UserStat.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import type { StatLabelProps, StatNumberProps, StatProps } from '@chakra-ui/react'; -import { - Stat as ChakraStat, - StatLabel as ChakraStatLabel, - StatNumber as ChakraStatNumber, - Hide, - HStack, - Skeleton, - StatHelpText -} from '@chakra-ui/react'; - -import { useColors } from '@ui/hooks/useColors'; - -const StatLabel = (props: StatLabelProps) => { - const { cPage } = useColors(); - return ; -}; - -const StatNumber = (props: StatNumberProps) => { - const { cPage } = useColors(); - return ( - - ); -}; - -const Stat = (props: StatProps) => { - const { cPage } = useColors(); - return ( - - ); -}; - -export const UserStat = ({ - value, - secondValue, - label -}: { - label: string; - secondValue?: string; - value?: string; -}) => { - return ( - - {label} - - - - {value || '0.00%'} - {secondValue && ( - - {`${secondValue} / year`} - - )} - - - - {/* // {secondValue && {}} */} - - ); -}; diff --git a/packages/ui/components/pages/AccountPage/UserStats/index.tsx b/packages/ui/components/pages/AccountPage/UserStats/index.tsx deleted file mode 100644 index dd1a5f3323..0000000000 --- a/packages/ui/components/pages/AccountPage/UserStats/index.tsx +++ /dev/null @@ -1,342 +0,0 @@ -import { Box, Divider, Flex, Grid, HStack, Text, VStack } from '@chakra-ui/react'; -import { utils } from 'ethers'; -import { useMemo } from 'react'; - -import { UserStat } from '@ui/components/pages/PoolPage/UserStats/UserStat'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import type { FundedAsset } from '@ui/hooks/useAllFundedInfo'; -import { useColors } from '@ui/hooks/useColors'; -import { smallFormatter, smallUsdFormatter, tokenFormatter } from '@ui/utils/bigUtils'; -import { sortTopUserBorrowedAssets, sortTopUserSuppliedAssets } from '@ui/utils/sorts'; - -export const UserStats = ({ - assets, - totalSupplyApyPerAsset, - borrowApyPerAsset, - totalSupplyBalanceNative, - totalSupplyBalanceFiat, - totalBorrowBalanceNative, - totalBorrowBalanceFiat -}: { - assets: FundedAsset[]; - borrowApyPerAsset: { [market: string]: number }; - totalBorrowBalanceFiat: number; - totalBorrowBalanceNative: number; - totalSupplyApyPerAsset: { [market: string]: { apy: number; totalApy: number } }; - totalSupplyBalanceFiat: number; - totalSupplyBalanceNative: number; -}) => { - const [topSuppliedAssets, topBorrowedAssets] = useMemo(() => { - if (assets.length > 0) { - return [sortTopUserSuppliedAssets(assets), sortTopUserBorrowedAssets(assets)]; - } else { - return [[], []]; - } - }, [assets]); - - const totalSupplyApy = useMemo(() => { - if (totalSupplyApyPerAsset) { - if (totalSupplyBalanceNative === 0) - return { estimatedPerAsset: [], estimatedUsd: 0, totalApy: 0, totalSupplied: 0 }; - - let _totalApy = 0; - const _estimatedPerAsset: { - apy: number; - chainId: number; - estimated: number; - supplied: string; - symbol: string; - underlying: string; - }[] = []; - - let _estimatedUsd = 0; - - assets.map((asset) => { - _estimatedUsd += - totalSupplyApyPerAsset[asset.cToken].apy * asset.supplyBalanceFiat + - (totalSupplyApyPerAsset[asset.cToken].totalApy - - totalSupplyApyPerAsset[asset.cToken].apy) * - asset.netSupplyBalanceFiat; - - _totalApy += - (totalSupplyApyPerAsset[asset.cToken].apy * asset.supplyBalanceNative + - (totalSupplyApyPerAsset[asset.cToken].totalApy - - totalSupplyApyPerAsset[asset.cToken].apy) * - asset.netSupplyBalanceNative) / - totalSupplyBalanceNative; - - if (asset.supplyBalanceNative !== 0) { - const suppliedNum = parseFloat( - utils.formatUnits(asset.supplyBalance, asset.underlyingDecimals.toNumber()) - ); - - const netSuppliedNum = parseFloat( - utils.formatUnits(asset.netSupplyBalance, asset.underlyingDecimals.toNumber()) - ); - - _estimatedPerAsset.push({ - apy: totalSupplyApyPerAsset[asset.cToken].totalApy * 100, - chainId: Number(asset.chainId), - estimated: - totalSupplyApyPerAsset[asset.cToken].apy * suppliedNum + - (totalSupplyApyPerAsset[asset.cToken].totalApy - - totalSupplyApyPerAsset[asset.cToken].apy) * - netSuppliedNum, - supplied: smallFormatter(suppliedNum), - symbol: asset.underlyingSymbol, - underlying: asset.underlyingToken - }); - } - }); - - return { - estimatedPerAsset: _estimatedPerAsset, - estimatedUsd: _estimatedUsd, - totalApy: _totalApy * 100, - totalSupplied: totalSupplyBalanceFiat - }; - } - - return undefined; - }, [assets, totalSupplyBalanceNative, totalSupplyBalanceFiat, totalSupplyApyPerAsset]); - - const totalBorrowApy = useMemo(() => { - if (borrowApyPerAsset) { - if (totalBorrowBalanceNative === 0) - return { estimatedPerAsset: [], estimatedUsd: 0, totalApy: 0, totalBorrowed: 0 }; - - let _totalApy = 0; - const _estimatedPerAsset: { - apy: number; - borrowed: string; - chainId: number; - estimated: number; - symbol: string; - underlying: string; - }[] = []; - - assets.map((asset) => { - _totalApy += - (borrowApyPerAsset[asset.cToken] * asset.borrowBalanceNative) / totalBorrowBalanceNative; - - if (asset.borrowBalanceNative !== 0) { - const borrowedNum = parseFloat( - utils.formatUnits(asset.borrowBalance, asset.underlyingDecimals.toNumber()) - ); - _estimatedPerAsset.push({ - apy: borrowApyPerAsset[asset.cToken] * 100, - borrowed: smallFormatter(borrowedNum), - chainId: Number(asset.chainId), - estimated: borrowApyPerAsset[asset.cToken] * borrowedNum, - symbol: asset.underlyingSymbol, - underlying: asset.underlyingToken - }); - } - }); - - const _estimatedUsd = totalBorrowBalanceFiat * _totalApy; - - return { - estimatedPerAsset: _estimatedPerAsset, - estimatedUsd: _estimatedUsd, - totalApy: _totalApy * 100, - totalBorrowed: totalBorrowBalanceFiat - }; - } - - return undefined; - }, [assets, totalBorrowBalanceNative, totalBorrowBalanceFiat, borrowApyPerAsset]); - - const { cCard } = useColors(); - - return ( - - 0 && topSuppliedAssets[0].supplyBalanceFiat > 0 ? ( - - Top supplied assets - {topSuppliedAssets.slice(0, 3).map((asset, index) => ( - - {asset.supplyBalanceFiat > 0 && ( - - - - - {smallUsdFormatter(asset.supplyBalanceFiat)} - - - {tokenFormatter( - asset.supplyBalance, - asset.underlyingDecimals, - asset.underlyingSymbol - )} - - - - )} - - ))} - - ) : null - } - contentProps={{ p: 2, width: 'fit-content' }} - visible={topSuppliedAssets.length > 0 && topSuppliedAssets[0].supplyBalanceFiat > 0} - > - - - - - - 0 && topBorrowedAssets[0].borrowBalanceFiat > 0 ? ( - - Top borrowed assets - {topBorrowedAssets.slice(0, 3).map((asset, index) => ( - - {asset.borrowBalanceFiat > 0 && ( - - - - - {smallUsdFormatter(asset.borrowBalanceFiat)} - - - {tokenFormatter( - asset.borrowBalance, - asset.underlyingDecimals, - asset.underlyingSymbol - )} - - - - )} - - ))} - - ) : null - } - contentProps={{ p: 2, width: 'fit-content' }} - visible={topBorrowedAssets.length > 0 && topBorrowedAssets[0].borrowBalanceFiat > 0} - > - - - - - - - Effective Supply APY - - The expected annual percentage yield(APY) on supplied assets received by this account, - assuming the current variable interest rates on all supplied assets remains constant - - {totalSupplyApy && totalSupplyApy.estimatedPerAsset.length > 0 ? ( - - - - - {totalSupplyApy.estimatedPerAsset.map((data, index) => { - return ( - - - - {data.supplied} {data.symbol} at {data.apy.toFixed(2)}% APY yield{' '} - - {smallFormatter(data.estimated)} {data.symbol}/year - - - - ); - })} - - - - {smallFormatter(totalSupplyApy.totalSupplied)} USD at{' '} - {totalSupplyApy.totalApy.toFixed(2)}% APY yield{' '} - {smallFormatter(totalSupplyApy.estimatedUsd)} USD/year - - - - - ) : null} - - } - contentProps={{ minW: { base: '300px', sm: '350px' }, p: 2 }} - > - - - - - - - Effective Borrow APY - - The expected annual percentage yield(APY) on borrowed assets received by this account, - assuming the current variable interest rates on all borrowed assets remains constant - - {totalBorrowApy && totalBorrowApy.estimatedPerAsset.length > 0 ? ( - - - - - {totalBorrowApy.estimatedPerAsset.map((data, index) => { - return ( - - - - {data.borrowed} {data.symbol} at {data.apy.toFixed(2)}% APY yield{' '} - - {smallFormatter(data.estimated)} {data.symbol}/year - - - - ); - })} - - - - {smallFormatter(totalBorrowApy.totalBorrowed)} USD at{' '} - {totalBorrowApy.totalApy.toFixed(2)}% APY yield{' '} - {smallFormatter(totalBorrowApy.estimatedUsd)} USD/year - - - - - ) : null} - - } - contentProps={{ minW: { base: '300px', sm: '350px' }, p: 2 }} - > - - - - - - ); -}; diff --git a/packages/ui/components/pages/AccountPage/index.tsx b/packages/ui/components/pages/AccountPage/index.tsx deleted file mode 100644 index 834a04a2db..0000000000 --- a/packages/ui/components/pages/AccountPage/index.tsx +++ /dev/null @@ -1,175 +0,0 @@ -import { ArrowBackIcon } from '@chakra-ui/icons'; -import { Box, Flex, Grid, HStack, Skeleton, Text } from '@chakra-ui/react'; -import type { SortingState, VisibilityState } from '@tanstack/react-table'; -import Head from 'next/head'; -import { useRouter } from 'next/router'; -import { memo, useEffect, useState } from 'react'; - -import { FundedMarketsList } from '@ui/components/pages/AccountPage/FundedMarketsList/index'; -import PageLayout from '@ui/components/pages/Layout/PageLayout'; -import { UserStat } from '@ui/components/pages/PoolPage/UserStats/UserStat'; -import { Banner } from '@ui/components/shared/Banner'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import PageTransitionLayout from '@ui/components/shared/PageTransitionLayout'; -import { - IONIC_LOCALSTORAGE_KEYS, - LIQUIDITY, - MARKET_COLUMNS, - MARKET_LTV, - TOTAL_BORROW, - TOTAL_SUPPLY -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useAllFundedInfo } from '@ui/hooks/useAllFundedInfo'; -import { shortAddress } from '@ui/utils/shortAddress'; - -const AccountPage = memo(() => { - const { setGlobalLoading, address } = useMultiIonic(); - const router = useRouter(); - const [initSorting, setInitSorting] = useState(); - const [initColumnVisibility, setInitColumnVisibility] = useState(); - const { data: info } = useAllFundedInfo(); - - useEffect(() => { - const oldData = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - - if ( - oldData && - JSON.parse(oldData).userMarketSorting && - MARKET_COLUMNS.includes(JSON.parse(oldData).userMarketSorting[0].id) - ) { - setInitSorting(JSON.parse(oldData).userMarketSorting); - } else { - setInitSorting([{ desc: true, id: MARKET_LTV }]); - } - - const columnVisibility: VisibilityState = {}; - - if ( - oldData && - JSON.parse(oldData).userMarketColumnVisibility && - JSON.parse(oldData).userMarketColumnVisibility.length > 0 - ) { - MARKET_COLUMNS.map((columnId) => { - if (JSON.parse(oldData).userMarketColumnVisibility.includes(columnId)) { - columnVisibility[columnId] = true; - } else { - columnVisibility[columnId] = false; - } - }); - } else { - MARKET_COLUMNS.map((columnId) => { - if (columnId === TOTAL_SUPPLY || columnId === TOTAL_BORROW || columnId === LIQUIDITY) { - columnVisibility[columnId] = false; - } else { - columnVisibility[columnId] = true; - } - }); - } - - setInitColumnVisibility(columnVisibility); - }, []); - - return ( - <> - - Account - - - - - {address ? ( - <> - - { - setGlobalLoading(true); - router.back(); - }} - /> - - {shortAddress(address, 8, 8)} - - - - - {info && initSorting && initColumnVisibility ? ( - - ) : ( - <> - - {address ? ( - <> - - - - - - - - ) : null} - - - - - - - - - - - - - )} - - - ) : ( - - )} - - - - ); -}); - -export default AccountPage; diff --git a/packages/ui/components/pages/BorrowDetailPage/AssetsList/Asset.tsx b/packages/ui/components/pages/BorrowDetailPage/AssetsList/Asset.tsx deleted file mode 100644 index ac528a69e6..0000000000 --- a/packages/ui/components/pages/BorrowDetailPage/AssetsList/Asset.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { Button, HStack, Text } from '@chakra-ui/react'; - -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { useTokenData } from '@ui/hooks/useTokenData'; -import type { MarketData } from '@ui/types/TokensDataMap'; - -export const Asset = ({ - asset, - mixedColor, - poolChainId, - totalBorrowedFiat -}: { - asset: MarketData; - mixedColor: (ratio: number) => string; - poolChainId: number; - totalBorrowedFiat: number; -}) => { - const { data: tokenData } = useTokenData(asset.underlyingToken, poolChainId); - const percent = totalBorrowedFiat - ? Number((asset.totalSupplyFiat / totalBorrowedFiat).toFixed(4)) - : 0; - - return ( - - - - - - updateAmount(event.target.value)} - placeholder="0.0" - size={'xl'} - type="number" - value={userEnteredAmount} - variant="ghost" - /> - - {assets.map((asset, i) => { - return ( - { - setSelectedAsset(asset); - }} - p={0} - variant="_filter" - > - - - - - {asset.underlyingSymbol} - - - - - ); - })} - - } - bodyProps={{ p: 0 }} - popoverProps={{ placement: 'bottom-end', trigger: 'click' }} - > - - - - - {smallUsdFormatter(usdAmount)} - - -
- -
- - - Borrow Apr - - - {isBorrowApyLoading - ? 'Borrow Apr' - : borrowApyPerAsset && borrowApyPerAsset[selectedAsset.cToken] - ? borrowApyPerAsset[selectedAsset.cToken].toFixed(2) - : '--'}{' '} - % - - - - - Total Borrow - - {smallUsdFormatter(selectedAsset.totalBorrowFiat)} - {usdAmount ? ( - - - - {smallUsdFormatter(selectedAsset.totalBorrowFiat + usdAmount)} - - - ) : null} - - - -
- -
- - Gas Fee - - - - {borrowCaps && selectedAsset.totalBorrowFiat >= borrowCaps.usdCap ? ( - - ) : null} - - - - - {!isAuth - ? 'You are not authorized. Please contact admin to borrow' - : !isAmountValid - ? 'Amount is invalid' - : ''} - - - } - bodyProps={{ p: 0 }} - popoverProps={{ placement: 'top', variant: 'warning' }} - visible={!isAuth || !isAmountValid} - width={'100%'} - > - - - - - ); -}; - -export const getVariant = (status: string) => { - if (status === COMPLETE) return 'outlineLightGray'; - if (status === FAILED) return 'outlineRed'; - if (status === ACTIVE || status === READY) return 'solidGreen'; - if (status === INCOMPLETE) return 'solidGray'; - - return 'solidGreen'; -}; diff --git a/packages/ui/components/pages/BorrowDetailPage/Repay/index.tsx b/packages/ui/components/pages/BorrowDetailPage/Repay/index.tsx deleted file mode 100644 index 287b78ce14..0000000000 --- a/packages/ui/components/pages/BorrowDetailPage/Repay/index.tsx +++ /dev/null @@ -1,676 +0,0 @@ -import { - Button, - Divider, - Flex, - HStack, - Icon, - Input, - Skeleton, - Spinner, - Step, - StepIndicator, - Stepper, - StepSeparator, - Text, - VStack -} from '@chakra-ui/react'; -import { WETHAbi } from '@ionicprotocol/sdk'; -import { getContract } from '@ionicprotocol/sdk/dist/cjs/src/IonicSdk/utils'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import type { BigNumber } from 'ethers'; -import { constants, utils } from 'ethers'; -import { useEffect, useMemo, useState } from 'react'; -import { BsCheck, BsExclamationCircle, BsX } from 'react-icons/bs'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { RepayError } from '../../PoolPage/YourBorrows/Repay/Modal/RepayError'; -import { getVariant } from '../Borrow'; - -import { CButton } from '@ui/components/shared/Button'; -import { EllipsisText } from '@ui/components/shared/EllipsisText'; -import { Center } from '@ui/components/shared/Flex'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { - ACTIVE, - COMPLETE, - FAILED, - READY, - REPAY_STEPS, - REPAY_STEPS_WITH_WRAP -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useSdk } from '@ui/hooks/ionic/useSdk'; -import { useUsdPrice } from '@ui/hooks/useAllUsdPrices'; -import { useBorrowAPYs } from '@ui/hooks/useBorrowAPYs'; -import { useColors } from '@ui/hooks/useColors'; -import { useMaxRepayAmount } from '@ui/hooks/useMaxRepayAmount'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { useTokenBalance } from '@ui/hooks/useTokenBalance'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; -import { smallFormatter, smallUsdFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { toFixedNoRound } from '@ui/utils/formatNumber'; - -export const Repay = ({ - poolData, - selectedAsset, - setSelectedAsset -}: { - poolData: PoolData; - selectedAsset: MarketData; - setSelectedAsset: (asset: MarketData) => void; -}) => { - const { chainId, comptroller, assets: _assets } = poolData; - const assets = _assets.filter((asset) => asset.borrowBalanceFiat > 0); - - const errorToast = useErrorToast(); - const addRecentTransaction = useAddRecentTransaction(); - const queryClient = useQueryClient(); - const successToast = useSuccessToast(); - const sdk = useSdk(chainId); - - const { cIPage, cGreen } = useColors(); - const { currentSdk, address } = useMultiIonic(); - const { data: price } = useUsdPrice(chainId.toString()); - const { data: maxRepayAmount, isLoading: isMaxLoading } = useMaxRepayAmount( - selectedAsset, - chainId - ); - const { data: myBalance } = useTokenBalance(selectedAsset.underlyingToken, chainId); - const { data: myNativeBalance } = useTokenBalance( - 'NO_ADDRESS_HERE_USE_WETH_FOR_ADDRESS', - chainId - ); - - const nativeSymbol = sdk?.chainSpecificParams.metadata.nativeCurrency.symbol; - - const [steps, setSteps] = useState([...REPAY_STEPS(selectedAsset.underlyingSymbol)]); - const [isLoading, setIsLoading] = useState(false); - const [userEnteredAmount, setUserEnteredAmount] = useState(''); - const [amount, setAmount] = useState(constants.Zero); - const [usdAmount, setUsdAmount] = useState(0); - const [activeStep, setActiveStep] = useState( - REPAY_STEPS(selectedAsset.underlyingSymbol)[0] - ); - const [isAmountValid, setIsAmountValid] = useState(false); - - const { data: borrowApyPerAsset, isLoading: isBorrowApyLoading } = useBorrowAPYs(assets, chainId); - - const optionToWrap = useMemo(() => { - return ( - selectedAsset.underlyingToken === currentSdk?.chainSpecificAddresses.W_TOKEN && - myBalance?.isZero() && - !myNativeBalance?.isZero() - ); - }, [ - selectedAsset.underlyingToken, - currentSdk?.chainSpecificAddresses.W_TOKEN, - myBalance, - myNativeBalance - ]); - - useEffect(() => { - if (optionToWrap) { - setSteps([...REPAY_STEPS_WITH_WRAP(selectedAsset.underlyingSymbol)]); - setActiveStep(REPAY_STEPS_WITH_WRAP(selectedAsset.underlyingSymbol)[0]); - } else { - setSteps([...REPAY_STEPS(selectedAsset.underlyingSymbol)]); - setActiveStep(REPAY_STEPS(selectedAsset.underlyingSymbol)[0]); - } - }, [selectedAsset.underlyingSymbol, optionToWrap]); - - useEffect(() => { - if (amount.isZero() || !maxRepayAmount) { - setIsAmountValid(false); - } else { - const max = optionToWrap ? (myNativeBalance as BigNumber) : maxRepayAmount; - setIsAmountValid(amount.lte(max)); - } - }, [amount, maxRepayAmount, myNativeBalance, optionToWrap]); - - useEffect(() => { - if (price && !amount.isZero()) { - setUsdAmount( - Number(utils.formatUnits(amount, selectedAsset.underlyingDecimals)) * - Number(utils.formatUnits(selectedAsset.underlyingPrice, 18)) * - price - ); - } else { - setUsdAmount(0); - } - }, [amount, price, selectedAsset.underlyingDecimals, selectedAsset.underlyingPrice]); - - const updateAmount = (newAmount: string) => { - if (newAmount.startsWith('-') || !newAmount) { - setUserEnteredAmount(''); - setAmount(constants.Zero); - - return; - } - try { - setUserEnteredAmount(newAmount); - const bigAmount = utils.parseUnits( - toFixedNoRound(newAmount, Number(selectedAsset.underlyingDecimals)), - Number(selectedAsset.underlyingDecimals) - ); - setAmount(bigAmount); - } catch (e) { - setAmount(constants.Zero); - } - }; - - const setToMax = async () => { - if (!currentSdk || !address || !maxRepayAmount) return; - - setIsLoading(true); - - try { - let maxBN = undefined; - - if (optionToWrap) { - const debt = selectedAsset.borrowBalance; - const balance = await currentSdk.signer.getBalance(); - maxBN = balance.gt(debt) ? debt : balance; - } else { - maxBN = maxRepayAmount; - } - - if (!maxBN || maxBN.lt(constants.Zero) || maxBN.isZero()) { - updateAmount(''); - } else { - const str = utils.formatUnits(maxBN, selectedAsset.underlyingDecimals); - updateAmount(str); - } - - setIsLoading(false); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: selectedAsset.cToken - }; - const sentryInfo = { - contextName: 'Fetching max repay amount', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const onWrapNativeToken = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - _steps[0] = { - ..._steps[0], - status: ACTIVE - }; - setSteps(_steps); - - try { - const WToken = getContract( - currentSdk.chainSpecificAddresses.W_TOKEN, - WETHAbi.abi, - currentSdk.signer - ); - const tx = await WToken.deposit({ from: address, value: amount }); - - addRecentTransaction({ - description: `Wrap ${nativeSymbol}`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - setSteps(_steps); - - await tx.wait(); - - _steps[0] = { - ..._steps[0], - status: COMPLETE - }; - _steps[1] = { - ..._steps[1], - status: READY - }; - setSteps(_steps); - setActiveStep(_steps[1]); - successToast({ - description: 'Successfully Wrapped!', - id: 'Wrapped - ' + Math.random().toString() - }); - } catch (error) { - _steps[0] = { - ..._steps[0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: selectedAsset.cToken - }; - const sentryInfo = { - contextName: 'Repay - Wrapping Native Token', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - const onApprove = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: ACTIVE - }; - setSteps(_steps); - - try { - const token = currentSdk.getEIP20TokenInstance( - selectedAsset.underlyingToken, - currentSdk.signer - ); - const hasApprovedEnough = ( - await token.callStatic.allowance(address, selectedAsset.cToken) - ).gte(amount); - - if (!hasApprovedEnough) { - const tx = await currentSdk.approve(selectedAsset.cToken, selectedAsset.underlyingToken); - - addRecentTransaction({ - description: `Approve ${selectedAsset.underlyingSymbol}`, - hash: tx.hash - }); - - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - txHash: tx.hash - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 1 : 0]); - - await tx.wait(); - - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: COMPLETE - }; - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: READY - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 1 : 0]); - - successToast({ - description: 'Successfully Approved!', - id: 'Approved - ' + Math.random().toString() - }); - } else { - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: COMPLETE - }; - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: READY - }; - setSteps(_steps); - } - - setActiveStep(_steps[optionToWrap ? 2 : 1]); - } catch (error) { - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 1 : 0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: selectedAsset.cToken - }; - - const sentryInfo = { - contextName: 'Repay - Approving', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - const onRepay = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: ACTIVE - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - - try { - const isRepayingMax = amount.eq(selectedAsset.borrowBalance); - const { tx, errorCode } = await currentSdk.repay(selectedAsset.cToken, isRepayingMax, amount); - if (errorCode !== null) { - RepayError(errorCode); - } else { - addRecentTransaction({ - description: `${selectedAsset.underlyingSymbol} Token Repay`, - hash: tx.hash - }); - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - txHash: tx.hash - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - - await tx.wait(); - await queryClient.refetchQueries({ queryKey: ['usePoolData'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxWithdrawAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useSupplyCapsDataForPool'] }); - await queryClient.refetchQueries({ queryKey: ['useBorrowCapsDataForAsset'] }); - await queryClient.refetchQueries({ queryKey: ['useAssetsToBorrowData'] }); - await queryClient.refetchQueries({ queryKey: ['useYourBorrowsRowData'] }); - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: COMPLETE - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - successToast({ - description: 'Successfully repaied!', - id: 'Repay - ' + Math.random().toString() - }); - } - } catch (error) { - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: selectedAsset.cToken - }; - - const sentryInfo = { - contextName: 'Repay', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - useEffect(() => { - let _steps = [...REPAY_STEPS(selectedAsset.underlyingSymbol)]; - - if (optionToWrap) { - _steps = [...REPAY_STEPS_WITH_WRAP(selectedAsset.underlyingSymbol)]; - } - - setSteps(_steps); - }, [optionToWrap, selectedAsset.underlyingSymbol]); - - return ( - - - - Amount - - {optionToWrap ? 'Wallet Native Balance: ' : 'Wallet Balance: '} - - {optionToWrap - ? myNativeBalance - ? utils.formatUnits(myNativeBalance, selectedAsset.underlyingDecimals) - : 0 - : myBalance - ? smallFormatter( - Number(utils.formatUnits(myBalance, selectedAsset.underlyingDecimals)), - true - ) - : 0} - - - - - - updateAmount(event.target.value)} - placeholder="0.0" - size={'xl'} - type="number" - value={userEnteredAmount} - variant="ghost" - /> - - {assets.map((asset, i) => { - return ( - { - setSelectedAsset(asset); - }} - p={0} - variant="_filter" - > - - - - - {asset.underlyingSymbol} - - - - - ); - })} - - } - bodyProps={{ p: 0 }} - popoverProps={{ placement: 'bottom-end', trigger: 'click' }} - > - - - - - {smallUsdFormatter(usdAmount)} - - -
- -
- - - Borrow Apr - - - {isBorrowApyLoading - ? 'Borrow Apr' - : borrowApyPerAsset && borrowApyPerAsset[selectedAsset.cToken] - ? borrowApyPerAsset[selectedAsset.cToken].toFixed(2) - : '--'}{' '} - % - - - - - Total Borrow - - {smallUsdFormatter(selectedAsset.totalBorrowFiat)} - {usdAmount ? ( - - - - {smallUsdFormatter(selectedAsset.totalBorrowFiat - usdAmount)} - - - ) : null} - - - -
- -
- - Gas Fee - - - - - {optionToWrap ? ( - - ) : null} - - - - - Amount is invalid - - } - bodyProps={{ p: 0 }} - boxProps={{ width: '100%' }} - popoverProps={{ placement: 'top', variant: 'warning' }} - visible={!isAmountValid} - > - - - -
- - - {steps.map((step, index) => ( - - - {step.status === 'active' ? ( - - - {index + 1} - - ) : step.status === COMPLETE ? ( - - ) : step.status === FAILED ? ( - - ) : ( - {index + 1} - )} - - - - ))} - - - - ); -}; diff --git a/packages/ui/components/pages/BorrowDetailPage/index.tsx b/packages/ui/components/pages/BorrowDetailPage/index.tsx deleted file mode 100644 index 6b95d3e143..0000000000 --- a/packages/ui/components/pages/BorrowDetailPage/index.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { ArrowBackIcon } from '@chakra-ui/icons'; -import { - Flex, - HStack, - Skeleton, - Tab, - TabList, - TabPanel, - TabPanels, - Tabs, - Text, - VStack -} from '@chakra-ui/react'; -import Head from 'next/head'; -import { useRouter } from 'next/router'; -import { useEffect, useMemo, useState } from 'react'; - -import PageLayout from '../Layout/PageLayout'; - -import { AssetsList } from './AssetsList'; -import { Borrow } from './Borrow'; -import { Repay } from './Repay'; - -import { Center } from '@ui/components/shared/Flex'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import PageTransitionLayout from '@ui/components/shared/PageTransitionLayout'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { usePoolData } from '@ui/hooks/usePoolData'; -import type { MarketData } from '@ui/types/TokensDataMap'; - -export const BorrowDetailPage = () => { - const [selectedAsset, setSelectedAsset] = useState(); - const router = useRouter(); - const { setGlobalLoading } = useMultiIonic(); - const poolId = useMemo( - () => (router.isReady ? (router.query.poolId as string) : ''), - [router.isReady, router.query.poolId] - ); - const chainId = useMemo( - () => (router.isReady ? (router.query.chainId as string) : ''), - [router.isReady, router.query.chainId] - ); - const { data: poolData, isLoading: isPoolDataLoading } = usePoolData(poolId, Number(chainId)); - - useEffect(() => { - if (poolData && poolData.assets.length > 0) { - setSelectedAsset(poolData.assets.filter((asset) => !asset.isBorrowPaused)[0]); - } else { - setSelectedAsset(undefined); - } - }, [poolData]); - - return ( - <> - {poolData && ( - - {poolData.name} - - )} - - - - - {isPoolDataLoading ? ( - - - - ) : poolData && selectedAsset ? ( - - - { - setGlobalLoading(true); - router.back(); - }} - /> - - Borrow {selectedAsset.underlyingSymbol} - Repay {selectedAsset.underlyingSymbol} - - - - - - - - - - - - ) : ( -
- Something went wrong, Try again later -
- )} -
- - {isPoolDataLoading ? ( - - - - ) : poolData ? ( - - ) : ( -
- Something went wrong, Try again later -
- )} -
-
-
-
- - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/Assets.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/Assets.tsx deleted file mode 100644 index 2c3044389f..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/Assets.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { AvatarGroup, HStack, Text } from '@chakra-ui/react'; -import { useMemo } from 'react'; - -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { SHRINK_ASSETS } from '@ui/constants/index'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Assets = ({ pool }: { pool: PoolData }) => { - const tokens = useMemo(() => { - return pool.assets.filter((asset) => !asset.isBorrowPaused); - }, [pool.assets]); - - if (tokens.length === 0) return null; - - return ( - - - {tokens.slice(0, SHRINK_ASSETS).map((token, i) => ( - - ))} - - {/* TODO list hidden assets in tooltip */} - {tokens.length - SHRINK_ASSETS > 0 && ( - +{tokens.length - SHRINK_ASSETS} - )} - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/Available.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/Available.tsx deleted file mode 100644 index 12f8b5701d..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/Available.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import { useBorrowLimitTotal } from '@ui/hooks/useBorrowLimitTotal'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Available = ({ pool }: { pool: PoolData }) => { - const { assets, chainId: poolChainId, totalBorrowedFiat } = pool; - const { data: borrowLimitTotal } = useBorrowLimitTotal(assets, poolChainId); - - return ( - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/Borrow.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/Borrow.tsx deleted file mode 100644 index 661f14823a..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/Borrow.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { Button, Flex } from '@chakra-ui/react'; -import { useRouter } from 'next/router'; - -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Borrow = ({ pool }: { pool: PoolData }) => { - const router = useRouter(); - const { setGlobalLoading } = useMultiIonic(); - - return ( - - - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/BorrowBalance.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/BorrowBalance.tsx deleted file mode 100644 index 44bbebd00d..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/BorrowBalance.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { Text } from '@chakra-ui/react'; - -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const BorrowBalance = ({ pool }: { pool: PoolData }) => { - const { address } = useMultiIonic(); - - return ( - <> - {!address ? ( - - - - - - - ) : ( - - )} - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/ModeFilterButtons.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/ModeFilterButtons.tsx deleted file mode 100644 index be9fa4ea02..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/ModeFilterButtons.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import type { ButtonGroupProps } from '@chakra-ui/react'; -import { ButtonGroup, Flex, Text } from '@chakra-ui/react'; - -import { CButton } from '@ui/components/shared/Button'; -import { RowBox } from '@ui/components/shared/IonicBox'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ADVANCED_MODE, SIMPLE_MODE } from '@ui/constants/index'; -import type { LendingModeFilter } from '@ui/types/ComponentPropsType'; - -export const ModeFilterButtons = ({ - isLoading, - modeFilter, - onModeFilter, - props -}: { - isLoading: boolean; - modeFilter: LendingModeFilter; - onModeFilter: (filter: LendingModeFilter) => void; - props?: ButtonGroupProps; -}) => { - return ( - - - onModeFilter(SIMPLE_MODE)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Simple Mode - - - - onModeFilter(ADVANCED_MODE)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Advanced Mode - - - - - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/Network.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/Network.tsx deleted file mode 100644 index 3aed2f8110..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/Network.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { HStack, Img, Text } from '@chakra-ui/react'; - -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useChainConfig } from '@ui/hooks/useChainConfig'; - -export const Network = ({ chainId }: { chainId: number }) => { - const chainConfig = useChainConfig(chainId); - - return ( - - {chainConfig && ( - - - {chainConfig.specificParams.metadata.name} - {chainConfig.specificParams.metadata.shortName} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/NetworkFilterDropdown.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/NetworkFilterDropdown.tsx deleted file mode 100644 index 4ffbf5b1b8..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/NetworkFilterDropdown.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import { SpinnerIcon } from '@chakra-ui/icons'; -import type { AvatarProps, ButtonProps } from '@chakra-ui/react'; -import { - Avatar, - AvatarGroup, - Button, - Checkbox, - Flex, - HStack, - Icon, - Img, - Spinner, - Text, - VStack -} from '@chakra-ui/react'; -import type { SupportedChains } from '@ionicprotocol/types'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL_NETWORKS } from '@ui/constants/index'; -import { useChainConfig, useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useColors } from '@ui/hooks/useColors'; -import type { NetworkFilter } from '@ui/types/ComponentPropsType'; - -export const NetworkFilterDropdown = ({ - loadingStatusPerChain, - networkFilter, - onNetworkFilter, - props -}: { - loadingStatusPerChain: { [chainId: string]: boolean }; - networkFilter: NetworkFilter[]; - onNetworkFilter: (filter: NetworkFilter) => void; - props?: ButtonProps; -}) => { - const { cIRow } = useColors(); - const enabledChains = useEnabledChains(); - const chainFilter = networkFilter.filter((f) => f !== ALL_NETWORKS) as SupportedChains[]; - - return ( - - - Select Networks - onNetworkFilter(ALL_NETWORKS)} - > - All Networks - - {enabledChains.map((chainId) => { - return ( - - ); - })} - - } - popoverProps={{ placement: 'bottom-start', trigger: 'click' }} - > - - - - ); -}; - -const IconChainName = ({ - chainId, - isLoading -}: { - chainId: SupportedChains; - isLoading: boolean; -}) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - {isLoading ? ( - - ) : ( - - )} - {chainConfig.specificParams.metadata.shortName} - - ) : null; -}; - -const ChainFilterCheckbox = ({ - chainId, - onNetworkFilter, - networkFilter, - isLoading -}: { - chainId: SupportedChains; - isLoading: boolean; - networkFilter: (SupportedChains | string)[]; - onNetworkFilter: (chainId: SupportedChains) => void; -}) => { - const chainConfig = useChainConfig(chainId); - const isChecked = networkFilter.includes(chainId) || networkFilter.includes(ALL_NETWORKS); - - return chainConfig ? ( - onNetworkFilter(chainId)}> - - - ) : null; -}; - -interface ButtonContentProps extends AvatarProps { - chainId: SupportedChains; - loadingStatusPerChain: { [chainId: string]: boolean }; -} - -const ButtonContent = ({ chainId, loadingStatusPerChain, ...avatarProps }: ButtonContentProps) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - - ) : undefined - } - name={chainConfig.specificParams.metadata.shortName} - src={chainConfig.specificParams.metadata.img} - width="26px" - {...avatarProps} - /> - - ) : null; -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/PoolFilterButtons.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/PoolFilterButtons.tsx deleted file mode 100644 index ec125c83e4..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/PoolFilterButtons.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import type { ButtonGroupProps } from '@chakra-ui/react'; -import { ButtonGroup, Flex, Text } from '@chakra-ui/react'; - -import { CButton } from '@ui/components/shared/Button'; -import { RowBox } from '@ui/components/shared/IonicBox'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL_POOLS, LST, RWA, STABLECOINS } from '@ui/constants/index'; -import type { LendingPoolFilter } from '@ui/types/ComponentPropsType'; - -export const PoolFilterButtons = ({ - isLoading, - onPoolFilter, - poolFilter, - props -}: { - isLoading: boolean; - onPoolFilter: (filter: LendingPoolFilter) => void; - poolFilter: LendingPoolFilter; - props?: ButtonGroupProps; -}) => { - return ( - - - onPoolFilter(ALL_POOLS)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - All Pools - - - - onPoolFilter(LST)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - LST - - - - onPoolFilter(RWA)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - RWA - - - - onPoolFilter(STABLECOINS)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Stablecoins - - - - - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/PoolName.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/PoolName.tsx deleted file mode 100644 index 956129f1f0..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/PoolName.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { AvatarGroup, Box, Button, HStack, Link, Stack, Text, VStack } from '@chakra-ui/react'; -import { useRouter } from 'next/router'; -import { useState } from 'react'; - -import { GradientText } from '@ui/components/shared/GradientText'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { usePoolClaimableRewards } from '@ui/hooks/rewards/usePoolClaimableRewards'; -import { useRewardTokensOfPool } from '@ui/hooks/rewards/useRewardTokensOfPool'; -import { useColors } from '@ui/hooks/useColors'; - -export const PoolName = ({ - comptroller, - chainId, - poolName, - poolId, - isDisabledTooltip -}: { - chainId: number; - comptroller: string; - isDisabledTooltip?: boolean; - poolId: number; - poolName: string; -}) => { - const { setGlobalLoading } = useMultiIonic(); - const { data: rewardTokens } = useRewardTokensOfPool(comptroller, chainId); - const { data: claimableRewards } = usePoolClaimableRewards(comptroller, chainId); - const { cGreen, cIRow } = useColors(); - const router = useRouter(); - const [isHovering, setIsHovering] = useState(false); - - return ( - - - - - - - - {rewardTokens && rewardTokens.length && ( - - - Earn Rewards - - - {rewardTokens.map((token) => ( - - ))} - - - )} - - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/TotalBorrow.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/TotalBorrow.tsx deleted file mode 100644 index 882c414e77..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/TotalBorrow.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const TotalBorrow = ({ pool }: { pool: PoolData }) => { - return ( - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/BorrowVaults/index.tsx b/packages/ui/components/pages/BorrowPage/BorrowVaults/index.tsx deleted file mode 100644 index df048a2e92..0000000000 --- a/packages/ui/components/pages/BorrowPage/BorrowVaults/index.tsx +++ /dev/null @@ -1,706 +0,0 @@ -import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from '@chakra-ui/icons'; -import { - Button, - Center, - Checkbox, - Divider, - Flex, - Hide, - HStack, - Icon, - Select, - Skeleton, - Stack, - Table, - Tbody, - Td, - Text, - Th, - Thead, - Tr, - VStack -} from '@chakra-ui/react'; -import { useQuery } from '@tanstack/react-query'; -import type { - ColumnDef, - FilterFn, - PaginationState, - SortingFn, - SortingState -} from '@tanstack/react-table'; -import { - flexRender, - getCoreRowModel, - getExpandedRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - useReactTable -} from '@tanstack/react-table'; -import * as React from 'react'; -import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { Assets } from './Assets'; -import { Available } from './Available'; -import { Borrow } from './Borrow'; -import { BorrowBalance } from './BorrowBalance'; -import { ModeFilterButtons } from './ModeFilterButtons'; -import { Network } from './Network'; -import { NetworkFilterDropdown } from './NetworkFilterDropdown'; -import { PoolFilterButtons } from './PoolFilterButtons'; -import { PoolName } from './PoolName'; -import { TotalBorrow } from './TotalBorrow'; - -import { Banner } from '@ui/components/shared/Banner'; -import { CIconButton } from '@ui/components/shared/Button'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { SearchInput } from '@ui/components/shared/SearchInput'; -import { TableHeaderCell } from '@ui/components/shared/TableHeaderCell'; -import { - ALL_NETWORKS, - ALL_POOLS, - ASSETS, - AVAILABLE, - BORROW, - BORROW_BALANCE, - IONIC_LOCALSTORAGE_KEYS, - NETWORK, - POOL_NAME, - POOLS_COLUMNS, - POOLS_COUNT_PER_PAGE, - SEARCH, - SIMPLE_MODE, - TOTAL_BORROW, - TOTAL_SUPPLY, - YOUR_BALANCE -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useBorrowPools } from '@ui/hooks/borrow/useBorrowPools'; -import { useCrossPools } from '@ui/hooks/ionic/useCrossPools'; -import { useLoadingStatusPerChain } from '@ui/hooks/pools/useLoadingStatusPerChain'; -import { useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useColors } from '@ui/hooks/useColors'; -import type { - LendingFilter, - LendingModeFilter, - LendingPoolFilter, - NetworkFilter -} from '@ui/types/ComponentPropsType'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export type PoolRowData = { - assets: PoolData; - available: PoolData; - borrowBalance: PoolData; - network: PoolData; - poolName: PoolData; - totalBorrow: PoolData; -}; - -export const BorrowVaults = () => { - const enabledChains = useEnabledChains(); - const { isAllLoading, poolsPerChain, allPools, error } = useCrossPools([...enabledChains]); - const { address } = useMultiIonic(); - const [isLoading, setIsLoading] = useState(false); - const [selectedFilteredPools, setSelectedFilteredPools] = useState([]); - const [sorting, setSorting] = useState([ - { desc: true, id: address ? BORROW_BALANCE : TOTAL_BORROW } - ]); - const [pagination, onPagination] = useState({ - pageIndex: 0, - pageSize: POOLS_COUNT_PER_PAGE[0] - }); - const [poolFilter, setPoolFilter] = useState(ALL_POOLS); - const [modeFilter, setModeFilter] = useState(SIMPLE_MODE); - const [networkFilter, setNetworkFilter] = useState([ALL_NETWORKS]); - const [globalFilter, setGlobalFilter] = useState([ - poolFilter, - modeFilter, - ...networkFilter - ]); - const [searchText, setSearchText] = useState(''); - const mounted = useRef(false); - - const loadingStatusPerChain = useLoadingStatusPerChain(poolsPerChain); - - useQuery( - [ - 'selectedFilteredPools', - globalFilter, - allPools.map((pool) => pool.comptroller), - Object.values(poolsPerChain).map((query) => query.data?.map((pool) => pool.comptroller)) - ], - () => { - const pools: PoolData[] = []; - - if (globalFilter.includes(ALL_NETWORKS)) { - setSelectedFilteredPools([...allPools]); - } else { - globalFilter.map((filter) => { - const data = poolsPerChain[filter.toString()]?.data; - if (data) { - pools.push(...data); - } - }); - - setSelectedFilteredPools(pools); - } - - return null; - }, - { - enabled: Object.values(poolsPerChain).length > 0 && allPools.length > 0 - } - ); - - const globalFilterFn: FilterFn = useCallback( - (row, columnId, value) => { - const pool = row.original.network; - const namesAndSymbols: string[] = []; - pool.assets.map((asset) => { - namesAndSymbols.push( - asset.underlyingName.toLowerCase(), - asset.underlyingSymbol.toLowerCase() - ); - }); - if ( - !searchText || - (value.includes(SEARCH) && - (pool.comptroller.toLowerCase().includes(searchText.toLowerCase()) || - pool.name.toLowerCase().includes(searchText.toLowerCase()) || - namesAndSymbols.some((ns) => ns.includes(searchText.toLowerCase())))) - ) { - if (value.includes(ALL_NETWORKS) || value.includes(pool.chainId)) { - return true; - } else { - return false; - } - } else { - return false; - } - }, - [searchText] - ); - - const poolSort: SortingFn = (rowA, rowB, columnId) => { - if (columnId === NETWORK) { - return rowB.original.network.chainId > rowA.original.network.chainId ? 1 : -1; - } else if (columnId === POOL_NAME) { - return rowB.original.network.name.localeCompare(rowA.original.network.name); - } else if (columnId === BORROW_BALANCE) { - return rowA.original.network.totalBorrowBalanceFiat > - rowB.original.network.totalBorrowBalanceFiat - ? 1 - : -1; - // } else if (columnId === AVAILABLE) { - // return rowA.original.network.totalLiquidityFiat > rowB.original.network.totalLiquidityFiat - // ? 1 - // : -1; - } else if (columnId === TOTAL_BORROW) { - return rowA.original.network.totalBorrowedFiat > rowB.original.network.totalBorrowedFiat - ? 1 - : -1; - } else { - return 1; - } - }; - - const data: PoolRowData[] = useBorrowPools(allPools); - - const columns: ColumnDef[] = useMemo(() => { - return [ - { - accessorFn: (row) => row.network, - cell: ({ getValue }) => ().chainId} />, - enableHiding: false, - filterFn: globalFilterFn, - footer: (props) => props.column.id, - header: (context) => {NETWORK}, - id: NETWORK, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.poolName, - cell: ({ getValue }) => ( - ().chainId} - comptroller={getValue().comptroller} - poolId={getValue().id} - poolName={getValue().name} - /> - ), - enableHiding: false, - footer: (props) => props.column.id, - header: (context) => {POOL_NAME}, - id: POOL_NAME, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.assets, - cell: ({ getValue }) => ()} />, - enableSorting: false, - footer: (props) => props.column.id, - header: (context) => {ASSETS}, - id: ASSETS - }, - { - accessorFn: (row) => row.totalBorrow, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {TOTAL_BORROW}, - id: TOTAL_BORROW, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.available, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {AVAILABLE}, - id: AVAILABLE, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.borrowBalance, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {YOUR_BALANCE}, - id: YOUR_BALANCE, - sortingFn: poolSort - }, - { - cell: ({ row }) => { - return ; - }, - header: () => null, - id: BORROW - } - ]; - }, [globalFilterFn]); - - const table = useReactTable({ - columns, - data, - enableSortingRemoval: false, - getColumnCanGlobalFilter: () => true, - getCoreRowModel: getCoreRowModel(), - getExpandedRowModel: getExpandedRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), - getRowCanExpand: () => true, - getSortedRowModel: getSortedRowModel(), - globalFilterFn: globalFilterFn, - onGlobalFilterChange: setGlobalFilter, - onPaginationChange: onPagination, - onSortingChange: setSorting, - state: { - globalFilter, - pagination, - sorting - } - }); - - const { data: tableData } = useQuery(['BorrowPoolsTableData', table], () => { - return { - canNextPage: table.getCanNextPage(), - canPreviousPage: table.getCanPreviousPage(), - filteredRows: table.getFilteredRowModel().rows, - headerGroups: table.getHeaderGroups(), - rows: table.getRowModel().rows - }; - }); - - const { cCard, cIPage, cIRow } = useColors(); - - useEffect(() => { - if (globalFilter.includes(SEARCH)) { - setGlobalFilter([poolFilter, modeFilter, ...networkFilter, SEARCH]); - } else { - setGlobalFilter([poolFilter, modeFilter, ...networkFilter]); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [networkFilter, poolFilter, modeFilter]); - - const onNetworkFilter = (filter: NetworkFilter) => { - let _networkFilter: NetworkFilter[] = []; - - if (networkFilter.includes(filter)) { - if (filter === ALL_NETWORKS) { - _networkFilter = [enabledChains[0]]; - } else { - _networkFilter = networkFilter.filter((f) => f !== filter); - - if (_networkFilter.length === 0) { - _networkFilter = [ALL_NETWORKS]; - } - } - } else { - if (networkFilter.includes(ALL_NETWORKS)) { - _networkFilter = [filter]; - } else if ( - filter === ALL_NETWORKS || - enabledChains.length === networkFilter.filter((f) => f !== ALL_NETWORKS).length + 1 - ) { - _networkFilter = [ALL_NETWORKS]; - } else { - _networkFilter = [...networkFilter, filter]; - } - } - - setNetworkFilter(_networkFilter); - }; - - const onPoolFilter = (filter: LendingPoolFilter) => { - setPoolFilter(filter); - }; - - const onModeFilter = (filter: LendingModeFilter) => { - setModeFilter(filter); - }; - - useEffect(() => { - if (searchText) { - setGlobalFilter([...globalFilter, SEARCH]); - } else { - setGlobalFilter(globalFilter.filter((f) => f !== SEARCH)); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchText]); - - useEffect(() => { - if (mounted.current) { - const oldData = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - let oldObj; - if (oldData) { - oldObj = JSON.parse(oldData); - } - const data = { ...oldObj, globalFilter, searchText, sorting }; - localStorage.setItem(IONIC_LOCALSTORAGE_KEYS, JSON.stringify(data)); - } - }, [searchText, globalFilter, sorting]); - - useQuery( - [ - 'statusPerChain', - globalFilter, - isAllLoading, - Object.values(poolsPerChain).map((query) => { - return [query.data?.map((pool) => pool.comptroller), query.isLoading]; - }) - ], - () => { - const selectedChainIds = Object.keys(poolsPerChain).filter((chainId) => - globalFilter.includes(Number(chainId)) - ); - if (selectedChainIds.length > 0) { - let _isLoading = true; - selectedChainIds.map((chainId) => { - _isLoading = _isLoading && poolsPerChain[chainId].isLoading; - }); - setIsLoading(_isLoading); - } else { - setIsLoading(isAllLoading); - } - - return null; - }, - { - enabled: Object.values(poolsPerChain).length > 0 - } - ); - - useEffect(() => { - mounted.current = true; - - const data = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - if (data && mounted.current) { - const obj = JSON.parse(data); - const _globalFilter = (obj.globalFilter as LendingFilter[]) || [ - ALL_NETWORKS, - ALL_POOLS, - SIMPLE_MODE - ]; - setGlobalFilter(_globalFilter); - - if (obj && obj.sorting && POOLS_COLUMNS.includes(obj.sorting[0].id)) { - setSorting(obj.sorting); - } else { - setSorting([{ desc: true, id: TOTAL_SUPPLY }]); - } - } - - return () => { - mounted.current = false; - }; - }, []); - - if (error && error.code !== 'NETWORK_ERROR') { - return ( - - ); - } - - return ( - - - - Borrowing Pools - - setSearchText(searchText)} - placeholder="Search by asset or pool name" - /> -
- -
- - - Sort by - - - -
-
- - - - - - - - - - 1 Borrow - - Borrow Assets - - ETH - - - } - contentProps={{ width: '200px' }} - popoverProps={{ trigger: 'click' }} - > - - - - - - {tableData ? ( - <> - {!isLoading ? ( - - - {tableData.headerGroups.map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - ); - })} - - ))} - - - {tableData.rows && tableData.rows.length !== 0 ? ( - tableData.rows.map((row) => ( - - - {row.getVisibleCells().map((cell, index) => { - return ( - - ); - })} - - - )) - ) : selectedFilteredPools.length === 0 ? ( - - - - ) : ( - - - - )} - -
- - {flexRender(header.column.columnDef.header, header.getContext())} - -
- {flexRender(cell.column.columnDef.cell, cell.getContext())} -
-
There are no pools.
-
-
There are no results
-
- ) : ( - - - - - )} - - - - Pools Per Page - - - - - - {!tableData || tableData.filteredRows.length === 0 - ? 0 - : pagination.pageIndex * pagination.pageSize + 1}{' '} - -{' '} - {(pagination.pageIndex + 1) * pagination.pageSize > tableData.filteredRows.length - ? tableData.filteredRows.length - : (pagination.pageIndex + 1) * pagination.pageSize}{' '} - of {tableData.filteredRows.length} - - - } - isDisabled={!tableData.canPreviousPage} - isRound - onClick={() => table.previousPage()} - variant="_outline" - /> - } - isDisabled={!tableData.canNextPage} - isRound - onClick={() => table.nextPage()} - variant="_outline" - /> - - - - - ) : null} -
-
- ); -}; diff --git a/packages/ui/components/pages/BorrowPage/YourPosition.tsx b/packages/ui/components/pages/BorrowPage/YourPosition.tsx deleted file mode 100644 index 994eba9bb2..0000000000 --- a/packages/ui/components/pages/BorrowPage/YourPosition.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { Flex, Skeleton, Text, VStack } from '@chakra-ui/react'; - -import { CardBox } from '@ui/components/shared/IonicBox'; -import { LoadingText } from '@ui/components/shared/LoadingText'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useTotalSupplyAndBorrowBalance } from '@ui/hooks/lend/useTotalSupplyAndBorrowBalance'; -import { smallUsdFormatter } from '@ui/utils/bigUtils'; - -export const YourPosition = () => { - const { data, isLoading } = useTotalSupplyAndBorrowBalance(); - - return ( - - - - Your Position - - - - Borrow - - {isLoading ? ( - - ) : ( - - {data ? smallUsdFormatter(data.totalBorrowBalance, true) : '-'} - - )} - - - - - - Average APR - - - - - - 9.97% - - - - - ); -}; diff --git a/packages/ui/components/pages/BorrowPage/index.tsx b/packages/ui/components/pages/BorrowPage/index.tsx deleted file mode 100644 index 0c60cbd6b2..0000000000 --- a/packages/ui/components/pages/BorrowPage/index.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Flex } from '@chakra-ui/react'; - -import { BorrowVaults } from './BorrowVaults'; -import { YourPosition } from './YourPosition'; - -import PageLayout from '@ui/components/pages/Layout/PageLayout'; -import PageTransitionLayout from '@ui/components/shared/PageTransitionLayout'; - -export const BorrowPage = () => { - return ( - - - - - - - - - ); -}; diff --git a/packages/ui/components/pages/CreatePoolPage/CreatePoolConfiguration.tsx b/packages/ui/components/pages/CreatePoolPage/CreatePoolConfiguration.tsx deleted file mode 100644 index 33f4a48da5..0000000000 --- a/packages/ui/components/pages/CreatePoolPage/CreatePoolConfiguration.tsx +++ /dev/null @@ -1,413 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Box, - Button, - Divider, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Input, - Select, - Spinner, - Switch, - Text -} from '@chakra-ui/react'; -import { useConnectModal } from '@rainbow-me/rainbowkit'; -import { utils } from 'ethers'; -import { useRouter } from 'next/router'; -import { useMemo, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { OptionRow } from '@ui/components/pages/CreatePoolPage/OptionRow'; -import { WhitelistInfo } from '@ui/components/pages/CreatePoolPage/WhitelistInfo'; -import { Banner } from '@ui/components/shared/Banner'; -import { Center, Column } from '@ui/components/shared/Flex'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { SliderWithLabel } from '@ui/components/shared/SliderWithLabel'; -import { config } from '@ui/config/index'; -import { CLOSE_FACTOR, LIQUIDATION_INCENTIVE } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useSdk } from '@ui/hooks/ionic/useSdk'; -import { useColors } from '@ui/hooks/useColors'; -import { useIsSmallScreen } from '@ui/hooks/useScreenSize'; -import { useErrorToast, useSuccessToast, useWarningToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -type FormData = { - closeFactor: number; - isWhitelisted: boolean; - liquidationIncentive: number; - name: string; - oracle: string; - whitelist: string[]; -}; - -export const CreatePoolConfiguration = () => { - const warningToast = useWarningToast(); - const successToast = useSuccessToast(); - const errorToast = useErrorToast(); - const { openConnectModal } = useConnectModal(); - - const { currentSdk, currentChain, address } = useMultiIonic(); - const router = useRouter(); - const [isCreating, setIsCreating] = useState(false); - - const { cIPage } = useColors(); - const isMobile = useIsSmallScreen(); - const sdk = useSdk(currentChain?.id); - const isAllowedAddress = useMemo(() => { - return address ? config.allowedAddresses.includes(address.toLowerCase()) : false; - }, [address]); - - const { - control, - register, - watch, - handleSubmit, - formState: { errors } - } = useForm({ - defaultValues: { - closeFactor: 50, - isWhitelisted: false, - liquidationIncentive: 8, - name: '', - oracle: '', - whitelist: [] - } - }); - - const watchIsWhitelisted = watch('isWhitelisted', false); - const watchWhitelist = watch('whitelist', []); - - const onDeploy = async (data: FormData) => { - if (!currentSdk || !address || !currentChain) { - warningToast({ description: 'Connect your wallet!' }); - - return; - } - if (!isAllowedAddress) { - warningToast({ description: 'Pool creation is limited!' }); - - return; - } - - const { name, oracle, isWhitelisted, closeFactor, liquidationIncentive, whitelist } = data; - - setIsCreating(true); - // 50% -> 50 * (1e18 / 100) - const bigCloseFactor = utils.parseUnits(closeFactor.toString(), 16); - - // 8% -> 108 * (1e18 / 100) - const bigLiquidationIncentive = utils.parseUnits((liquidationIncentive + 100).toString(), 16); - - try { - const deployResult = await currentSdk.deployPool( - name, - isWhitelisted, - bigCloseFactor, - bigLiquidationIncentive, - oracle, - whitelist - ); - const poolId = deployResult.pop(); - - successToast({ - description: 'You may now add assets to it.', - id: 'Pool deployed - ' + Math.random().toString(), - title: 'Your pool has been deployed!' - }); - - await router.push(`/${currentChain.id}/pool/${poolId}`); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId - }; - const sentryInfo = { - contextName: 'Creating pool', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - setIsCreating(false); - } - }; - - const addToWhitelist = async (newUser: string, onChange: (v: string[]) => void) => { - onChange([...watchWhitelist, newUser]); - }; - - const removeFromWhitelist = async (removeUser: string, onChange: (v: string[]) => void) => { - onChange(watchWhitelist.filter((v) => v !== removeUser)); - }; - - return ( - - - - Create Pool - - {address && !isAllowedAddress && ( - - )} - - - - - - Name - - - - - {errors.name && errors.name.message} - - - - - - - - Oracle - - - - - {errors.oracle && errors.oracle.message} - - - - - - - - - Whitelisted - - - - - - - ( - - )} - /> - - - - - - ( - - )} - /> - - - - - - - Close Factor - - - - - - - ( - - )} - rules={{ - max: { - message: `Close Factor must be no more than ${CLOSE_FACTOR.MAX}%`, - value: CLOSE_FACTOR.MAX - }, - min: { - message: `Close Factor must be at least ${CLOSE_FACTOR.MIN}%`, - value: CLOSE_FACTOR.MIN - }, - required: 'Close factor is required' - }} - /> - - {errors.closeFactor && errors.closeFactor.message} - - - - - - - - - Liquidation Incentive - - - - - - - ( - - )} - rules={{ - max: { - message: `Liquidation incentive must be no more than ${LIQUIDATION_INCENTIVE.MAX}%`, - value: LIQUIDATION_INCENTIVE.MAX - }, - min: { - message: `Liquidation incentive must be at least ${LIQUIDATION_INCENTIVE.MIN}%`, - value: LIQUIDATION_INCENTIVE.MIN - }, - required: 'Liquidation incentive is required' - }} - /> - - {errors.liquidationIncentive && errors.liquidationIncentive.message} - - - - - - -
- {currentChain?.id && address ? ( - - ) : ( - openConnectModal && ( - - ) - )} -
-
- ); -}; diff --git a/packages/ui/components/pages/CreatePoolPage/OptionRow.tsx b/packages/ui/components/pages/CreatePoolPage/OptionRow.tsx deleted file mode 100644 index 47561003a0..0000000000 --- a/packages/ui/components/pages/CreatePoolPage/OptionRow.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import type { FlexProps } from '@chakra-ui/react'; -import type { ReactNode } from 'react'; - -import { Row } from '@ui/components/shared/Flex'; - -export const OptionRow = ({ - children, - ...others -}: FlexProps & { - children: ReactNode; -}) => { - return ( - - {children} - - ); -}; diff --git a/packages/ui/components/pages/CreatePoolPage/WhitelistInfo.tsx b/packages/ui/components/pages/CreatePoolPage/WhitelistInfo.tsx deleted file mode 100644 index fb3112994a..0000000000 --- a/packages/ui/components/pages/CreatePoolPage/WhitelistInfo.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { AddIcon } from '@chakra-ui/icons'; -import { IconButton, Input, Text } from '@chakra-ui/react'; -import { isAddress } from '@ethersproject/address'; -import { useState } from 'react'; - -import { OptionRow } from '@ui/components/pages/CreatePoolPage/OptionRow'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useErrorToast } from '@ui/hooks/useToast'; -import { shortAddress } from '@ui/utils/shortAddress'; - -export const WhitelistInfo = ({ - value, - onChange, - addToWhitelist, - removeFromWhitelist -}: { - addToWhitelist: (v: string, onChange: (v: string[]) => void) => Promise; - onChange: (v: string[]) => void; - removeFromWhitelist: (v: string, onChange: (v: string[]) => void) => Promise; - value: string[]; -}) => { - const [_whitelistInput, _setWhitelistInput] = useState(''); - - const errorToast = useErrorToast(); - - const add = () => { - if (isAddress(_whitelistInput) && !value.includes(_whitelistInput)) { - addToWhitelist(_whitelistInput, onChange); - // value.push(_whitelistInput); - // onChange(value); - _setWhitelistInput(''); - } else { - errorToast({ - description: - 'This is not a valid ethereum address (or you have already entered this address)', - id: 'Invalid address - ' + Math.random().toString() - }); - } - }; - - const remove = (user: string) => { - removeFromWhitelist(user, onChange); - // value.splice(value.indexOf(user), 1); - // onChange(value); - }; - - return ( - <> - - _setWhitelistInput(event.target.value)} - placeholder="0x0000000000000000000000000000000000000000" - type="text" - value={_whitelistInput} - /> - } - ml={2} - onClick={add} - size={'xs'} - variant={'solidGreen'} - /> - - {value && value.length > 0 && ( - - Already added: - {value.map((user, index, array) => ( - - remove(user)} - width="fit-content" - > - {shortAddress(user, 8, 6)} - {array.length - 1 === index ? null : <>, } - - - ))} - - )} - - ); -}; diff --git a/packages/ui/components/pages/CreatePoolPage/index.tsx b/packages/ui/components/pages/CreatePoolPage/index.tsx deleted file mode 100644 index 0a66c7bd79..0000000000 --- a/packages/ui/components/pages/CreatePoolPage/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { memo } from 'react'; - -import { CreatePoolConfiguration } from '@ui/components/pages/CreatePoolPage/CreatePoolConfiguration'; -import PageLayout from '@ui/components/pages/Layout/PageLayout'; -import PageTransitionLayout from '@ui/components/shared/PageTransitionLayout'; - -const PoolCreatePage = memo(() => { - return ( - - - - - - ); -}); - -export default PoolCreatePage; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/Assets.tsx b/packages/ui/components/pages/DashboardPage/Borrows/Assets.tsx deleted file mode 100644 index 2c3044389f..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/Assets.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { AvatarGroup, HStack, Text } from '@chakra-ui/react'; -import { useMemo } from 'react'; - -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { SHRINK_ASSETS } from '@ui/constants/index'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Assets = ({ pool }: { pool: PoolData }) => { - const tokens = useMemo(() => { - return pool.assets.filter((asset) => !asset.isBorrowPaused); - }, [pool.assets]); - - if (tokens.length === 0) return null; - - return ( - - - {tokens.slice(0, SHRINK_ASSETS).map((token, i) => ( - - ))} - - {/* TODO list hidden assets in tooltip */} - {tokens.length - SHRINK_ASSETS > 0 && ( - +{tokens.length - SHRINK_ASSETS} - )} - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/Available.tsx b/packages/ui/components/pages/DashboardPage/Borrows/Available.tsx deleted file mode 100644 index 12f8b5701d..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/Available.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import { useBorrowLimitTotal } from '@ui/hooks/useBorrowLimitTotal'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Available = ({ pool }: { pool: PoolData }) => { - const { assets, chainId: poolChainId, totalBorrowedFiat } = pool; - const { data: borrowLimitTotal } = useBorrowLimitTotal(assets, poolChainId); - - return ( - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/BorrowBalance.tsx b/packages/ui/components/pages/DashboardPage/Borrows/BorrowBalance.tsx deleted file mode 100644 index 44bbebd00d..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/BorrowBalance.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { Text } from '@chakra-ui/react'; - -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const BorrowBalance = ({ pool }: { pool: PoolData }) => { - const { address } = useMultiIonic(); - - return ( - <> - {!address ? ( - - - - - - - ) : ( - - )} - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/BorrowError.ts b/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/BorrowError.ts deleted file mode 100644 index bffd9431b9..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/BorrowError.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ComptrollerErrorCodes, CTokenErrorCodes } from '@ionicprotocol/types'; - -export function BorrowError(errorCode: number, minBorrowUSD?: number) { - let err; - - if (errorCode >= 1000) { - const comptrollerResponse = errorCode - 1000; - let msg = ComptrollerErrorCodes[comptrollerResponse]; - - if (msg === 'BORROW_BELOW_MIN') { - msg = `As part of our guarded launch, you cannot borrow ${ - !!minBorrowUSD ? `less than $${minBorrowUSD.toFixed(2)} worth` : 'this amount' - } of tokens at the moment.`; - } - - err = new Error('Comptroller Error: ' + msg); - } else { - err = new Error('CToken Code: ' + CTokenErrorCodes[errorCode]); - } - - throw err; -} diff --git a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/BorrowTab.tsx b/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/BorrowTab.tsx deleted file mode 100644 index c5098448e4..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/BorrowTab.tsx +++ /dev/null @@ -1,552 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - Divider, - Flex, - HStack, - Icon, - Input, - Skeleton, - Slider, - SliderFilledTrack, - SliderMark, - SliderThumb, - SliderTrack, - Text, - VStack -} from '@chakra-ui/react'; -import { FundOperationMode } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import type { BigNumber } from 'ethers'; -import { constants, utils } from 'ethers'; -import { useEffect, useMemo, useState } from 'react'; -import { BsExclamationCircle } from 'react-icons/bs'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { BorrowError } from '@ui/components/pages/PoolPage/AssetsToBorrow/Borrow/Modal/BorrowError'; -import { Banner } from '@ui/components/shared/Banner'; -import { CButton } from '@ui/components/shared/Button'; -import { EllipsisText } from '@ui/components/shared/EllipsisText'; -import { Center } from '@ui/components/shared/Flex'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { ACTIVE, BORROW_STEPS, COMPLETE, FAILED } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import useUpdatedUserAssets from '@ui/hooks/ionic/useUpdatedUserAssets'; -import { useUsdPrice } from '@ui/hooks/useAllUsdPrices'; -import { useBorrowAPYs } from '@ui/hooks/useBorrowAPYs'; -import { useBorrowLimitTotal } from '@ui/hooks/useBorrowLimitTotal'; -import { useBorrowMinimum } from '@ui/hooks/useBorrowMinimum'; -import { useColors } from '@ui/hooks/useColors'; -import { useDebtCeilingForAssetForCollateral } from '@ui/hooks/useDebtCeilingForAssetForCollateral'; -import { useMaxBorrowAmount } from '@ui/hooks/useMaxBorrowAmount'; -import { useRestricted } from '@ui/hooks/useRestricted'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; -import { smallFormatter, smallUsdFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { toCeil, toFixedNoRound } from '@ui/utils/formatNumber'; - -export const BorrowTab = ({ - poolData, - selectedAsset, - setSelectedAsset -}: { - poolData: PoolData; - selectedAsset: MarketData; - setSelectedAsset: (asset: MarketData) => void; -}) => { - const { - underlyingDecimals, - underlyingPrice, - underlyingToken, - collateralFactor, - underlyingSymbol, - cToken, - liquidity - } = selectedAsset; - const { comptroller, chainId, assets: _assets } = poolData; - const assets = _assets.filter((asset) => !asset.isBorrowPaused); - const errorToast = useErrorToast(); - const addRecentTransaction = useAddRecentTransaction(); - const queryClient = useQueryClient(); - const successToast = useSuccessToast(); - - const { cIPage, cRed } = useColors(); - const { currentSdk, address } = useMultiIonic(); - const { data: price } = useUsdPrice(chainId.toString()); - const { data: maxBorrowAmount, isLoading: isMaxLoading } = useMaxBorrowAmount( - selectedAsset, - comptroller, - chainId - ); - const { data: borrowApyPerAsset, isLoading: isBorrowApyLoading } = useBorrowAPYs(assets, chainId); - - const ltv = useMemo( - () => parseFloat(utils.formatUnits(collateralFactor, 16)), - [collateralFactor] - ); - const [steps, setSteps] = useState([...BORROW_STEPS(underlyingSymbol)]); - const [isLoading, setIsLoading] = useState(false); - const [userEnteredAmount, setUserEnteredAmount] = useState(''); - const [amount, setAmount] = useState(constants.Zero); - const [usdAmount, setUsdAmount] = useState(0); - const [activeStep, setActiveStep] = useState(BORROW_STEPS(underlyingSymbol)[0]); - const [isAmountValid, setIsAmountValid] = useState(false); - - const { data: borrowLimitTotal } = useBorrowLimitTotal(assets, chainId); - const totalBorrows = useMemo( - () => assets.reduce((acc, cur) => acc + cur.borrowBalanceFiat, 0), - // eslint-disable-next-line react-hooks/exhaustive-deps - [assets.map((asset) => asset.borrowBalanceFiat)] - ); - const index = useMemo(() => assets.findIndex((a) => a.cToken === cToken), [assets, cToken]); - const { data: updatedAssets } = useUpdatedUserAssets({ - amount, - assets, - index, - mode: FundOperationMode.BORROW, - poolChainId: chainId - }); - const updatedTotalBorrows = useMemo( - () => - updatedAssets - ? updatedAssets.reduce((acc, cur) => acc + cur.borrowBalanceFiat, 0) - : undefined, - // eslint-disable-next-line react-hooks/exhaustive-deps - [updatedAssets?.map((asset) => asset.borrowBalanceFiat)] - ); - - const { - data: { minBorrowAsset, minBorrowUSD } - } = useBorrowMinimum(selectedAsset, chainId); - const { data: debtCeilings } = useDebtCeilingForAssetForCollateral({ - assets: [selectedAsset], - collaterals: assets, - comptroller, - poolChainId: chainId - }); - const { data: restricted } = useRestricted(chainId, comptroller, debtCeilings); - - useQuery([amount, maxBorrowAmount, minBorrowAsset], () => { - if (amount.isZero() || !maxBorrowAmount || !minBorrowAsset) { - setIsAmountValid(false); - } else { - setIsAmountValid(amount.lte(maxBorrowAmount.bigNumber) && amount.gte(minBorrowAsset)); - } - - return null; - }); - - useEffect(() => { - if (price && !amount.isZero()) { - setUsdAmount( - Number(utils.formatUnits(amount, underlyingDecimals)) * - Number(utils.formatUnits(underlyingPrice, 18)) * - price - ); - } else { - setUsdAmount(0); - } - }, [amount, price, underlyingDecimals, underlyingPrice]); - - const updateAmount = (newAmount: string) => { - if (newAmount.startsWith('-') || !newAmount) { - setUserEnteredAmount(''); - setAmount(constants.Zero); - - return; - } - try { - setUserEnteredAmount(newAmount); - const bigAmount = utils.parseUnits( - toFixedNoRound(newAmount, Number(underlyingDecimals)), - Number(underlyingDecimals) - ); - setAmount(bigAmount); - } catch (e) { - setAmount(constants.Zero); - } - }; - - const setToMax = async () => { - if (!currentSdk || !address || !maxBorrowAmount) return; - - setIsLoading(true); - - try { - if (maxBorrowAmount.bigNumber.gt(constants.Zero)) { - const str = utils.formatUnits(maxBorrowAmount.bigNumber, underlyingDecimals); - updateAmount(str); - } else { - updateAmount(''); - } - - setIsLoading(false); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - const sentryInfo = { - contextName: 'Fetching max borrow amount', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const onBorrow = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - - _steps[0] = { - ..._steps[0], - status: ACTIVE - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - try { - const { tx, errorCode } = await currentSdk.borrow(cToken, amount); - if (errorCode !== null) { - BorrowError(errorCode, minBorrowUSD); - } else { - addRecentTransaction({ - description: `${underlyingSymbol} Token Borrow`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - await tx.wait(); - - await queryClient.refetchQueries({ queryKey: ['usePoolData'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxWithdrawAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useSupplyCapsDataForPool'] }); - await queryClient.refetchQueries({ queryKey: ['useBorrowCapsDataForAsset'] }); - await queryClient.refetchQueries({ queryKey: ['useYourBorrowsRowData'] }); - await queryClient.refetchQueries({ queryKey: ['useAssetsToBorrowData'] }); - - _steps[0] = { - ..._steps[0], - status: COMPLETE - }; - setSteps(_steps); - setActiveStep(_steps[0]); - successToast({ - description: 'Successfully borrowed!', - id: 'Borrow - ' + Math.random().toString() - }); - } - } catch (error) { - _steps[0] = { - ..._steps[0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - - const sentryInfo = { - contextName: 'Borrow', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - return ( - - - - - Amount - - - Available: - - {maxBorrowAmount ? smallFormatter(maxBorrowAmount.number, true) : 0} - - - - - - updateAmount(event.target.value)} - placeholder="0.0" - size={'xl'} - type="number" - value={userEnteredAmount} - variant="ghost" - /> - - {assets.map((asset, i) => { - return ( - { - setSelectedAsset(asset); - }} - p={0} - variant="_filter" - > - - - - - {asset.underlyingSymbol} - - - - - ); - })} - - } - bodyProps={{ p: 0 }} - popoverProps={{ placement: 'bottom-end', trigger: 'click' }} - > - - - - - {smallUsdFormatter(usdAmount)} - - -
- -
- - Borrow Apr - - - {isBorrowApyLoading - ? 'Borrow Apr' - : borrowApyPerAsset - ? borrowApyPerAsset[cToken] - : '--'}{' '} - % - - - -
- -
- - - - Health Ratio - - - - - 1.78{' '} - - - 1.52 - - - - My Total Borrow - - {smallUsdFormatter(totalBorrows)} - - - {' '} - {updatedTotalBorrows !== undefined - ? smallUsdFormatter(updatedTotalBorrows) - : '--'}{' '} - - - (max {borrowLimitTotal !== undefined ? smallUsdFormatter(borrowLimitTotal) : '--'}) - - - - -
- -
- - - - - LTV {parseFloat(utils.formatUnits(collateralFactor, 16)).toFixed(0)}% - - - - - - 0% - - 80% - - 100% - - - - - - - - -
- -
- - Gas Fee - - - - {liquidity.isZero() ? ( - - ) : ( - <> - - {restricted && restricted.length > 0 && ( - - )} - - )} - - - - - Enter amount - - } - bodyProps={{ p: 0 }} - boxProps={{ width: '100%' }} - popoverProps={{ placement: 'top', variant: 'warning' }} - visible={!isAmountValid} - > - - - -
- - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/RepayError.ts b/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/RepayError.ts deleted file mode 100644 index c64b58409f..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/RepayError.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ComptrollerErrorCodes, CTokenErrorCodes } from '@ionicprotocol/types'; - -export function RepayError(errorCode: number) { - let err; - - if (errorCode >= 1000) { - const comptrollerResponse = errorCode - 1000; - const msg = ComptrollerErrorCodes[comptrollerResponse]; - - err = new Error('Comptroller Error: ' + msg); - } else { - err = new Error('CToken Code: ' + CTokenErrorCodes[errorCode]); - } - - throw err; -} diff --git a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/RepayTab.tsx b/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/RepayTab.tsx deleted file mode 100644 index 003efab87d..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/RepayTab.tsx +++ /dev/null @@ -1,740 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - Divider, - Flex, - HStack, - Icon, - Input, - Skeleton, - Slider, - SliderFilledTrack, - SliderMark, - SliderThumb, - SliderTrack, - Spinner, - Step, - StepIndicator, - Stepper, - StepSeparator, - Text, - VStack -} from '@chakra-ui/react'; -import { WETHAbi } from '@ionicprotocol/sdk'; -import { getContract } from '@ionicprotocol/sdk/dist/cjs/src/IonicSdk/utils'; -import { FundOperationMode } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import type { BigNumber } from 'ethers'; -import { constants, utils } from 'ethers'; -import { useEffect, useMemo, useState } from 'react'; -import { BsCheck, BsExclamationCircle, BsX } from 'react-icons/bs'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { getVariant } from '@ui/components/pages/PoolPage/AssetsToSupply/Supply/Modal/index'; -import { RepayError } from '@ui/components/pages/PoolPage/YourBorrows/Repay/Modal/RepayError'; -import { CButton } from '@ui/components/shared/Button'; -import { EllipsisText } from '@ui/components/shared/EllipsisText'; -import { Center } from '@ui/components/shared/Flex'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { - ACTIVE, - COMPLETE, - FAILED, - READY, - REPAY_STEPS, - REPAY_STEPS_WITH_WRAP -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useSdk } from '@ui/hooks/ionic/useSdk'; -import useUpdatedUserAssets from '@ui/hooks/ionic/useUpdatedUserAssets'; -import { useUsdPrice } from '@ui/hooks/useAllUsdPrices'; -import { useBorrowLimitTotal } from '@ui/hooks/useBorrowLimitTotal'; -import { useColors } from '@ui/hooks/useColors'; -import { useMaxRepayAmount } from '@ui/hooks/useMaxRepayAmount'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { useTokenBalance } from '@ui/hooks/useTokenBalance'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; -import { smallFormatter, smallUsdFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { toFixedNoRound } from '@ui/utils/formatNumber'; - -export const RepayTab = ({ - poolData, - selectedAsset, - setSelectedAsset -}: { - poolData: PoolData; - selectedAsset: MarketData; - setSelectedAsset: (asset: MarketData) => void; -}) => { - const { - underlyingDecimals, - underlyingPrice, - underlyingToken, - underlyingSymbol, - cToken, - borrowBalance - } = selectedAsset; - const { comptroller, chainId, assets: _assets } = poolData; - const assets = _assets.filter((asset) => asset.borrowBalance.gt(constants.Zero)); - - const errorToast = useErrorToast(); - const addRecentTransaction = useAddRecentTransaction(); - const queryClient = useQueryClient(); - const successToast = useSuccessToast(); - const sdk = useSdk(chainId); - - const { cIPage, cGreen } = useColors(); - const { currentSdk, address } = useMultiIonic(); - const { data: price } = useUsdPrice(chainId.toString()); - const { data: maxRepayAmount } = useMaxRepayAmount(selectedAsset, chainId); - const { data: myBalance } = useTokenBalance(underlyingToken, chainId); - const { data: myNativeBalance } = useTokenBalance( - 'NO_ADDRESS_HERE_USE_WETH_FOR_ADDRESS', - chainId - ); - - const nativeSymbol = sdk?.chainSpecificParams.metadata.nativeCurrency.symbol; - - const [steps, setSteps] = useState([...REPAY_STEPS(underlyingSymbol)]); - const [isLoading, setIsLoading] = useState(false); - const [userEnteredAmount, setUserEnteredAmount] = useState(''); - const [amount, setAmount] = useState(constants.Zero); - const [usdAmount, setUsdAmount] = useState(0); - const [activeStep, setActiveStep] = useState(REPAY_STEPS(underlyingSymbol)[0]); - const [isAmountValid, setIsAmountValid] = useState(false); - - const { data: borrowLimitTotal } = useBorrowLimitTotal(assets, chainId); - const totalBorrows = useMemo( - () => assets.reduce((acc, cur) => acc + cur.borrowBalanceFiat, 0), - // eslint-disable-next-line react-hooks/exhaustive-deps - [assets.map((asset) => asset.borrowBalanceFiat)] - ); - const index = useMemo(() => assets.findIndex((a) => a.cToken === cToken), [assets, cToken]); - const { data: updatedAssets } = useUpdatedUserAssets({ - amount, - assets, - index, - mode: FundOperationMode.SUPPLY, - poolChainId: chainId - }); - const { data: updatedBorrowLimitTotal } = useBorrowLimitTotal(updatedAssets ?? [], chainId); - - const optionToWrap = useMemo(() => { - return ( - underlyingToken === currentSdk?.chainSpecificAddresses.W_TOKEN && - myBalance?.isZero() && - !myNativeBalance?.isZero() - ); - }, [underlyingToken, currentSdk?.chainSpecificAddresses.W_TOKEN, myBalance, myNativeBalance]); - - useEffect(() => { - if (optionToWrap) { - setSteps([...REPAY_STEPS_WITH_WRAP(underlyingSymbol)]); - setActiveStep(REPAY_STEPS_WITH_WRAP(underlyingSymbol)[0]); - } else { - setSteps([...REPAY_STEPS(underlyingSymbol)]); - setActiveStep(REPAY_STEPS(underlyingSymbol)[0]); - } - }, [underlyingSymbol, optionToWrap]); - - useEffect(() => { - if (amount.isZero() || !maxRepayAmount) { - setIsAmountValid(false); - } else { - const max = optionToWrap ? (myNativeBalance as BigNumber) : maxRepayAmount; - setIsAmountValid(amount.lte(max)); - } - }, [amount, maxRepayAmount, myNativeBalance, optionToWrap]); - - useEffect(() => { - if (price && !amount.isZero()) { - setUsdAmount( - Number(utils.formatUnits(amount, underlyingDecimals)) * - Number(utils.formatUnits(underlyingPrice, 18)) * - price - ); - } else { - setUsdAmount(0); - } - }, [amount, price, underlyingDecimals, underlyingPrice]); - - const updateAmount = (newAmount: string) => { - if (newAmount.startsWith('-') || !newAmount) { - setUserEnteredAmount(''); - setAmount(constants.Zero); - - return; - } - try { - setUserEnteredAmount(newAmount); - const bigAmount = utils.parseUnits( - toFixedNoRound(newAmount, Number(underlyingDecimals)), - Number(underlyingDecimals) - ); - setAmount(bigAmount); - } catch (e) { - setAmount(constants.Zero); - } - }; - - const setToMax = async () => { - if (!currentSdk || !address || !maxRepayAmount) return; - - setIsLoading(true); - - try { - let maxBN = undefined; - - if (optionToWrap) { - const debt = borrowBalance; - const balance = await currentSdk.signer.getBalance(); - maxBN = balance.gt(debt) ? debt : balance; - } else { - maxBN = maxRepayAmount; - } - - if (!maxBN || maxBN.lt(constants.Zero) || maxBN.isZero()) { - updateAmount(''); - } else { - const str = utils.formatUnits(maxBN, underlyingDecimals); - updateAmount(str); - } - - setIsLoading(false); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - const sentryInfo = { - contextName: 'Fetching max repay amount', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const onWrapNativeToken = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - _steps[0] = { - ..._steps[0], - status: ACTIVE - }; - setSteps(_steps); - - try { - const WToken = getContract( - currentSdk.chainSpecificAddresses.W_TOKEN, - WETHAbi.abi, - currentSdk.signer - ); - const tx = await WToken.deposit({ from: address, value: amount }); - - addRecentTransaction({ - description: `Wrap ${nativeSymbol}`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - setSteps(_steps); - - await tx.wait(); - - _steps[0] = { - ..._steps[0], - status: COMPLETE - }; - _steps[1] = { - ..._steps[1], - status: READY - }; - setSteps(_steps); - setActiveStep(_steps[1]); - successToast({ - description: 'Successfully Wrapped!', - id: 'Wrapped - ' + Math.random().toString() - }); - } catch (error) { - _steps[0] = { - ..._steps[0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - const sentryInfo = { - contextName: 'Repay - Wrapping Native Token', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - const onApprove = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: ACTIVE - }; - setSteps(_steps); - - try { - const token = currentSdk.getEIP20TokenInstance(underlyingToken, currentSdk.signer); - const hasApprovedEnough = (await token.callStatic.allowance(address, cToken)).gte(amount); - - if (!hasApprovedEnough) { - const tx = await currentSdk.approve(cToken, underlyingToken); - - addRecentTransaction({ - description: `Approve ${underlyingSymbol}`, - hash: tx.hash - }); - - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - txHash: tx.hash - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 1 : 0]); - - await tx.wait(); - - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: COMPLETE - }; - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: READY - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 1 : 0]); - - successToast({ - description: 'Successfully Approved!', - id: 'Approved - ' + Math.random().toString() - }); - } else { - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: COMPLETE - }; - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: READY - }; - setSteps(_steps); - } - - setActiveStep(_steps[optionToWrap ? 2 : 1]); - } catch (error) { - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 1 : 0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - - const sentryInfo = { - contextName: 'Repay - Approving', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - const onRepay = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: ACTIVE - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - - try { - const isRepayingMax = amount.eq(borrowBalance); - const { tx, errorCode } = await currentSdk.repay(cToken, isRepayingMax, amount); - if (errorCode !== null) { - RepayError(errorCode); - } else { - addRecentTransaction({ - description: `${underlyingSymbol} Token Repay`, - hash: tx.hash - }); - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - txHash: tx.hash - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - - await tx.wait(); - await queryClient.refetchQueries({ queryKey: ['usePoolData'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxWithdrawAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useSupplyCapsDataForPool'] }); - await queryClient.refetchQueries({ queryKey: ['useBorrowCapsDataForAsset'] }); - await queryClient.refetchQueries({ queryKey: ['useAssetsToBorrowData'] }); - await queryClient.refetchQueries({ queryKey: ['useYourBorrowsRowData'] }); - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: COMPLETE - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - successToast({ - description: 'Successfully repaied!', - id: 'Repay - ' + Math.random().toString() - }); - } - } catch (error) { - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - - const sentryInfo = { - contextName: 'Repay', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - useEffect(() => { - let _steps = [...REPAY_STEPS(underlyingSymbol)]; - - if (optionToWrap) { - _steps = [...REPAY_STEPS_WITH_WRAP(underlyingSymbol)]; - } - - setSteps(_steps); - }, [optionToWrap, underlyingSymbol]); - - return ( - - - - - Amount - - - {optionToWrap ? 'Wallet Native Balance: ' : 'Wallet Balance: '} - - {optionToWrap - ? myNativeBalance - ? utils.formatUnits(myNativeBalance, underlyingDecimals) - : 0 - : myBalance - ? smallFormatter(Number(utils.formatUnits(myBalance, underlyingDecimals)), true) - : 0} - - - - - - updateAmount(event.target.value)} - placeholder="0.0" - size={'xl'} - type="number" - value={userEnteredAmount} - variant="ghost" - /> - - {assets.map((asset, i) => { - return ( - { - setSelectedAsset(asset); - }} - p={0} - variant="_filter" - > - - - - - {asset.underlyingSymbol} - - - - - ); - })} - - } - bodyProps={{ p: 0 }} - popoverProps={{ placement: 'bottom-end', trigger: 'click' }} - > - - - - - {smallUsdFormatter(usdAmount)} - - - - 0% - - - 25% - - 50% - 75% - - 100% - - - - - - - -
- -
- - - Currently Borrowing - - 0.50 - - - - Borrow Apr - - 4.10% - - - -
- -
- - - - Borrowing Utilization - - - - - 60% - - 80% - - 100% - - - - - - - - -
- -
- - - Collateral Balance ({underlyingSymbol}) - 1.0000031 - - - Borrow Limit - - {smallUsdFormatter(totalBorrows)} - - (max {borrowLimitTotal !== undefined ? smallUsdFormatter(borrowLimitTotal) : '--'} - - - - {updatedBorrowLimitTotal !== undefined - ? smallUsdFormatter(updatedBorrowLimitTotal) - : '--'} - ) - - - - - Daily Earnings - {`<$0.01`} - - - - {optionToWrap ? ( - - ) : null} - - - - - Amount is invalid - - } - bodyProps={{ p: 0 }} - boxProps={{ width: '100%' }} - popoverProps={{ placement: 'top', variant: 'warning' }} - visible={!isAmountValid} - > - - - -
- - - {steps.map((step, index) => ( - - - {step.status === 'active' ? ( - - - {index + 1} - - ) : step.status === 'complete' ? ( - - ) : step.status === 'failed' ? ( - - ) : ( - {index + 1} - )} - - - - ))} - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/index.tsx b/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/index.tsx deleted file mode 100644 index b3692b0db8..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/Manage/BorrowAndRepayModal/index.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { Flex, HStack, Tab, TabList, TabPanel, TabPanels, Tabs } from '@chakra-ui/react'; -import { constants } from 'ethers'; -import { useEffect, useState } from 'react'; - -import { BorrowTab } from './BorrowTab'; -import { RepayTab } from './RepayTab'; - -import { CardBox } from '@ui/components/shared/IonicBox'; -import { IonicModal } from '@ui/components/shared/Modal'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; - -export const BorrowAndRepayModal = ({ - isOpen, - onClose, - poolData -}: { - isOpen: boolean; - onClose: () => void; - poolData: PoolData; -}) => { - const [selectedBorrowAsset, setSelectedBorrowAsset] = useState(); - const [selectedRepayAsset, setSelectedRepayAsset] = useState(); - - useEffect(() => { - if (poolData && poolData.assets.length > 0) { - setSelectedBorrowAsset(poolData.assets.filter((asset) => !asset.isBorrowPaused)[0]); - } else { - setSelectedBorrowAsset(undefined); - } - }, [poolData]); - - useEffect(() => { - if (poolData && poolData.assets.length > 0) { - setSelectedRepayAsset( - poolData.assets.filter((asset) => asset.borrowBalance.gt(constants.Zero))[0] - ); - } else { - setSelectedRepayAsset(undefined); - } - }, [poolData]); - - return ( - - - - - - Borrow - Repay - - - - - {selectedBorrowAsset ? ( - - ) : null} - - - {selectedRepayAsset ? ( - - ) : null} - - - - - - } - isOpen={isOpen} - onClose={onClose} - /> - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/Manage/index.tsx b/packages/ui/components/pages/DashboardPage/Borrows/Manage/index.tsx deleted file mode 100644 index 6b7a6357b3..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/Manage/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Button, Flex, useDisclosure } from '@chakra-ui/react'; - -import { BorrowAndRepayModal } from './BorrowAndRepayModal'; - -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const BorrowManage = ({ poolData }: { poolData: PoolData }) => { - const { isOpen: isModalOpen, onOpen: openModal, onClose: closeModal } = useDisclosure(); - - return ( - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/ModeFilterButtons.tsx b/packages/ui/components/pages/DashboardPage/Borrows/ModeFilterButtons.tsx deleted file mode 100644 index be9fa4ea02..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/ModeFilterButtons.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import type { ButtonGroupProps } from '@chakra-ui/react'; -import { ButtonGroup, Flex, Text } from '@chakra-ui/react'; - -import { CButton } from '@ui/components/shared/Button'; -import { RowBox } from '@ui/components/shared/IonicBox'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ADVANCED_MODE, SIMPLE_MODE } from '@ui/constants/index'; -import type { LendingModeFilter } from '@ui/types/ComponentPropsType'; - -export const ModeFilterButtons = ({ - isLoading, - modeFilter, - onModeFilter, - props -}: { - isLoading: boolean; - modeFilter: LendingModeFilter; - onModeFilter: (filter: LendingModeFilter) => void; - props?: ButtonGroupProps; -}) => { - return ( - - - onModeFilter(SIMPLE_MODE)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Simple Mode - - - - onModeFilter(ADVANCED_MODE)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Advanced Mode - - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/Network.tsx b/packages/ui/components/pages/DashboardPage/Borrows/Network.tsx deleted file mode 100644 index 3aed2f8110..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/Network.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { HStack, Img, Text } from '@chakra-ui/react'; - -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useChainConfig } from '@ui/hooks/useChainConfig'; - -export const Network = ({ chainId }: { chainId: number }) => { - const chainConfig = useChainConfig(chainId); - - return ( - - {chainConfig && ( - - - {chainConfig.specificParams.metadata.name} - {chainConfig.specificParams.metadata.shortName} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/NetworkFilterDropdown.tsx b/packages/ui/components/pages/DashboardPage/Borrows/NetworkFilterDropdown.tsx deleted file mode 100644 index 4ffbf5b1b8..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/NetworkFilterDropdown.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import { SpinnerIcon } from '@chakra-ui/icons'; -import type { AvatarProps, ButtonProps } from '@chakra-ui/react'; -import { - Avatar, - AvatarGroup, - Button, - Checkbox, - Flex, - HStack, - Icon, - Img, - Spinner, - Text, - VStack -} from '@chakra-ui/react'; -import type { SupportedChains } from '@ionicprotocol/types'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL_NETWORKS } from '@ui/constants/index'; -import { useChainConfig, useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useColors } from '@ui/hooks/useColors'; -import type { NetworkFilter } from '@ui/types/ComponentPropsType'; - -export const NetworkFilterDropdown = ({ - loadingStatusPerChain, - networkFilter, - onNetworkFilter, - props -}: { - loadingStatusPerChain: { [chainId: string]: boolean }; - networkFilter: NetworkFilter[]; - onNetworkFilter: (filter: NetworkFilter) => void; - props?: ButtonProps; -}) => { - const { cIRow } = useColors(); - const enabledChains = useEnabledChains(); - const chainFilter = networkFilter.filter((f) => f !== ALL_NETWORKS) as SupportedChains[]; - - return ( - - - Select Networks - onNetworkFilter(ALL_NETWORKS)} - > - All Networks - - {enabledChains.map((chainId) => { - return ( - - ); - })} - - } - popoverProps={{ placement: 'bottom-start', trigger: 'click' }} - > - - - - ); -}; - -const IconChainName = ({ - chainId, - isLoading -}: { - chainId: SupportedChains; - isLoading: boolean; -}) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - {isLoading ? ( - - ) : ( - - )} - {chainConfig.specificParams.metadata.shortName} - - ) : null; -}; - -const ChainFilterCheckbox = ({ - chainId, - onNetworkFilter, - networkFilter, - isLoading -}: { - chainId: SupportedChains; - isLoading: boolean; - networkFilter: (SupportedChains | string)[]; - onNetworkFilter: (chainId: SupportedChains) => void; -}) => { - const chainConfig = useChainConfig(chainId); - const isChecked = networkFilter.includes(chainId) || networkFilter.includes(ALL_NETWORKS); - - return chainConfig ? ( - onNetworkFilter(chainId)}> - - - ) : null; -}; - -interface ButtonContentProps extends AvatarProps { - chainId: SupportedChains; - loadingStatusPerChain: { [chainId: string]: boolean }; -} - -const ButtonContent = ({ chainId, loadingStatusPerChain, ...avatarProps }: ButtonContentProps) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - - ) : undefined - } - name={chainConfig.specificParams.metadata.shortName} - src={chainConfig.specificParams.metadata.img} - width="26px" - {...avatarProps} - /> - - ) : null; -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/PoolFilterButtons.tsx b/packages/ui/components/pages/DashboardPage/Borrows/PoolFilterButtons.tsx deleted file mode 100644 index ec125c83e4..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/PoolFilterButtons.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import type { ButtonGroupProps } from '@chakra-ui/react'; -import { ButtonGroup, Flex, Text } from '@chakra-ui/react'; - -import { CButton } from '@ui/components/shared/Button'; -import { RowBox } from '@ui/components/shared/IonicBox'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL_POOLS, LST, RWA, STABLECOINS } from '@ui/constants/index'; -import type { LendingPoolFilter } from '@ui/types/ComponentPropsType'; - -export const PoolFilterButtons = ({ - isLoading, - onPoolFilter, - poolFilter, - props -}: { - isLoading: boolean; - onPoolFilter: (filter: LendingPoolFilter) => void; - poolFilter: LendingPoolFilter; - props?: ButtonGroupProps; -}) => { - return ( - - - onPoolFilter(ALL_POOLS)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - All Pools - - - - onPoolFilter(LST)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - LST - - - - onPoolFilter(RWA)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - RWA - - - - onPoolFilter(STABLECOINS)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Stablecoins - - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/PoolName.tsx b/packages/ui/components/pages/DashboardPage/Borrows/PoolName.tsx deleted file mode 100644 index 956129f1f0..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/PoolName.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { AvatarGroup, Box, Button, HStack, Link, Stack, Text, VStack } from '@chakra-ui/react'; -import { useRouter } from 'next/router'; -import { useState } from 'react'; - -import { GradientText } from '@ui/components/shared/GradientText'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { usePoolClaimableRewards } from '@ui/hooks/rewards/usePoolClaimableRewards'; -import { useRewardTokensOfPool } from '@ui/hooks/rewards/useRewardTokensOfPool'; -import { useColors } from '@ui/hooks/useColors'; - -export const PoolName = ({ - comptroller, - chainId, - poolName, - poolId, - isDisabledTooltip -}: { - chainId: number; - comptroller: string; - isDisabledTooltip?: boolean; - poolId: number; - poolName: string; -}) => { - const { setGlobalLoading } = useMultiIonic(); - const { data: rewardTokens } = useRewardTokensOfPool(comptroller, chainId); - const { data: claimableRewards } = usePoolClaimableRewards(comptroller, chainId); - const { cGreen, cIRow } = useColors(); - const router = useRouter(); - const [isHovering, setIsHovering] = useState(false); - - return ( - - - - - - - - {rewardTokens && rewardTokens.length && ( - - - Earn Rewards - - - {rewardTokens.map((token) => ( - - ))} - - - )} - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/TotalBorrow.tsx b/packages/ui/components/pages/DashboardPage/Borrows/TotalBorrow.tsx deleted file mode 100644 index 882c414e77..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/TotalBorrow.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const TotalBorrow = ({ pool }: { pool: PoolData }) => { - return ( - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Borrows/index.tsx b/packages/ui/components/pages/DashboardPage/Borrows/index.tsx deleted file mode 100644 index a79567032a..0000000000 --- a/packages/ui/components/pages/DashboardPage/Borrows/index.tsx +++ /dev/null @@ -1,610 +0,0 @@ -import { ChevronLeftIcon, ChevronRightIcon } from '@chakra-ui/icons'; -import { - Center, - Divider, - Flex, - Hide, - HStack, - Select, - Skeleton, - Stack, - Table, - Tbody, - Td, - Text, - Th, - Thead, - Tr -} from '@chakra-ui/react'; -import { useQuery } from '@tanstack/react-query'; -import type { - ColumnDef, - FilterFn, - PaginationState, - SortingFn, - SortingState -} from '@tanstack/react-table'; -import { - flexRender, - getCoreRowModel, - getExpandedRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - useReactTable -} from '@tanstack/react-table'; -import * as React from 'react'; -import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'; - -import { Assets } from './Assets'; -import { Available } from './Available'; -import { BorrowBalance } from './BorrowBalance'; -import { BorrowManage } from './Manage'; -import { Network } from './Network'; -import { NetworkFilterDropdown } from './NetworkFilterDropdown'; -import { PoolName } from './PoolName'; -import { TotalBorrow } from './TotalBorrow'; - -import { Banner } from '@ui/components/shared/Banner'; -import { CIconButton } from '@ui/components/shared/Button'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import { SearchInput } from '@ui/components/shared/SearchInput'; -import { TableHeaderCell } from '@ui/components/shared/TableHeaderCell'; -import { - ALL_NETWORKS, - ALL_POOLS, - ASSETS, - AVAILABLE, - BORROW, - BORROW_BALANCE, - IONIC_LOCALSTORAGE_KEYS, - NETWORK, - POOL_NAME, - POOLS_COLUMNS, - POOLS_COUNT_PER_PAGE, - SEARCH, - SIMPLE_MODE, - TOTAL_BORROW, - TOTAL_SUPPLY, - YOUR_BALANCE -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useBorrowPools } from '@ui/hooks/borrow/useBorrowPools'; -import { useCrossPools } from '@ui/hooks/ionic/useCrossPools'; -import { useLoadingStatusPerChain } from '@ui/hooks/pools/useLoadingStatusPerChain'; -import { useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useColors } from '@ui/hooks/useColors'; -import type { LendingFilter, NetworkFilter } from '@ui/types/ComponentPropsType'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export type PoolRowData = { - assets: PoolData; - available: PoolData; - borrowBalance: PoolData; - network: PoolData; - poolName: PoolData; - totalBorrow: PoolData; -}; - -export const Borrows = () => { - const enabledChains = useEnabledChains(); - const { isAllLoading, poolsPerChain, allPools, error } = useCrossPools([...enabledChains]); - const { address } = useMultiIonic(); - const [isLoading, setIsLoading] = useState(false); - const [selectedFilteredPools, setSelectedFilteredPools] = useState([]); - const [sorting, setSorting] = useState([ - { desc: true, id: address ? BORROW_BALANCE : TOTAL_BORROW } - ]); - const [pagination, onPagination] = useState({ - pageIndex: 0, - pageSize: POOLS_COUNT_PER_PAGE[0] - }); - const [networkFilter, setNetworkFilter] = useState([ALL_NETWORKS]); - const [globalFilter, setGlobalFilter] = useState([...networkFilter]); - const [searchText, setSearchText] = useState(''); - const mounted = useRef(false); - - const loadingStatusPerChain = useLoadingStatusPerChain(poolsPerChain); - - useQuery( - [ - 'selectedFilteredPools', - globalFilter, - allPools.map((pool) => pool.comptroller), - Object.values(poolsPerChain).map((query) => query.data?.map((pool) => pool.comptroller)) - ], - () => { - const pools: PoolData[] = []; - - if (globalFilter.includes(ALL_NETWORKS)) { - setSelectedFilteredPools([...allPools]); - } else { - globalFilter.map((filter) => { - const data = poolsPerChain[filter.toString()]?.data; - if (data) { - pools.push(...data); - } - }); - - setSelectedFilteredPools(pools); - } - - return null; - }, - { - enabled: Object.values(poolsPerChain).length > 0 && allPools.length > 0 - } - ); - - const globalFilterFn: FilterFn = useCallback( - (row, columnId, value) => { - const pool = row.original.network; - const namesAndSymbols: string[] = []; - pool.assets.map((asset) => { - namesAndSymbols.push( - asset.underlyingName.toLowerCase(), - asset.underlyingSymbol.toLowerCase() - ); - }); - if ( - !searchText || - (value.includes(SEARCH) && - (pool.comptroller.toLowerCase().includes(searchText.toLowerCase()) || - pool.name.toLowerCase().includes(searchText.toLowerCase()) || - namesAndSymbols.some((ns) => ns.includes(searchText.toLowerCase())))) - ) { - if (value.includes(ALL_NETWORKS) || value.includes(pool.chainId)) { - return true; - } else { - return false; - } - } else { - return false; - } - }, - [searchText] - ); - - const poolSort: SortingFn = (rowA, rowB, columnId) => { - if (columnId === NETWORK) { - return rowB.original.network.chainId > rowA.original.network.chainId ? 1 : -1; - } else if (columnId === POOL_NAME) { - return rowB.original.network.name.localeCompare(rowA.original.network.name); - } else if (columnId === BORROW_BALANCE) { - return rowA.original.network.totalBorrowBalanceFiat > - rowB.original.network.totalBorrowBalanceFiat - ? 1 - : -1; - // } else if (columnId === AVAILABLE) { - // return rowA.original.network.totalLiquidityFiat > rowB.original.network.totalLiquidityFiat - // ? 1 - // : -1; - } else if (columnId === TOTAL_BORROW) { - return rowA.original.network.totalBorrowedFiat > rowB.original.network.totalBorrowedFiat - ? 1 - : -1; - } else { - return 1; - } - }; - - const data: PoolRowData[] = useBorrowPools(allPools); - - const columns: ColumnDef[] = useMemo(() => { - return [ - { - accessorFn: (row) => row.network, - cell: ({ getValue }) => ().chainId} />, - enableHiding: false, - filterFn: globalFilterFn, - footer: (props) => props.column.id, - header: (context) => {NETWORK}, - id: NETWORK, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.poolName, - cell: ({ getValue }) => ( - ().chainId} - comptroller={getValue().comptroller} - poolId={getValue().id} - poolName={getValue().name} - /> - ), - enableHiding: false, - footer: (props) => props.column.id, - header: (context) => {POOL_NAME}, - id: POOL_NAME, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.assets, - cell: ({ getValue }) => ()} />, - enableSorting: false, - footer: (props) => props.column.id, - header: (context) => {ASSETS}, - id: ASSETS - }, - { - accessorFn: (row) => row.totalBorrow, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {TOTAL_BORROW}, - id: TOTAL_BORROW, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.available, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {AVAILABLE}, - id: AVAILABLE, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.borrowBalance, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {YOUR_BALANCE}, - id: YOUR_BALANCE, - sortingFn: poolSort - }, - { - cell: ({ row }) => { - return ; - }, - header: () => null, - id: BORROW - } - ]; - }, [globalFilterFn]); - - const table = useReactTable({ - columns, - data, - enableSortingRemoval: false, - getColumnCanGlobalFilter: () => true, - getCoreRowModel: getCoreRowModel(), - getExpandedRowModel: getExpandedRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), - getRowCanExpand: () => true, - getSortedRowModel: getSortedRowModel(), - globalFilterFn: globalFilterFn, - onGlobalFilterChange: setGlobalFilter, - onPaginationChange: onPagination, - onSortingChange: setSorting, - state: { - globalFilter, - pagination, - sorting - } - }); - - const { data: tableData } = useQuery(['BorrowPoolsTableData', table], () => { - return { - canNextPage: table.getCanNextPage(), - canPreviousPage: table.getCanPreviousPage(), - filteredRows: table.getFilteredRowModel().rows, - headerGroups: table.getHeaderGroups(), - rows: table.getRowModel().rows - }; - }); - - const { cCard, cIPage, cIRow } = useColors(); - - useEffect(() => { - if (globalFilter.includes(SEARCH)) { - setGlobalFilter([...networkFilter, SEARCH]); - } else { - setGlobalFilter([...networkFilter]); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [networkFilter]); - - const onNetworkFilter = (filter: NetworkFilter) => { - let _networkFilter: NetworkFilter[] = []; - - if (networkFilter.includes(filter)) { - if (filter === ALL_NETWORKS) { - _networkFilter = [enabledChains[0]]; - } else { - _networkFilter = networkFilter.filter((f) => f !== filter); - - if (_networkFilter.length === 0) { - _networkFilter = [ALL_NETWORKS]; - } - } - } else { - if (networkFilter.includes(ALL_NETWORKS)) { - _networkFilter = [filter]; - } else if ( - filter === ALL_NETWORKS || - enabledChains.length === networkFilter.filter((f) => f !== ALL_NETWORKS).length + 1 - ) { - _networkFilter = [ALL_NETWORKS]; - } else { - _networkFilter = [...networkFilter, filter]; - } - } - - setNetworkFilter(_networkFilter); - }; - - useEffect(() => { - if (searchText) { - setGlobalFilter([...globalFilter, SEARCH]); - } else { - setGlobalFilter(globalFilter.filter((f) => f !== SEARCH)); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchText]); - - useEffect(() => { - if (mounted.current) { - const oldData = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - let oldObj; - if (oldData) { - oldObj = JSON.parse(oldData); - } - const data = { ...oldObj, globalFilter, searchText, sorting }; - localStorage.setItem(IONIC_LOCALSTORAGE_KEYS, JSON.stringify(data)); - } - }, [searchText, globalFilter, sorting]); - - useQuery( - [ - 'statusPerChain', - globalFilter, - isAllLoading, - Object.values(poolsPerChain).map((query) => { - return [query.data?.map((pool) => pool.comptroller), query.isLoading]; - }) - ], - () => { - const selectedChainIds = Object.keys(poolsPerChain).filter((chainId) => - globalFilter.includes(Number(chainId)) - ); - if (selectedChainIds.length > 0) { - let _isLoading = true; - selectedChainIds.map((chainId) => { - _isLoading = _isLoading && poolsPerChain[chainId].isLoading; - }); - setIsLoading(_isLoading); - } else { - setIsLoading(isAllLoading); - } - - return null; - }, - { - enabled: Object.values(poolsPerChain).length > 0 - } - ); - - useEffect(() => { - mounted.current = true; - - const data = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - if (data && mounted.current) { - const obj = JSON.parse(data); - const _globalFilter = (obj.globalFilter as LendingFilter[]) || [ - ALL_NETWORKS, - ALL_POOLS, - SIMPLE_MODE - ]; - setGlobalFilter(_globalFilter); - - if (obj && obj.sorting && POOLS_COLUMNS.includes(obj.sorting[0].id)) { - setSorting(obj.sorting); - } else { - setSorting([{ desc: true, id: TOTAL_SUPPLY }]); - } - } - - return () => { - mounted.current = false; - }; - }, []); - - if (error && error.code !== 'NETWORK_ERROR') { - return ( - - ); - } - - return ( - - - - Borrows - - setSearchText(searchText)} - placeholder="Search by asset or pool name" - /> -
- -
- -
-
- {tableData ? ( - <> - {!isLoading ? ( - - - {tableData.headerGroups.map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - ); - })} - - ))} - - - {tableData.rows && tableData.rows.length !== 0 ? ( - tableData.rows.map((row) => ( - - - {row.getVisibleCells().map((cell, index) => { - return ( - - ); - })} - - - )) - ) : selectedFilteredPools.length === 0 ? ( - - - - ) : ( - - - - )} - -
- - {flexRender(header.column.columnDef.header, header.getContext())} - -
- {flexRender(cell.column.columnDef.cell, cell.getContext())} -
-
There are no pools.
-
-
There are no results
-
- ) : ( - - - - - )} - - - - Pools Per Page - - - - - - {!tableData || tableData.filteredRows.length === 0 - ? 0 - : pagination.pageIndex * pagination.pageSize + 1}{' '} - -{' '} - {(pagination.pageIndex + 1) * pagination.pageSize > tableData.filteredRows.length - ? tableData.filteredRows.length - : (pagination.pageIndex + 1) * pagination.pageSize}{' '} - of {tableData.filteredRows.length} - - - } - isDisabled={!tableData.canPreviousPage} - isRound - onClick={() => table.previousPage()} - variant="_outline" - /> - } - isDisabled={!tableData.canNextPage} - isRound - onClick={() => table.nextPage()} - variant="_outline" - /> - - - - - ) : null} -
-
- ); -}; diff --git a/packages/ui/components/pages/DashboardPage/Claimable/index.tsx b/packages/ui/components/pages/DashboardPage/Claimable/index.tsx deleted file mode 100644 index cf12afeaba..0000000000 --- a/packages/ui/components/pages/DashboardPage/Claimable/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { Button, Flex, Text } from '@chakra-ui/react'; - -import { CardBox } from '@ui/components/shared/IonicBox'; - -export const Claimable = () => { - return ( - - - - Claimable rewards - $23.44 - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Assets.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/Assets.tsx deleted file mode 100644 index 0196a36da1..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Assets.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { AvatarGroup, HStack, Text } from '@chakra-ui/react'; -import { useMemo } from 'react'; - -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { SHRINK_ASSETS } from '@ui/constants/index'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Assets = ({ pool }: { pool: PoolData }) => { - const tokens = useMemo(() => { - return pool.assets.filter((asset) => !asset.isSupplyPaused); - }, [pool.assets]); - - if (tokens.length === 0) return null; - - return ( - - - {tokens.slice(0, SHRINK_ASSETS).map((token, i) => ( - - ))} - - {/* TODO list hidden assets in tooltip */} - {tokens.length - SHRINK_ASSETS > 0 && ( - +{tokens.length - SHRINK_ASSETS} - )} - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Claim.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/Claim.tsx deleted file mode 100644 index c0c103d288..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Claim.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Button, Flex } from '@chakra-ui/react'; - -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Claim = ({ pool }: { pool: PoolData }) => { - console.warn({ pool }); - - return ( - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Liquidity.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/Liquidity.tsx deleted file mode 100644 index cfa74c3d05..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Liquidity.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Liquidity = ({ pool }: { pool: PoolData }) => { - return ( - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/SupplyError.ts b/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/SupplyError.ts deleted file mode 100644 index e93968f4c4..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/SupplyError.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ComptrollerErrorCodes, CTokenErrorCodes } from '@ionicprotocol/types'; - -export function SupplyError(errorCode: number) { - let err; - - if (errorCode >= 1000) { - const comptrollerResponse = errorCode - 1000; - const msg = ComptrollerErrorCodes[comptrollerResponse]; - - err = new Error('Comptroller Error: ' + msg); - } else { - err = new Error('CToken Code: ' + CTokenErrorCodes[errorCode]); - } - - throw err; -} diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/SupplyTab.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/SupplyTab.tsx deleted file mode 100644 index fb83d92ae4..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/SupplyTab.tsx +++ /dev/null @@ -1,791 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - Divider, - Flex, - HStack, - Icon, - Input, - Skeleton, - Slider, - SliderFilledTrack, - SliderMark, - SliderThumb, - SliderTrack, - Spinner, - Step, - StepIndicator, - Stepper, - StepSeparator, - Text, - VStack -} from '@chakra-ui/react'; -import { WETHAbi } from '@ionicprotocol/sdk'; -import { getContract } from '@ionicprotocol/sdk/dist/cjs/src/IonicSdk/utils'; -import { FundOperationMode } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import type { BigNumber } from 'ethers'; -import { constants, utils } from 'ethers'; -import { useEffect, useMemo, useState } from 'react'; -import { BsCheck, BsExclamationCircle, BsInfinity, BsX } from 'react-icons/bs'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { SupplyError } from '@ui/components/pages/PoolPage/AssetsToSupply/Supply/Modal/SupplyError'; -import { Banner } from '@ui/components/shared/Banner'; -import { CButton } from '@ui/components/shared/Button'; -import { EllipsisText } from '@ui/components/shared/EllipsisText'; -import { Center } from '@ui/components/shared/Flex'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { - ACTIVE, - COMPLETE, - FAILED, - INCOMPLETE, - READY, - SUPPLY_STEPS, - SUPPLY_STEPS_WITH_WRAP -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useSdk } from '@ui/hooks/ionic/useSdk'; -import useUpdatedUserAssets from '@ui/hooks/ionic/useUpdatedUserAssets'; -import { useUsdPrice } from '@ui/hooks/useAllUsdPrices'; -import { useAssets } from '@ui/hooks/useAssets'; -import { useBorrowLimitTotal } from '@ui/hooks/useBorrowLimitTotal'; -import { useColors } from '@ui/hooks/useColors'; -import { useMaxSupplyAmount } from '@ui/hooks/useMaxSupplyAmount'; -import { useRewards } from '@ui/hooks/useRewards'; -import { useSupplyCap } from '@ui/hooks/useSupplyCap'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { useTokenBalance } from '@ui/hooks/useTokenBalance'; -import { useTotalSupplyAPYs } from '@ui/hooks/useTotalSupplyAPYs'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; -import { smallFormatter, smallUsdFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { toFixedNoRound } from '@ui/utils/formatNumber'; - -export const SupplyTab = ({ - poolData, - selectedAsset, - setSelectedAsset -}: { - poolData: PoolData; - selectedAsset: MarketData; - setSelectedAsset: (asset: MarketData) => void; -}) => { - const { - totalSupplyFiat, - underlyingDecimals, - underlyingPrice, - collateralFactor, - underlyingToken, - membership, - cToken, - underlyingSymbol - } = selectedAsset; - const { comptroller, chainId, assets: _assets, id: poolId } = poolData; - const assets = _assets.filter((asset) => !asset.isSupplyPaused); - const errorToast = useErrorToast(); - const addRecentTransaction = useAddRecentTransaction(); - const queryClient = useQueryClient(); - const successToast = useSuccessToast(); - const sdk = useSdk(chainId); - - const { cIPage, cGreen } = useColors(); - const { currentSdk, address } = useMultiIonic(); - const { data: price } = useUsdPrice(chainId.toString()); - const { data: maxSupplyAmount } = useMaxSupplyAmount(selectedAsset, comptroller, chainId); - const { data: myBalance, isLoading: isBalanceLoading } = useTokenBalance( - underlyingToken, - chainId - ); - - const { data: myNativeBalance, isLoading: isNativeBalanceLoading } = useTokenBalance( - 'NO_ADDRESS_HERE_USE_WETH_FOR_ADDRESS', - chainId - ); - const { data: supplyCap } = useSupplyCap({ - chainId, - comptroller: comptroller, - market: selectedAsset - }); - const { data: allRewards } = useRewards({ chainId, poolId: poolId.toString() }); - const { data: assetInfos } = useAssets(chainId ? [chainId] : []); - const { data: totalSupplyApyPerAsset, isLoading: isTotalSupplyApyLoading } = useTotalSupplyAPYs( - assets, - chainId, - allRewards, - assetInfos - ); - - const nativeSymbol = sdk?.chainSpecificParams.metadata.nativeCurrency.symbol; - - const ltv = useMemo( - () => parseFloat(utils.formatUnits(collateralFactor, 16)), - [collateralFactor] - ); - const [steps, setSteps] = useState([...SUPPLY_STEPS(underlyingSymbol)]); - const [isLoading, setIsLoading] = useState(false); - const [userEnteredAmount, setUserEnteredAmount] = useState(''); - const [amount, setAmount] = useState(constants.Zero); - const [usdAmount, setUsdAmount] = useState(0); - const [activeStep, setActiveStep] = useState(SUPPLY_STEPS(underlyingSymbol)[0]); - const [isAmountValid, setIsAmountValid] = useState(false); - - const { data: borrowLimitTotal } = useBorrowLimitTotal(assets, chainId); - const totalBorrows = useMemo( - () => assets.reduce((acc, cur) => acc + cur.borrowBalanceFiat, 0), - // eslint-disable-next-line react-hooks/exhaustive-deps - [assets.map((asset) => asset.borrowBalanceFiat)] - ); - const index = useMemo(() => assets.findIndex((a) => a.cToken === cToken), [assets, cToken]); - const { data: updatedAssets } = useUpdatedUserAssets({ - amount, - assets, - index, - mode: FundOperationMode.SUPPLY, - poolChainId: chainId - }); - const { data: updatedBorrowLimitTotal } = useBorrowLimitTotal(updatedAssets ?? [], chainId); - - const optionToWrap = - underlyingToken === currentSdk?.chainSpecificAddresses.W_TOKEN && - myBalance?.isZero() && - !myNativeBalance?.isZero(); - - useEffect(() => { - if (optionToWrap) { - setSteps([...SUPPLY_STEPS_WITH_WRAP(underlyingSymbol)]); - setActiveStep(SUPPLY_STEPS_WITH_WRAP(underlyingSymbol)[0]); - } else { - setSteps([...SUPPLY_STEPS(underlyingSymbol)]); - setActiveStep(SUPPLY_STEPS(underlyingSymbol)[0]); - } - }, [underlyingSymbol, optionToWrap, underlyingToken]); - - useEffect(() => { - if (amount.isZero() || !maxSupplyAmount) { - setIsAmountValid(false); - } else { - const max = optionToWrap ? (myNativeBalance as BigNumber) : maxSupplyAmount.bigNumber; - setIsAmountValid(amount.lte(max)); - } - }, [amount, maxSupplyAmount, optionToWrap, myNativeBalance]); - - useEffect(() => { - if (price && !amount.isZero()) { - setUsdAmount( - Number(utils.formatUnits(amount, underlyingDecimals)) * - Number(utils.formatUnits(underlyingPrice, 18)) * - price - ); - } else { - setUsdAmount(0); - } - }, [amount, price, underlyingDecimals, underlyingPrice]); - - const updateAmount = (newAmount: string) => { - if (newAmount.startsWith('-') || !newAmount) { - setUserEnteredAmount(''); - setAmount(constants.Zero); - - return; - } - try { - setUserEnteredAmount(newAmount); - const bigAmount = utils.parseUnits( - toFixedNoRound(newAmount, Number(underlyingDecimals)), - Number(underlyingDecimals) - ); - setAmount(bigAmount); - } catch (e) { - setAmount(constants.Zero); - } - }; - - const setToMax = async () => { - if (!currentSdk || !address || !maxSupplyAmount) return; - - setIsLoading(true); - - try { - let maxBN; - - if (optionToWrap) { - maxBN = await currentSdk.signer.getBalance(); - } else { - maxBN = maxSupplyAmount.bigNumber; - } - - if (maxBN.lt(constants.Zero) || maxBN.isZero()) { - updateAmount(''); - } else { - const str = utils.formatUnits(maxBN, underlyingDecimals); - updateAmount(str); - } - - setIsLoading(false); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptroller, - token: cToken - }; - const sentryInfo = { - contextName: 'Fetching max supply amount', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const onWrapNativeToken = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - _steps[0] = { - ..._steps[0], - status: ACTIVE - }; - setSteps(_steps); - - try { - const WToken = getContract( - currentSdk.chainSpecificAddresses.W_TOKEN, - WETHAbi.abi, - currentSdk.signer - ); - const tx = await WToken.deposit({ from: address, value: amount }); - - addRecentTransaction({ - description: `Wrap ${nativeSymbol}`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - setSteps(_steps); - - await tx.wait(); - - _steps[0] = { - ..._steps[0], - status: COMPLETE - }; - _steps[1] = { - ..._steps[1], - status: READY - }; - setSteps(_steps); - setActiveStep(_steps[1]); - successToast({ - description: 'Successfully Wrapped!', - id: 'Wrapped - ' + Math.random().toString() - }); - } catch (error) { - _steps[0] = { - ..._steps[0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptroller, - token: cToken - }; - const sentryInfo = { - contextName: 'Supply - Wrapping Native Token', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - const onApprove = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: ACTIVE - }; - setSteps(_steps); - - try { - const token = currentSdk.getEIP20TokenInstance(underlyingToken, currentSdk.signer); - const hasApprovedEnough = (await token.callStatic.allowance(address, cToken)).gte(amount); - - if (!hasApprovedEnough) { - const tx = await currentSdk.approve(cToken, underlyingToken); - - addRecentTransaction({ - description: `Approve ${underlyingSymbol}`, - hash: tx.hash - }); - - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - txHash: tx.hash - }; - setSteps(_steps); - - await tx.wait(); - - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: COMPLETE - }; - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: READY - }; - setSteps(_steps); - - successToast({ - description: 'Successfully Approved!', - id: 'Approved - ' + Math.random().toString() - }); - } else { - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: COMPLETE - }; - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: READY - }; - setSteps(_steps); - } - - setActiveStep(_steps[optionToWrap ? 2 : 1]); - } catch (error) { - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 1 : 0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptroller, - token: cToken - }; - - const sentryInfo = { - contextName: 'Supply - Approving', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - const onSupply = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: ACTIVE - }; - setSteps(_steps); - - try { - const { tx, errorCode } = await currentSdk.mint(cToken, amount); - if (errorCode !== null) { - SupplyError(errorCode); - } else { - addRecentTransaction({ - description: `${underlyingSymbol} Token Supply`, - hash: tx.hash - }); - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - txHash: tx.hash - }; - setSteps(_steps); - - await tx.wait(); - - await queryClient.refetchQueries({ queryKey: ['usePoolData'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxWithdrawAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useSupplyCapsDataForPool'] }); - await queryClient.refetchQueries({ queryKey: ['useBorrowCapsDataForAsset'] }); - await queryClient.refetchQueries({ queryKey: ['useYourSuppliesRowData'] }); - await queryClient.refetchQueries({ queryKey: ['useAssetsToSupplyData'] }); - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: COMPLETE - }; - setSteps(_steps); - successToast({ - description: 'Successfully supplied!', - id: 'Supply - ' + Math.random().toString() - }); - } - } catch (error) { - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptroller, - token: cToken - }; - - const sentryInfo = { - contextName: 'Supply - Minting', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - useEffect(() => { - let _steps = [...SUPPLY_STEPS(underlyingSymbol)]; - - if (optionToWrap) { - _steps = [...SUPPLY_STEPS_WITH_WRAP(underlyingSymbol)]; - } - - setSteps(_steps); - }, [optionToWrap, underlyingSymbol]); - - return ( - - - - - Amount - - - {optionToWrap ? 'Wallet Native Balance: ' : 'Wallet Balance: '} - - {optionToWrap - ? myNativeBalance - ? utils.formatUnits(myNativeBalance, underlyingDecimals) - : 0 - : myBalance - ? smallFormatter(Number(utils.formatUnits(myBalance, underlyingDecimals)), true) - : 0} - - - - - - updateAmount(event.target.value)} - placeholder="0.0" - size={'xl'} - type="number" - value={userEnteredAmount} - variant="ghost" - /> - - {assets.map((asset, i) => { - return ( - { - setSelectedAsset(asset); - }} - p={0} - variant="_filter" - > - - - - - {asset.underlyingSymbol} - - - - - ); - })} - - } - bodyProps={{ p: 0 }} - popoverProps={{ placement: 'bottom-end', trigger: 'click' }} - > - - - - - {smallUsdFormatter(usdAmount)} - - -
- -
- - - Supply Apr - - - {isTotalSupplyApyLoading - ? 'Supply Apr' - : totalSupplyApyPerAsset - ? totalSupplyApyPerAsset[cToken].totalApy - : '--'}{' '} - % - - - - - Collateralization - {membership ? ( - - - - Enabled - - - ) : ( - Not Enabled - )} - - -
- -
- - - Total Health Ratio - - - - My Total Borrow - - {smallUsdFormatter(totalBorrows)} - - (max {borrowLimitTotal !== undefined ? smallUsdFormatter(borrowLimitTotal) : '--'} - - - - {updatedBorrowLimitTotal !== undefined - ? smallUsdFormatter(updatedBorrowLimitTotal) - : '--'} - ) - - - - -
- -
- - - - - LTV {parseFloat(utils.formatUnits(collateralFactor, 16)).toFixed(0)}% - - - - - - 0% - - 80% - - 100% - - - - - - - - -
- -
- - Gas Fee - - - - {supplyCap && totalSupplyFiat >= supplyCap.usdCap ? ( - - ) : null} - - {optionToWrap ? ( - - ) : null} - - - - - Amount is invalid - - } - bodyProps={{ p: 0 }} - boxProps={{ width: '100%' }} - popoverProps={{ placement: 'top', variant: 'warning' }} - visible={!isAmountValid} - > - - - -
- - - {steps.map((step, index) => ( - - - {step.status === 'active' ? ( - - - {index + 1} - - ) : step.status === 'complete' ? ( - - ) : step.status === 'failed' ? ( - - ) : ( - {index + 1} - )} - - - - ))} - - - - ); -}; - -export const getVariant = (status: string) => { - if (status === COMPLETE) return 'outlineLightGray'; - if (status === FAILED) return 'outlineRed'; - if (status === ACTIVE || status === READY) return 'solidGreen'; - if (status === INCOMPLETE) return 'solidGray'; - - return 'solidGreen'; -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/WithdrawError.ts b/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/WithdrawError.ts deleted file mode 100644 index 1de5e7222a..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/WithdrawError.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ComptrollerErrorCodes, CTokenErrorCodes } from '@ionicprotocol/types'; - -export function WithdrawError(errorCode: number) { - let err; - - if (errorCode >= 1000) { - const comptrollerResponse = errorCode - 1000; - const msg = ComptrollerErrorCodes[comptrollerResponse]; - - err = new Error('Comptroller Error: ' + msg); - } else { - err = new Error('CToken Code: ' + CTokenErrorCodes[errorCode]); - } - - throw err; -} diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/WithdrawTab.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/WithdrawTab.tsx deleted file mode 100644 index 36afa19172..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/WithdrawTab.tsx +++ /dev/null @@ -1,469 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - Divider, - Flex, - HStack, - Icon, - Input, - Skeleton, - Slider, - SliderFilledTrack, - SliderMark, - SliderThumb, - SliderTrack, - Text, - VStack -} from '@chakra-ui/react'; -import { FundOperationMode } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import type { BigNumber } from 'ethers'; -import { constants, utils } from 'ethers'; -import { useEffect, useMemo, useState } from 'react'; -import { BsExclamationCircle } from 'react-icons/bs'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { WithdrawError } from './WithdrawError'; - -import { CButton } from '@ui/components/shared/Button'; -import { EllipsisText } from '@ui/components/shared/EllipsisText'; -import { Center } from '@ui/components/shared/Flex'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { ACTIVE, COMPLETE, FAILED, WITHDRAW_STEPS } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import useUpdatedUserAssets from '@ui/hooks/ionic/useUpdatedUserAssets'; -import { useUsdPrice } from '@ui/hooks/useAllUsdPrices'; -import { useBorrowLimitTotal } from '@ui/hooks/useBorrowLimitTotal'; -import { useColors } from '@ui/hooks/useColors'; -import { useMaxWithdrawAmount } from '@ui/hooks/useMaxWithdrawAmount'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; -import { smallFormatter, smallUsdFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { toFixedNoRound } from '@ui/utils/formatNumber'; - -export const WithdrawTab = ({ - poolData, - selectedAsset, - setSelectedAsset -}: { - poolData: PoolData; - selectedAsset: MarketData; - setSelectedAsset: (asset: MarketData) => void; -}) => { - const { underlyingDecimals, underlyingPrice, cToken, underlyingSymbol, underlyingToken } = - selectedAsset; - const { comptroller, chainId, assets: _assets } = poolData; - const assets = _assets.filter((asset) => asset.supplyBalance.gt(constants.Zero)); - - const errorToast = useErrorToast(); - const addRecentTransaction = useAddRecentTransaction(); - const queryClient = useQueryClient(); - const successToast = useSuccessToast(); - - const { cIPage } = useColors(); - const { currentSdk, address } = useMultiIonic(); - const { data: price } = useUsdPrice(chainId.toString()); - const { data: maxWithdrawAmount, isLoading: isMaxLoading } = useMaxWithdrawAmount( - selectedAsset, - chainId - ); - const withdrawableAmount = useMemo(() => { - if (maxWithdrawAmount) { - return utils.formatUnits(maxWithdrawAmount, underlyingDecimals); - } else { - return '0.0'; - } - }, [underlyingDecimals, maxWithdrawAmount]); - - const [steps, setSteps] = useState([...WITHDRAW_STEPS(underlyingSymbol)]); - const [isLoading, setIsLoading] = useState(false); - const [userEnteredAmount, setUserEnteredAmount] = useState(''); - const [amount, setAmount] = useState(constants.Zero); - const [usdAmount, setUsdAmount] = useState(0); - const [activeStep, setActiveStep] = useState(WITHDRAW_STEPS(underlyingSymbol)[0]); - const [isAmountValid, setIsAmountValid] = useState(false); - - const { data: borrowLimitTotal } = useBorrowLimitTotal(assets, chainId); - const totalBorrows = useMemo( - () => assets.reduce((acc, cur) => acc + cur.borrowBalanceFiat, 0), - // eslint-disable-next-line react-hooks/exhaustive-deps - [assets.map((asset) => asset.borrowBalanceFiat)] - ); - const index = useMemo(() => assets.findIndex((a) => a.cToken === cToken), [assets, cToken]); - const { data: updatedAssets } = useUpdatedUserAssets({ - amount, - assets, - index, - mode: FundOperationMode.WITHDRAW, - poolChainId: chainId - }); - const { data: updatedBorrowLimitTotal } = useBorrowLimitTotal(updatedAssets ?? [], chainId); - - useEffect(() => { - setSteps([...WITHDRAW_STEPS(underlyingSymbol)]); - setActiveStep(WITHDRAW_STEPS(underlyingSymbol)[0]); - }, [underlyingSymbol]); - - useEffect(() => { - if (amount.isZero() || !maxWithdrawAmount) { - setIsAmountValid(false); - } else { - setIsAmountValid(amount.lte(maxWithdrawAmount)); - } - }, [amount, maxWithdrawAmount]); - - useEffect(() => { - if (price && !amount.isZero()) { - setUsdAmount( - Number(utils.formatUnits(amount, underlyingDecimals)) * - Number(utils.formatUnits(underlyingPrice, 18)) * - price - ); - } else { - setUsdAmount(0); - } - }, [amount, price, underlyingDecimals, underlyingPrice]); - - const updateAmount = (newAmount: string) => { - if (newAmount.startsWith('-') || !newAmount) { - setUserEnteredAmount(''); - setAmount(constants.Zero); - - return; - } - try { - setUserEnteredAmount(newAmount); - const bigAmount = utils.parseUnits( - toFixedNoRound(newAmount, Number(underlyingDecimals)), - Number(underlyingDecimals) - ); - setAmount(bigAmount); - } catch (e) { - setAmount(constants.Zero); - } - }; - - const setToMax = async () => { - if (!currentSdk || !address || !maxWithdrawAmount) return; - - setIsLoading(true); - - try { - if (maxWithdrawAmount.lt(constants.Zero) || maxWithdrawAmount.isZero()) { - updateAmount(''); - } else { - const str = utils.formatUnits(maxWithdrawAmount, underlyingDecimals); - updateAmount(str); - } - - setIsLoading(false); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - const sentryInfo = { - contextName: 'Fetching max withdraw amount', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const onWithdraw = async () => { - if (!currentSdk || !address || !maxWithdrawAmount) return; - - setIsLoading(true); - - const _steps = [...steps]; - - _steps[0] = { - ..._steps[0], - status: ACTIVE - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - try { - let resp; - - if (maxWithdrawAmount.eq(amount)) { - resp = await currentSdk.withdraw(cToken, constants.MaxUint256); - } else { - resp = await currentSdk.withdraw(cToken, amount); - } - - if (resp.errorCode !== null) { - WithdrawError(resp.errorCode); - } else { - const tx = resp.tx; - - addRecentTransaction({ - description: `${underlyingSymbol} Token Withdraw`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - await tx.wait(); - - await queryClient.refetchQueries({ queryKey: ['usePoolData'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxWithdrawAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useSupplyCapsDataForPool'] }); - await queryClient.refetchQueries({ queryKey: ['useBorrowCapsDataForAsset'] }); - await queryClient.refetchQueries({ queryKey: ['useYourSuppliesRowData'] }); - await queryClient.refetchQueries({ queryKey: ['useAssetsToSupplyData'] }); - - _steps[0] = { - ..._steps[0], - status: COMPLETE - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - successToast({ - description: 'Successfully withdrew!', - id: 'Withdraw - ' + Math.random().toString() - }); - } - } catch (error) { - _steps[0] = { - ..._steps[0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - - const sentryInfo = { - contextName: 'Withdraw', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - useEffect(() => { - const _steps = [...WITHDRAW_STEPS(underlyingSymbol)]; - - setSteps(_steps); - }, [underlyingSymbol]); - - return ( - - - - - Amount - - - Withdrawable amount: - {smallFormatter(Number(withdrawableAmount), true)} - - - - - updateAmount(event.target.value)} - placeholder="0.0" - size={'xl'} - type="number" - value={userEnteredAmount} - variant="ghost" - /> - - {assets.map((asset, i) => { - return ( - { - setSelectedAsset(asset); - }} - p={0} - variant="_filter" - > - - - - - {asset.underlyingSymbol} - - - - - ); - })} - - } - bodyProps={{ p: 0 }} - popoverProps={{ placement: 'bottom-end', trigger: 'click' }} - > - - - - - {smallUsdFormatter(usdAmount)} - - -
- -
- - Collateral Apr - - 4.44% - - -
- -
- - - - Borrowing Utilization - - - - - 0% - - 80% - - 100% - - - - - - - - -
- -
- - - Collateral Balance ({underlyingSymbol}) - 1.0000031 - - - Borrow Limit - - {smallUsdFormatter(totalBorrows)} - - (max {borrowLimitTotal !== undefined ? smallUsdFormatter(borrowLimitTotal) : '--'} - - - - {updatedBorrowLimitTotal !== undefined - ? smallUsdFormatter(updatedBorrowLimitTotal) - : '--'} - ) - - - - - Daily Earnings - {`<$0.01`} - - - - - - - Amount is invalid - - } - bodyProps={{ p: 0 }} - boxProps={{ width: '100%' }} - popoverProps={{ placement: 'top', variant: 'warning' }} - visible={!isAmountValid} - > - - - -
- - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/index.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/index.tsx deleted file mode 100644 index dba65a6562..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/SupplyAndWithdrawModal/index.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { Flex, HStack, Tab, TabList, TabPanel, TabPanels, Tabs } from '@chakra-ui/react'; -import { constants } from 'ethers'; -import { useEffect, useState } from 'react'; - -import { SupplyTab } from './SupplyTab'; -import { WithdrawTab } from './WithdrawTab'; - -import { CardBox } from '@ui/components/shared/IonicBox'; -import { IonicModal } from '@ui/components/shared/Modal'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; - -export const SupplyAndWithdrawModal = ({ - isOpen, - onClose, - poolData -}: { - isOpen: boolean; - onClose: () => void; - poolData: PoolData; -}) => { - const [selectedSupplyAsset, setSelectedSupplyAsset] = useState(); - const [selectedWithdrawAsset, setSelectedWithdrawAsset] = useState(); - - useEffect(() => { - if (poolData && poolData.assets.length > 0) { - setSelectedSupplyAsset(poolData.assets.filter((asset) => !asset.isSupplyPaused)[0]); - } else { - setSelectedSupplyAsset(undefined); - } - }, [poolData]); - - useEffect(() => { - if (poolData && poolData.assets.length > 0) { - setSelectedWithdrawAsset( - poolData.assets.filter((asset) => asset.supplyBalance.gt(constants.Zero))[0] - ); - } else { - setSelectedWithdrawAsset(undefined); - } - }, [poolData]); - - return ( - - - - - - Supply - Withdraw - - - - - {selectedSupplyAsset ? ( - - ) : null} - - - {selectedWithdrawAsset ? ( - - ) : null} - - - - - - } - isOpen={isOpen} - onClose={onClose} - /> - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/index.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/index.tsx deleted file mode 100644 index 1b32cb422c..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Manage/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Button, Flex, useDisclosure } from '@chakra-ui/react'; - -import { SupplyAndWithdrawModal } from './SupplyAndWithdrawModal'; - -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const LendingManage = ({ poolData }: { poolData: PoolData }) => { - const { isOpen: isModalOpen, onOpen: openModal, onClose: closeModal } = useDisclosure(); - - return ( - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/ModeFilterButtons.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/ModeFilterButtons.tsx deleted file mode 100644 index be9fa4ea02..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/ModeFilterButtons.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import type { ButtonGroupProps } from '@chakra-ui/react'; -import { ButtonGroup, Flex, Text } from '@chakra-ui/react'; - -import { CButton } from '@ui/components/shared/Button'; -import { RowBox } from '@ui/components/shared/IonicBox'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ADVANCED_MODE, SIMPLE_MODE } from '@ui/constants/index'; -import type { LendingModeFilter } from '@ui/types/ComponentPropsType'; - -export const ModeFilterButtons = ({ - isLoading, - modeFilter, - onModeFilter, - props -}: { - isLoading: boolean; - modeFilter: LendingModeFilter; - onModeFilter: (filter: LendingModeFilter) => void; - props?: ButtonGroupProps; -}) => { - return ( - - - onModeFilter(SIMPLE_MODE)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Simple Mode - - - - onModeFilter(ADVANCED_MODE)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Advanced Mode - - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/Network.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/Network.tsx deleted file mode 100644 index 3aed2f8110..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/Network.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { HStack, Img, Text } from '@chakra-ui/react'; - -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useChainConfig } from '@ui/hooks/useChainConfig'; - -export const Network = ({ chainId }: { chainId: number }) => { - const chainConfig = useChainConfig(chainId); - - return ( - - {chainConfig && ( - - - {chainConfig.specificParams.metadata.name} - {chainConfig.specificParams.metadata.shortName} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/NetworkFilterDropdown.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/NetworkFilterDropdown.tsx deleted file mode 100644 index 4ffbf5b1b8..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/NetworkFilterDropdown.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import { SpinnerIcon } from '@chakra-ui/icons'; -import type { AvatarProps, ButtonProps } from '@chakra-ui/react'; -import { - Avatar, - AvatarGroup, - Button, - Checkbox, - Flex, - HStack, - Icon, - Img, - Spinner, - Text, - VStack -} from '@chakra-ui/react'; -import type { SupportedChains } from '@ionicprotocol/types'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL_NETWORKS } from '@ui/constants/index'; -import { useChainConfig, useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useColors } from '@ui/hooks/useColors'; -import type { NetworkFilter } from '@ui/types/ComponentPropsType'; - -export const NetworkFilterDropdown = ({ - loadingStatusPerChain, - networkFilter, - onNetworkFilter, - props -}: { - loadingStatusPerChain: { [chainId: string]: boolean }; - networkFilter: NetworkFilter[]; - onNetworkFilter: (filter: NetworkFilter) => void; - props?: ButtonProps; -}) => { - const { cIRow } = useColors(); - const enabledChains = useEnabledChains(); - const chainFilter = networkFilter.filter((f) => f !== ALL_NETWORKS) as SupportedChains[]; - - return ( - - - Select Networks - onNetworkFilter(ALL_NETWORKS)} - > - All Networks - - {enabledChains.map((chainId) => { - return ( - - ); - })} - - } - popoverProps={{ placement: 'bottom-start', trigger: 'click' }} - > - - - - ); -}; - -const IconChainName = ({ - chainId, - isLoading -}: { - chainId: SupportedChains; - isLoading: boolean; -}) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - {isLoading ? ( - - ) : ( - - )} - {chainConfig.specificParams.metadata.shortName} - - ) : null; -}; - -const ChainFilterCheckbox = ({ - chainId, - onNetworkFilter, - networkFilter, - isLoading -}: { - chainId: SupportedChains; - isLoading: boolean; - networkFilter: (SupportedChains | string)[]; - onNetworkFilter: (chainId: SupportedChains) => void; -}) => { - const chainConfig = useChainConfig(chainId); - const isChecked = networkFilter.includes(chainId) || networkFilter.includes(ALL_NETWORKS); - - return chainConfig ? ( - onNetworkFilter(chainId)}> - - - ) : null; -}; - -interface ButtonContentProps extends AvatarProps { - chainId: SupportedChains; - loadingStatusPerChain: { [chainId: string]: boolean }; -} - -const ButtonContent = ({ chainId, loadingStatusPerChain, ...avatarProps }: ButtonContentProps) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - - ) : undefined - } - name={chainConfig.specificParams.metadata.shortName} - src={chainConfig.specificParams.metadata.img} - width="26px" - {...avatarProps} - /> - - ) : null; -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/PoolFilterButtons.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/PoolFilterButtons.tsx deleted file mode 100644 index ec125c83e4..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/PoolFilterButtons.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import type { ButtonGroupProps } from '@chakra-ui/react'; -import { ButtonGroup, Flex, Text } from '@chakra-ui/react'; - -import { CButton } from '@ui/components/shared/Button'; -import { RowBox } from '@ui/components/shared/IonicBox'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL_POOLS, LST, RWA, STABLECOINS } from '@ui/constants/index'; -import type { LendingPoolFilter } from '@ui/types/ComponentPropsType'; - -export const PoolFilterButtons = ({ - isLoading, - onPoolFilter, - poolFilter, - props -}: { - isLoading: boolean; - onPoolFilter: (filter: LendingPoolFilter) => void; - poolFilter: LendingPoolFilter; - props?: ButtonGroupProps; -}) => { - return ( - - - onPoolFilter(ALL_POOLS)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - All Pools - - - - onPoolFilter(LST)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - LST - - - - onPoolFilter(RWA)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - RWA - - - - onPoolFilter(STABLECOINS)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Stablecoins - - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/PoolName.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/PoolName.tsx deleted file mode 100644 index 956129f1f0..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/PoolName.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { AvatarGroup, Box, Button, HStack, Link, Stack, Text, VStack } from '@chakra-ui/react'; -import { useRouter } from 'next/router'; -import { useState } from 'react'; - -import { GradientText } from '@ui/components/shared/GradientText'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { usePoolClaimableRewards } from '@ui/hooks/rewards/usePoolClaimableRewards'; -import { useRewardTokensOfPool } from '@ui/hooks/rewards/useRewardTokensOfPool'; -import { useColors } from '@ui/hooks/useColors'; - -export const PoolName = ({ - comptroller, - chainId, - poolName, - poolId, - isDisabledTooltip -}: { - chainId: number; - comptroller: string; - isDisabledTooltip?: boolean; - poolId: number; - poolName: string; -}) => { - const { setGlobalLoading } = useMultiIonic(); - const { data: rewardTokens } = useRewardTokensOfPool(comptroller, chainId); - const { data: claimableRewards } = usePoolClaimableRewards(comptroller, chainId); - const { cGreen, cIRow } = useColors(); - const router = useRouter(); - const [isHovering, setIsHovering] = useState(false); - - return ( - - - - - - - - {rewardTokens && rewardTokens.length && ( - - - Earn Rewards - - - {rewardTokens.map((token) => ( - - ))} - - - )} - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/SupplyBalance.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/SupplyBalance.tsx deleted file mode 100644 index 110012f102..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/SupplyBalance.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Text } from '@chakra-ui/react'; - -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const SupplyBalance = ({ pool }: { pool: PoolData }) => { - const { address } = useMultiIonic(); - return ( - <> - {!address ? ( - - - - - - - ) : ( - - )} - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/TotalSupply.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/TotalSupply.tsx deleted file mode 100644 index e7a1a8728a..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/TotalSupply.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const TotalSupply = ({ pool }: { pool: PoolData }) => { - return ( - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingStrategy/index.tsx b/packages/ui/components/pages/DashboardPage/LendingStrategy/index.tsx deleted file mode 100644 index e0182ddeaf..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingStrategy/index.tsx +++ /dev/null @@ -1,615 +0,0 @@ -import { ChevronLeftIcon, ChevronRightIcon } from '@chakra-ui/icons'; -import { - Center, - Divider, - Flex, - Hide, - HStack, - Select, - Skeleton, - Stack, - Table, - Tbody, - Td, - Text, - Th, - Thead, - Tr -} from '@chakra-ui/react'; -import { useQuery } from '@tanstack/react-query'; -import type { - ColumnDef, - FilterFn, - PaginationState, - SortingFn, - SortingState -} from '@tanstack/react-table'; -import { - flexRender, - getCoreRowModel, - getExpandedRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - useReactTable -} from '@tanstack/react-table'; -import * as React from 'react'; -import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'; - -import { Assets } from './Assets'; -import { Claim } from './Claim'; -import { Liquidity } from './Liquidity'; -import { LendingManage } from './Manage'; -import { Network } from './Network'; -import { NetworkFilterDropdown } from './NetworkFilterDropdown'; -import { PoolName } from './PoolName'; -import { SupplyBalance } from './SupplyBalance'; -import { TotalSupply } from './TotalSupply'; - -import { Banner } from '@ui/components/shared/Banner'; -import { CIconButton } from '@ui/components/shared/Button'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import { SearchInput } from '@ui/components/shared/SearchInput'; -import { TableHeaderCell } from '@ui/components/shared/TableHeaderCell'; -import { - ALL_NETWORKS, - ALL_POOLS, - ASSETS, - IONIC_LOCALSTORAGE_KEYS, - LIQUIDITY, - NETWORK, - POOL_NAME, - POOLS_COLUMNS, - POOLS_COUNT_PER_PAGE, - SEARCH, - SIMPLE_MODE, - SUPPLY, - SUPPLY_BALANCE, - TOTAL_SUPPLY, - YOUR_BALANCE -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCrossPools } from '@ui/hooks/ionic/useCrossPools'; -import { useLendingPools } from '@ui/hooks/lend/useLendingPools'; -import { useLoadingStatusPerChain } from '@ui/hooks/pools/useLoadingStatusPerChain'; -import { useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useColors } from '@ui/hooks/useColors'; -import type { LendingFilter, NetworkFilter } from '@ui/types/ComponentPropsType'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export type PoolRowData = { - assets: PoolData; - liquidity: PoolData; - network: PoolData; - poolName: PoolData; - supplyBalance: PoolData; - totalSupply: PoolData; -}; - -export const LendingStrategy = () => { - const enabledChains = useEnabledChains(); - const { isAllLoading, poolsPerChain, allPools, error } = useCrossPools([...enabledChains]); - const { address } = useMultiIonic(); - const [isLoading, setIsLoading] = useState(false); - const [selectedFilteredPools, setSelectedFilteredPools] = useState([]); - const [sorting, setSorting] = useState([ - { desc: true, id: address ? SUPPLY_BALANCE : TOTAL_SUPPLY } - ]); - const [pagination, onPagination] = useState({ - pageIndex: 0, - pageSize: POOLS_COUNT_PER_PAGE[0] - }); - const [networkFilter, setNetworkFilter] = useState([ALL_NETWORKS]); - const [globalFilter, setGlobalFilter] = useState([...networkFilter]); - const [searchText, setSearchText] = useState(''); - const mounted = useRef(false); - - const loadingStatusPerChain = useLoadingStatusPerChain(poolsPerChain); - - useQuery( - [ - 'selectedFilteredPools', - globalFilter, - allPools.map((pool) => pool.comptroller), - Object.values(poolsPerChain).map((query) => query.data?.map((pool) => pool.comptroller)) - ], - () => { - const pools: PoolData[] = []; - - if (globalFilter.includes(ALL_NETWORKS)) { - setSelectedFilteredPools([...allPools]); - } else { - globalFilter.map((filter) => { - const data = poolsPerChain[filter.toString()]?.data; - if (data) { - pools.push(...data); - } - }); - - setSelectedFilteredPools(pools); - } - - return null; - }, - { - enabled: Object.values(poolsPerChain).length > 0 && allPools.length > 0 - } - ); - - const globalFilterFn: FilterFn = useCallback( - (row, columnId, value) => { - const pool = row.original.network; - const namesAndSymbols: string[] = []; - pool.assets.map((asset) => { - namesAndSymbols.push( - asset.underlyingName.toLowerCase(), - asset.underlyingSymbol.toLowerCase() - ); - }); - if ( - !searchText || - (value.includes(SEARCH) && - (pool.comptroller.toLowerCase().includes(searchText.toLowerCase()) || - pool.name.toLowerCase().includes(searchText.toLowerCase()) || - namesAndSymbols.some((ns) => ns.includes(searchText.toLowerCase())))) - ) { - if (value.includes(ALL_NETWORKS) || value.includes(pool.chainId)) { - return true; - } else { - return false; - } - } else { - return false; - } - }, - [searchText] - ); - - const poolSort: SortingFn = (rowA, rowB, columnId) => { - if (columnId === NETWORK) { - return rowB.original.network.chainId > rowA.original.network.chainId ? 1 : -1; - } else if (columnId === POOL_NAME) { - return rowB.original.network.name.localeCompare(rowA.original.network.name); - } else if (columnId === SUPPLY_BALANCE) { - return rowA.original.network.totalSupplyBalanceFiat > - rowB.original.network.totalSupplyBalanceFiat - ? 1 - : -1; - } else if (columnId === LIQUIDITY) { - return rowA.original.network.totalLiquidityFiat > rowB.original.network.totalLiquidityFiat - ? 1 - : -1; - } else if (columnId === TOTAL_SUPPLY) { - return rowA.original.network.totalSuppliedFiat > rowB.original.network.totalSuppliedFiat - ? 1 - : -1; - } else { - return 1; - } - }; - - const data: PoolRowData[] = useLendingPools(allPools); - - const columns: ColumnDef[] = useMemo(() => { - return [ - { - accessorFn: (row) => row.network, - cell: ({ getValue }) => ().chainId} />, - enableHiding: false, - filterFn: globalFilterFn, - footer: (props) => props.column.id, - header: (context) => {NETWORK}, - id: NETWORK, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.poolName, - cell: ({ getValue }) => ( - ().chainId} - comptroller={getValue().comptroller} - poolId={getValue().id} - poolName={getValue().name} - /> - ), - enableHiding: false, - footer: (props) => props.column.id, - header: (context) => {POOL_NAME}, - id: POOL_NAME, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.assets, - cell: ({ getValue }) => ()} />, - enableSorting: false, - footer: (props) => props.column.id, - header: (context) => {ASSETS}, - id: ASSETS - }, - { - accessorFn: (row) => row.totalSupply, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {TOTAL_SUPPLY}, - id: TOTAL_SUPPLY, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.liquidity, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {LIQUIDITY}, - id: LIQUIDITY, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.supplyBalance, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {YOUR_BALANCE}, - id: YOUR_BALANCE, - sortingFn: poolSort - }, - { - cell: ({ row }) => { - return ( - - - - - ); - }, - header: () => null, - id: SUPPLY - } - ]; - }, [globalFilterFn]); - - const table = useReactTable({ - columns, - data, - enableSortingRemoval: false, - getColumnCanGlobalFilter: () => true, - getCoreRowModel: getCoreRowModel(), - getExpandedRowModel: getExpandedRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), - getRowCanExpand: () => true, - getSortedRowModel: getSortedRowModel(), - globalFilterFn: globalFilterFn, - onGlobalFilterChange: setGlobalFilter, - onPaginationChange: onPagination, - onSortingChange: setSorting, - state: { - globalFilter, - pagination, - sorting - } - }); - - const { data: tableData } = useQuery(['LendingPoolsTableData', table], () => { - return { - canNextPage: table.getCanNextPage(), - canPreviousPage: table.getCanPreviousPage(), - filteredRows: table.getFilteredRowModel().rows, - headerGroups: table.getHeaderGroups(), - rows: table.getRowModel().rows - }; - }); - - const { cCard, cIPage, cIRow } = useColors(); - - useEffect(() => { - if (globalFilter.includes(SEARCH)) { - setGlobalFilter([...networkFilter, SEARCH]); - } else { - setGlobalFilter([...networkFilter]); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [networkFilter]); - - const onNetworkFilter = (filter: NetworkFilter) => { - let _networkFilter: NetworkFilter[] = []; - - if (networkFilter.includes(filter)) { - if (filter === ALL_NETWORKS) { - _networkFilter = [enabledChains[0]]; - } else { - _networkFilter = networkFilter.filter((f) => f !== filter); - - if (_networkFilter.length === 0) { - _networkFilter = [ALL_NETWORKS]; - } - } - } else { - if (networkFilter.includes(ALL_NETWORKS)) { - _networkFilter = [filter]; - } else if ( - filter === ALL_NETWORKS || - enabledChains.length === networkFilter.filter((f) => f !== ALL_NETWORKS).length + 1 - ) { - _networkFilter = [ALL_NETWORKS]; - } else { - _networkFilter = [...networkFilter, filter]; - } - } - - setNetworkFilter(_networkFilter); - }; - - useEffect(() => { - if (searchText) { - setGlobalFilter([...globalFilter, SEARCH]); - } else { - setGlobalFilter(globalFilter.filter((f) => f !== SEARCH)); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchText]); - - useEffect(() => { - if (mounted.current) { - const oldData = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - let oldObj; - if (oldData) { - oldObj = JSON.parse(oldData); - } - const data = { ...oldObj, globalFilter, searchText, sorting }; - localStorage.setItem(IONIC_LOCALSTORAGE_KEYS, JSON.stringify(data)); - } - }, [searchText, globalFilter, sorting]); - - useQuery( - [ - 'statusPerChain', - globalFilter, - isAllLoading, - Object.values(poolsPerChain).map((query) => { - return [query.data?.map((pool) => pool.comptroller), query.isLoading]; - }) - ], - () => { - const selectedChainIds = Object.keys(poolsPerChain).filter((chainId) => - globalFilter.includes(Number(chainId)) - ); - if (selectedChainIds.length > 0) { - let _isLoading = true; - selectedChainIds.map((chainId) => { - _isLoading = _isLoading && poolsPerChain[chainId].isLoading; - }); - setIsLoading(_isLoading); - } else { - setIsLoading(isAllLoading); - } - - return null; - }, - { - enabled: Object.values(poolsPerChain).length > 0 - } - ); - - useEffect(() => { - mounted.current = true; - - const data = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - if (data && mounted.current) { - const obj = JSON.parse(data); - const _globalFilter = (obj.globalFilter as LendingFilter[]) || [ - ALL_NETWORKS, - ALL_POOLS, - SIMPLE_MODE - ]; - setGlobalFilter(_globalFilter); - - if (obj && obj.sorting && POOLS_COLUMNS.includes(obj.sorting[0].id)) { - setSorting(obj.sorting); - } else { - setSorting([{ desc: true, id: TOTAL_SUPPLY }]); - } - } - - return () => { - mounted.current = false; - }; - }, []); - - if (error && error.code !== 'NETWORK_ERROR') { - return ( - - ); - } - - return ( - - - - Lending Pools - - setSearchText(searchText)} - placeholder="Search by asset or pool name" - /> -
- -
- -
-
- {tableData ? ( - <> - {!isLoading ? ( - - - {tableData.headerGroups.map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - ); - })} - - ))} - - - {tableData.rows && tableData.rows.length !== 0 ? ( - tableData.rows.map((row) => ( - - - {row.getVisibleCells().map((cell, index) => { - return ( - - ); - })} - - - )) - ) : selectedFilteredPools.length === 0 ? ( - - - - ) : ( - - - - )} - -
- - {flexRender(header.column.columnDef.header, header.getContext())} - -
- {flexRender(cell.column.columnDef.cell, cell.getContext())} -
-
There are no pools.
-
-
There are no results
-
- ) : ( - - - - - )} - - - - Pools Per Page - - - - - - {!tableData || tableData.filteredRows.length === 0 - ? 0 - : pagination.pageIndex * pagination.pageSize + 1}{' '} - -{' '} - {(pagination.pageIndex + 1) * pagination.pageSize > tableData.filteredRows.length - ? tableData.filteredRows.length - : (pagination.pageIndex + 1) * pagination.pageSize}{' '} - of {tableData.filteredRows.length} - - - } - isDisabled={!tableData.canPreviousPage} - isRound - onClick={() => table.previousPage()} - variant="_outline" - /> - } - isDisabled={!tableData.canNextPage} - isRound - onClick={() => table.nextPage()} - variant="_outline" - /> - - - - - ) : null} -
-
- ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Assets.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/Assets.tsx deleted file mode 100644 index 0196a36da1..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Assets.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { AvatarGroup, HStack, Text } from '@chakra-ui/react'; -import { useMemo } from 'react'; - -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { SHRINK_ASSETS } from '@ui/constants/index'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Assets = ({ pool }: { pool: PoolData }) => { - const tokens = useMemo(() => { - return pool.assets.filter((asset) => !asset.isSupplyPaused); - }, [pool.assets]); - - if (tokens.length === 0) return null; - - return ( - - - {tokens.slice(0, SHRINK_ASSETS).map((token, i) => ( - - ))} - - {/* TODO list hidden assets in tooltip */} - {tokens.length - SHRINK_ASSETS > 0 && ( - +{tokens.length - SHRINK_ASSETS} - )} - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Claim.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/Claim.tsx deleted file mode 100644 index c0c103d288..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Claim.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Button, Flex } from '@chakra-ui/react'; - -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Claim = ({ pool }: { pool: PoolData }) => { - console.warn({ pool }); - - return ( - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Liquidity.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/Liquidity.tsx deleted file mode 100644 index cfa74c3d05..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Liquidity.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Liquidity = ({ pool }: { pool: PoolData }) => { - return ( - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/SupplyError.ts b/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/SupplyError.ts deleted file mode 100644 index e93968f4c4..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/SupplyError.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ComptrollerErrorCodes, CTokenErrorCodes } from '@ionicprotocol/types'; - -export function SupplyError(errorCode: number) { - let err; - - if (errorCode >= 1000) { - const comptrollerResponse = errorCode - 1000; - const msg = ComptrollerErrorCodes[comptrollerResponse]; - - err = new Error('Comptroller Error: ' + msg); - } else { - err = new Error('CToken Code: ' + CTokenErrorCodes[errorCode]); - } - - throw err; -} diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/SupplyTab.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/SupplyTab.tsx deleted file mode 100644 index fb83d92ae4..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/SupplyTab.tsx +++ /dev/null @@ -1,791 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - Divider, - Flex, - HStack, - Icon, - Input, - Skeleton, - Slider, - SliderFilledTrack, - SliderMark, - SliderThumb, - SliderTrack, - Spinner, - Step, - StepIndicator, - Stepper, - StepSeparator, - Text, - VStack -} from '@chakra-ui/react'; -import { WETHAbi } from '@ionicprotocol/sdk'; -import { getContract } from '@ionicprotocol/sdk/dist/cjs/src/IonicSdk/utils'; -import { FundOperationMode } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import type { BigNumber } from 'ethers'; -import { constants, utils } from 'ethers'; -import { useEffect, useMemo, useState } from 'react'; -import { BsCheck, BsExclamationCircle, BsInfinity, BsX } from 'react-icons/bs'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { SupplyError } from '@ui/components/pages/PoolPage/AssetsToSupply/Supply/Modal/SupplyError'; -import { Banner } from '@ui/components/shared/Banner'; -import { CButton } from '@ui/components/shared/Button'; -import { EllipsisText } from '@ui/components/shared/EllipsisText'; -import { Center } from '@ui/components/shared/Flex'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { - ACTIVE, - COMPLETE, - FAILED, - INCOMPLETE, - READY, - SUPPLY_STEPS, - SUPPLY_STEPS_WITH_WRAP -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useSdk } from '@ui/hooks/ionic/useSdk'; -import useUpdatedUserAssets from '@ui/hooks/ionic/useUpdatedUserAssets'; -import { useUsdPrice } from '@ui/hooks/useAllUsdPrices'; -import { useAssets } from '@ui/hooks/useAssets'; -import { useBorrowLimitTotal } from '@ui/hooks/useBorrowLimitTotal'; -import { useColors } from '@ui/hooks/useColors'; -import { useMaxSupplyAmount } from '@ui/hooks/useMaxSupplyAmount'; -import { useRewards } from '@ui/hooks/useRewards'; -import { useSupplyCap } from '@ui/hooks/useSupplyCap'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { useTokenBalance } from '@ui/hooks/useTokenBalance'; -import { useTotalSupplyAPYs } from '@ui/hooks/useTotalSupplyAPYs'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; -import { smallFormatter, smallUsdFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { toFixedNoRound } from '@ui/utils/formatNumber'; - -export const SupplyTab = ({ - poolData, - selectedAsset, - setSelectedAsset -}: { - poolData: PoolData; - selectedAsset: MarketData; - setSelectedAsset: (asset: MarketData) => void; -}) => { - const { - totalSupplyFiat, - underlyingDecimals, - underlyingPrice, - collateralFactor, - underlyingToken, - membership, - cToken, - underlyingSymbol - } = selectedAsset; - const { comptroller, chainId, assets: _assets, id: poolId } = poolData; - const assets = _assets.filter((asset) => !asset.isSupplyPaused); - const errorToast = useErrorToast(); - const addRecentTransaction = useAddRecentTransaction(); - const queryClient = useQueryClient(); - const successToast = useSuccessToast(); - const sdk = useSdk(chainId); - - const { cIPage, cGreen } = useColors(); - const { currentSdk, address } = useMultiIonic(); - const { data: price } = useUsdPrice(chainId.toString()); - const { data: maxSupplyAmount } = useMaxSupplyAmount(selectedAsset, comptroller, chainId); - const { data: myBalance, isLoading: isBalanceLoading } = useTokenBalance( - underlyingToken, - chainId - ); - - const { data: myNativeBalance, isLoading: isNativeBalanceLoading } = useTokenBalance( - 'NO_ADDRESS_HERE_USE_WETH_FOR_ADDRESS', - chainId - ); - const { data: supplyCap } = useSupplyCap({ - chainId, - comptroller: comptroller, - market: selectedAsset - }); - const { data: allRewards } = useRewards({ chainId, poolId: poolId.toString() }); - const { data: assetInfos } = useAssets(chainId ? [chainId] : []); - const { data: totalSupplyApyPerAsset, isLoading: isTotalSupplyApyLoading } = useTotalSupplyAPYs( - assets, - chainId, - allRewards, - assetInfos - ); - - const nativeSymbol = sdk?.chainSpecificParams.metadata.nativeCurrency.symbol; - - const ltv = useMemo( - () => parseFloat(utils.formatUnits(collateralFactor, 16)), - [collateralFactor] - ); - const [steps, setSteps] = useState([...SUPPLY_STEPS(underlyingSymbol)]); - const [isLoading, setIsLoading] = useState(false); - const [userEnteredAmount, setUserEnteredAmount] = useState(''); - const [amount, setAmount] = useState(constants.Zero); - const [usdAmount, setUsdAmount] = useState(0); - const [activeStep, setActiveStep] = useState(SUPPLY_STEPS(underlyingSymbol)[0]); - const [isAmountValid, setIsAmountValid] = useState(false); - - const { data: borrowLimitTotal } = useBorrowLimitTotal(assets, chainId); - const totalBorrows = useMemo( - () => assets.reduce((acc, cur) => acc + cur.borrowBalanceFiat, 0), - // eslint-disable-next-line react-hooks/exhaustive-deps - [assets.map((asset) => asset.borrowBalanceFiat)] - ); - const index = useMemo(() => assets.findIndex((a) => a.cToken === cToken), [assets, cToken]); - const { data: updatedAssets } = useUpdatedUserAssets({ - amount, - assets, - index, - mode: FundOperationMode.SUPPLY, - poolChainId: chainId - }); - const { data: updatedBorrowLimitTotal } = useBorrowLimitTotal(updatedAssets ?? [], chainId); - - const optionToWrap = - underlyingToken === currentSdk?.chainSpecificAddresses.W_TOKEN && - myBalance?.isZero() && - !myNativeBalance?.isZero(); - - useEffect(() => { - if (optionToWrap) { - setSteps([...SUPPLY_STEPS_WITH_WRAP(underlyingSymbol)]); - setActiveStep(SUPPLY_STEPS_WITH_WRAP(underlyingSymbol)[0]); - } else { - setSteps([...SUPPLY_STEPS(underlyingSymbol)]); - setActiveStep(SUPPLY_STEPS(underlyingSymbol)[0]); - } - }, [underlyingSymbol, optionToWrap, underlyingToken]); - - useEffect(() => { - if (amount.isZero() || !maxSupplyAmount) { - setIsAmountValid(false); - } else { - const max = optionToWrap ? (myNativeBalance as BigNumber) : maxSupplyAmount.bigNumber; - setIsAmountValid(amount.lte(max)); - } - }, [amount, maxSupplyAmount, optionToWrap, myNativeBalance]); - - useEffect(() => { - if (price && !amount.isZero()) { - setUsdAmount( - Number(utils.formatUnits(amount, underlyingDecimals)) * - Number(utils.formatUnits(underlyingPrice, 18)) * - price - ); - } else { - setUsdAmount(0); - } - }, [amount, price, underlyingDecimals, underlyingPrice]); - - const updateAmount = (newAmount: string) => { - if (newAmount.startsWith('-') || !newAmount) { - setUserEnteredAmount(''); - setAmount(constants.Zero); - - return; - } - try { - setUserEnteredAmount(newAmount); - const bigAmount = utils.parseUnits( - toFixedNoRound(newAmount, Number(underlyingDecimals)), - Number(underlyingDecimals) - ); - setAmount(bigAmount); - } catch (e) { - setAmount(constants.Zero); - } - }; - - const setToMax = async () => { - if (!currentSdk || !address || !maxSupplyAmount) return; - - setIsLoading(true); - - try { - let maxBN; - - if (optionToWrap) { - maxBN = await currentSdk.signer.getBalance(); - } else { - maxBN = maxSupplyAmount.bigNumber; - } - - if (maxBN.lt(constants.Zero) || maxBN.isZero()) { - updateAmount(''); - } else { - const str = utils.formatUnits(maxBN, underlyingDecimals); - updateAmount(str); - } - - setIsLoading(false); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptroller, - token: cToken - }; - const sentryInfo = { - contextName: 'Fetching max supply amount', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const onWrapNativeToken = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - _steps[0] = { - ..._steps[0], - status: ACTIVE - }; - setSteps(_steps); - - try { - const WToken = getContract( - currentSdk.chainSpecificAddresses.W_TOKEN, - WETHAbi.abi, - currentSdk.signer - ); - const tx = await WToken.deposit({ from: address, value: amount }); - - addRecentTransaction({ - description: `Wrap ${nativeSymbol}`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - setSteps(_steps); - - await tx.wait(); - - _steps[0] = { - ..._steps[0], - status: COMPLETE - }; - _steps[1] = { - ..._steps[1], - status: READY - }; - setSteps(_steps); - setActiveStep(_steps[1]); - successToast({ - description: 'Successfully Wrapped!', - id: 'Wrapped - ' + Math.random().toString() - }); - } catch (error) { - _steps[0] = { - ..._steps[0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptroller, - token: cToken - }; - const sentryInfo = { - contextName: 'Supply - Wrapping Native Token', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - const onApprove = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: ACTIVE - }; - setSteps(_steps); - - try { - const token = currentSdk.getEIP20TokenInstance(underlyingToken, currentSdk.signer); - const hasApprovedEnough = (await token.callStatic.allowance(address, cToken)).gte(amount); - - if (!hasApprovedEnough) { - const tx = await currentSdk.approve(cToken, underlyingToken); - - addRecentTransaction({ - description: `Approve ${underlyingSymbol}`, - hash: tx.hash - }); - - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - txHash: tx.hash - }; - setSteps(_steps); - - await tx.wait(); - - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: COMPLETE - }; - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: READY - }; - setSteps(_steps); - - successToast({ - description: 'Successfully Approved!', - id: 'Approved - ' + Math.random().toString() - }); - } else { - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: COMPLETE - }; - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: READY - }; - setSteps(_steps); - } - - setActiveStep(_steps[optionToWrap ? 2 : 1]); - } catch (error) { - _steps[optionToWrap ? 1 : 0] = { - ..._steps[optionToWrap ? 1 : 0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 1 : 0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptroller, - token: cToken - }; - - const sentryInfo = { - contextName: 'Supply - Approving', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - const onSupply = async () => { - if (!currentSdk || !address) return; - - setIsLoading(true); - - const _steps = [...steps]; - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: ACTIVE - }; - setSteps(_steps); - - try { - const { tx, errorCode } = await currentSdk.mint(cToken, amount); - if (errorCode !== null) { - SupplyError(errorCode); - } else { - addRecentTransaction({ - description: `${underlyingSymbol} Token Supply`, - hash: tx.hash - }); - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - txHash: tx.hash - }; - setSteps(_steps); - - await tx.wait(); - - await queryClient.refetchQueries({ queryKey: ['usePoolData'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxWithdrawAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useSupplyCapsDataForPool'] }); - await queryClient.refetchQueries({ queryKey: ['useBorrowCapsDataForAsset'] }); - await queryClient.refetchQueries({ queryKey: ['useYourSuppliesRowData'] }); - await queryClient.refetchQueries({ queryKey: ['useAssetsToSupplyData'] }); - - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: COMPLETE - }; - setSteps(_steps); - successToast({ - description: 'Successfully supplied!', - id: 'Supply - ' + Math.random().toString() - }); - } - } catch (error) { - _steps[optionToWrap ? 2 : 1] = { - ..._steps[optionToWrap ? 2 : 1], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[optionToWrap ? 2 : 1]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptroller, - token: cToken - }; - - const sentryInfo = { - contextName: 'Supply - Minting', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - useEffect(() => { - let _steps = [...SUPPLY_STEPS(underlyingSymbol)]; - - if (optionToWrap) { - _steps = [...SUPPLY_STEPS_WITH_WRAP(underlyingSymbol)]; - } - - setSteps(_steps); - }, [optionToWrap, underlyingSymbol]); - - return ( - - - - - Amount - - - {optionToWrap ? 'Wallet Native Balance: ' : 'Wallet Balance: '} - - {optionToWrap - ? myNativeBalance - ? utils.formatUnits(myNativeBalance, underlyingDecimals) - : 0 - : myBalance - ? smallFormatter(Number(utils.formatUnits(myBalance, underlyingDecimals)), true) - : 0} - - - - - - updateAmount(event.target.value)} - placeholder="0.0" - size={'xl'} - type="number" - value={userEnteredAmount} - variant="ghost" - /> - - {assets.map((asset, i) => { - return ( - { - setSelectedAsset(asset); - }} - p={0} - variant="_filter" - > - - - - - {asset.underlyingSymbol} - - - - - ); - })} - - } - bodyProps={{ p: 0 }} - popoverProps={{ placement: 'bottom-end', trigger: 'click' }} - > - - - - - {smallUsdFormatter(usdAmount)} - - -
- -
- - - Supply Apr - - - {isTotalSupplyApyLoading - ? 'Supply Apr' - : totalSupplyApyPerAsset - ? totalSupplyApyPerAsset[cToken].totalApy - : '--'}{' '} - % - - - - - Collateralization - {membership ? ( - - - - Enabled - - - ) : ( - Not Enabled - )} - - -
- -
- - - Total Health Ratio - - - - My Total Borrow - - {smallUsdFormatter(totalBorrows)} - - (max {borrowLimitTotal !== undefined ? smallUsdFormatter(borrowLimitTotal) : '--'} - - - - {updatedBorrowLimitTotal !== undefined - ? smallUsdFormatter(updatedBorrowLimitTotal) - : '--'} - ) - - - - -
- -
- - - - - LTV {parseFloat(utils.formatUnits(collateralFactor, 16)).toFixed(0)}% - - - - - - 0% - - 80% - - 100% - - - - - - - - -
- -
- - Gas Fee - - - - {supplyCap && totalSupplyFiat >= supplyCap.usdCap ? ( - - ) : null} - - {optionToWrap ? ( - - ) : null} - - - - - Amount is invalid - - } - bodyProps={{ p: 0 }} - boxProps={{ width: '100%' }} - popoverProps={{ placement: 'top', variant: 'warning' }} - visible={!isAmountValid} - > - - - -
- - - {steps.map((step, index) => ( - - - {step.status === 'active' ? ( - - - {index + 1} - - ) : step.status === 'complete' ? ( - - ) : step.status === 'failed' ? ( - - ) : ( - {index + 1} - )} - - - - ))} - - - - ); -}; - -export const getVariant = (status: string) => { - if (status === COMPLETE) return 'outlineLightGray'; - if (status === FAILED) return 'outlineRed'; - if (status === ACTIVE || status === READY) return 'solidGreen'; - if (status === INCOMPLETE) return 'solidGray'; - - return 'solidGreen'; -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/WithdrawError.ts b/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/WithdrawError.ts deleted file mode 100644 index 1de5e7222a..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/WithdrawError.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ComptrollerErrorCodes, CTokenErrorCodes } from '@ionicprotocol/types'; - -export function WithdrawError(errorCode: number) { - let err; - - if (errorCode >= 1000) { - const comptrollerResponse = errorCode - 1000; - const msg = ComptrollerErrorCodes[comptrollerResponse]; - - err = new Error('Comptroller Error: ' + msg); - } else { - err = new Error('CToken Code: ' + CTokenErrorCodes[errorCode]); - } - - throw err; -} diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/WithdrawTab.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/WithdrawTab.tsx deleted file mode 100644 index 36afa19172..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/WithdrawTab.tsx +++ /dev/null @@ -1,469 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - Divider, - Flex, - HStack, - Icon, - Input, - Skeleton, - Slider, - SliderFilledTrack, - SliderMark, - SliderThumb, - SliderTrack, - Text, - VStack -} from '@chakra-ui/react'; -import { FundOperationMode } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import type { BigNumber } from 'ethers'; -import { constants, utils } from 'ethers'; -import { useEffect, useMemo, useState } from 'react'; -import { BsExclamationCircle } from 'react-icons/bs'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { WithdrawError } from './WithdrawError'; - -import { CButton } from '@ui/components/shared/Button'; -import { EllipsisText } from '@ui/components/shared/EllipsisText'; -import { Center } from '@ui/components/shared/Flex'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { ACTIVE, COMPLETE, FAILED, WITHDRAW_STEPS } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import useUpdatedUserAssets from '@ui/hooks/ionic/useUpdatedUserAssets'; -import { useUsdPrice } from '@ui/hooks/useAllUsdPrices'; -import { useBorrowLimitTotal } from '@ui/hooks/useBorrowLimitTotal'; -import { useColors } from '@ui/hooks/useColors'; -import { useMaxWithdrawAmount } from '@ui/hooks/useMaxWithdrawAmount'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; -import { smallFormatter, smallUsdFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { toFixedNoRound } from '@ui/utils/formatNumber'; - -export const WithdrawTab = ({ - poolData, - selectedAsset, - setSelectedAsset -}: { - poolData: PoolData; - selectedAsset: MarketData; - setSelectedAsset: (asset: MarketData) => void; -}) => { - const { underlyingDecimals, underlyingPrice, cToken, underlyingSymbol, underlyingToken } = - selectedAsset; - const { comptroller, chainId, assets: _assets } = poolData; - const assets = _assets.filter((asset) => asset.supplyBalance.gt(constants.Zero)); - - const errorToast = useErrorToast(); - const addRecentTransaction = useAddRecentTransaction(); - const queryClient = useQueryClient(); - const successToast = useSuccessToast(); - - const { cIPage } = useColors(); - const { currentSdk, address } = useMultiIonic(); - const { data: price } = useUsdPrice(chainId.toString()); - const { data: maxWithdrawAmount, isLoading: isMaxLoading } = useMaxWithdrawAmount( - selectedAsset, - chainId - ); - const withdrawableAmount = useMemo(() => { - if (maxWithdrawAmount) { - return utils.formatUnits(maxWithdrawAmount, underlyingDecimals); - } else { - return '0.0'; - } - }, [underlyingDecimals, maxWithdrawAmount]); - - const [steps, setSteps] = useState([...WITHDRAW_STEPS(underlyingSymbol)]); - const [isLoading, setIsLoading] = useState(false); - const [userEnteredAmount, setUserEnteredAmount] = useState(''); - const [amount, setAmount] = useState(constants.Zero); - const [usdAmount, setUsdAmount] = useState(0); - const [activeStep, setActiveStep] = useState(WITHDRAW_STEPS(underlyingSymbol)[0]); - const [isAmountValid, setIsAmountValid] = useState(false); - - const { data: borrowLimitTotal } = useBorrowLimitTotal(assets, chainId); - const totalBorrows = useMemo( - () => assets.reduce((acc, cur) => acc + cur.borrowBalanceFiat, 0), - // eslint-disable-next-line react-hooks/exhaustive-deps - [assets.map((asset) => asset.borrowBalanceFiat)] - ); - const index = useMemo(() => assets.findIndex((a) => a.cToken === cToken), [assets, cToken]); - const { data: updatedAssets } = useUpdatedUserAssets({ - amount, - assets, - index, - mode: FundOperationMode.WITHDRAW, - poolChainId: chainId - }); - const { data: updatedBorrowLimitTotal } = useBorrowLimitTotal(updatedAssets ?? [], chainId); - - useEffect(() => { - setSteps([...WITHDRAW_STEPS(underlyingSymbol)]); - setActiveStep(WITHDRAW_STEPS(underlyingSymbol)[0]); - }, [underlyingSymbol]); - - useEffect(() => { - if (amount.isZero() || !maxWithdrawAmount) { - setIsAmountValid(false); - } else { - setIsAmountValid(amount.lte(maxWithdrawAmount)); - } - }, [amount, maxWithdrawAmount]); - - useEffect(() => { - if (price && !amount.isZero()) { - setUsdAmount( - Number(utils.formatUnits(amount, underlyingDecimals)) * - Number(utils.formatUnits(underlyingPrice, 18)) * - price - ); - } else { - setUsdAmount(0); - } - }, [amount, price, underlyingDecimals, underlyingPrice]); - - const updateAmount = (newAmount: string) => { - if (newAmount.startsWith('-') || !newAmount) { - setUserEnteredAmount(''); - setAmount(constants.Zero); - - return; - } - try { - setUserEnteredAmount(newAmount); - const bigAmount = utils.parseUnits( - toFixedNoRound(newAmount, Number(underlyingDecimals)), - Number(underlyingDecimals) - ); - setAmount(bigAmount); - } catch (e) { - setAmount(constants.Zero); - } - }; - - const setToMax = async () => { - if (!currentSdk || !address || !maxWithdrawAmount) return; - - setIsLoading(true); - - try { - if (maxWithdrawAmount.lt(constants.Zero) || maxWithdrawAmount.isZero()) { - updateAmount(''); - } else { - const str = utils.formatUnits(maxWithdrawAmount, underlyingDecimals); - updateAmount(str); - } - - setIsLoading(false); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - const sentryInfo = { - contextName: 'Fetching max withdraw amount', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const onWithdraw = async () => { - if (!currentSdk || !address || !maxWithdrawAmount) return; - - setIsLoading(true); - - const _steps = [...steps]; - - _steps[0] = { - ..._steps[0], - status: ACTIVE - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - try { - let resp; - - if (maxWithdrawAmount.eq(amount)) { - resp = await currentSdk.withdraw(cToken, constants.MaxUint256); - } else { - resp = await currentSdk.withdraw(cToken, amount); - } - - if (resp.errorCode !== null) { - WithdrawError(resp.errorCode); - } else { - const tx = resp.tx; - - addRecentTransaction({ - description: `${underlyingSymbol} Token Withdraw`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - await tx.wait(); - - await queryClient.refetchQueries({ queryKey: ['usePoolData'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxSupplyAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxWithdrawAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxBorrowAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useMaxRepayAmount'] }); - await queryClient.refetchQueries({ queryKey: ['useSupplyCapsDataForPool'] }); - await queryClient.refetchQueries({ queryKey: ['useBorrowCapsDataForAsset'] }); - await queryClient.refetchQueries({ queryKey: ['useYourSuppliesRowData'] }); - await queryClient.refetchQueries({ queryKey: ['useAssetsToSupplyData'] }); - - _steps[0] = { - ..._steps[0], - status: COMPLETE - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - successToast({ - description: 'Successfully withdrew!', - id: 'Withdraw - ' + Math.random().toString() - }); - } - } catch (error) { - _steps[0] = { - ..._steps[0], - status: FAILED - }; - setSteps(_steps); - setActiveStep(_steps[0]); - - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller, - token: cToken - }; - - const sentryInfo = { - contextName: 'Withdraw', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - - setIsLoading(false); - }; - - useEffect(() => { - const _steps = [...WITHDRAW_STEPS(underlyingSymbol)]; - - setSteps(_steps); - }, [underlyingSymbol]); - - return ( - - - - - Amount - - - Withdrawable amount: - {smallFormatter(Number(withdrawableAmount), true)} - - - - - updateAmount(event.target.value)} - placeholder="0.0" - size={'xl'} - type="number" - value={userEnteredAmount} - variant="ghost" - /> - - {assets.map((asset, i) => { - return ( - { - setSelectedAsset(asset); - }} - p={0} - variant="_filter" - > - - - - - {asset.underlyingSymbol} - - - - - ); - })} - - } - bodyProps={{ p: 0 }} - popoverProps={{ placement: 'bottom-end', trigger: 'click' }} - > - - - - - {smallUsdFormatter(usdAmount)} - - -
- -
- - Collateral Apr - - 4.44% - - -
- -
- - - - Borrowing Utilization - - - - - 0% - - 80% - - 100% - - - - - - - - -
- -
- - - Collateral Balance ({underlyingSymbol}) - 1.0000031 - - - Borrow Limit - - {smallUsdFormatter(totalBorrows)} - - (max {borrowLimitTotal !== undefined ? smallUsdFormatter(borrowLimitTotal) : '--'} - - - - {updatedBorrowLimitTotal !== undefined - ? smallUsdFormatter(updatedBorrowLimitTotal) - : '--'} - ) - - - - - Daily Earnings - {`<$0.01`} - - - - - - - Amount is invalid - - } - bodyProps={{ p: 0 }} - boxProps={{ width: '100%' }} - popoverProps={{ placement: 'top', variant: 'warning' }} - visible={!isAmountValid} - > - - - -
- - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/index.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/index.tsx deleted file mode 100644 index dba65a6562..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/SupplyAndWithdrawModal/index.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { Flex, HStack, Tab, TabList, TabPanel, TabPanels, Tabs } from '@chakra-ui/react'; -import { constants } from 'ethers'; -import { useEffect, useState } from 'react'; - -import { SupplyTab } from './SupplyTab'; -import { WithdrawTab } from './WithdrawTab'; - -import { CardBox } from '@ui/components/shared/IonicBox'; -import { IonicModal } from '@ui/components/shared/Modal'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; - -export const SupplyAndWithdrawModal = ({ - isOpen, - onClose, - poolData -}: { - isOpen: boolean; - onClose: () => void; - poolData: PoolData; -}) => { - const [selectedSupplyAsset, setSelectedSupplyAsset] = useState(); - const [selectedWithdrawAsset, setSelectedWithdrawAsset] = useState(); - - useEffect(() => { - if (poolData && poolData.assets.length > 0) { - setSelectedSupplyAsset(poolData.assets.filter((asset) => !asset.isSupplyPaused)[0]); - } else { - setSelectedSupplyAsset(undefined); - } - }, [poolData]); - - useEffect(() => { - if (poolData && poolData.assets.length > 0) { - setSelectedWithdrawAsset( - poolData.assets.filter((asset) => asset.supplyBalance.gt(constants.Zero))[0] - ); - } else { - setSelectedWithdrawAsset(undefined); - } - }, [poolData]); - - return ( - - - - - - Supply - Withdraw - - - - - {selectedSupplyAsset ? ( - - ) : null} - - - {selectedWithdrawAsset ? ( - - ) : null} - - - - - - } - isOpen={isOpen} - onClose={onClose} - /> - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/index.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/index.tsx deleted file mode 100644 index 1b32cb422c..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Manage/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Button, Flex, useDisclosure } from '@chakra-ui/react'; - -import { SupplyAndWithdrawModal } from './SupplyAndWithdrawModal'; - -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const LendingManage = ({ poolData }: { poolData: PoolData }) => { - const { isOpen: isModalOpen, onOpen: openModal, onClose: closeModal } = useDisclosure(); - - return ( - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/ModeFilterButtons.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/ModeFilterButtons.tsx deleted file mode 100644 index be9fa4ea02..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/ModeFilterButtons.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import type { ButtonGroupProps } from '@chakra-ui/react'; -import { ButtonGroup, Flex, Text } from '@chakra-ui/react'; - -import { CButton } from '@ui/components/shared/Button'; -import { RowBox } from '@ui/components/shared/IonicBox'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ADVANCED_MODE, SIMPLE_MODE } from '@ui/constants/index'; -import type { LendingModeFilter } from '@ui/types/ComponentPropsType'; - -export const ModeFilterButtons = ({ - isLoading, - modeFilter, - onModeFilter, - props -}: { - isLoading: boolean; - modeFilter: LendingModeFilter; - onModeFilter: (filter: LendingModeFilter) => void; - props?: ButtonGroupProps; -}) => { - return ( - - - onModeFilter(SIMPLE_MODE)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Simple Mode - - - - onModeFilter(ADVANCED_MODE)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Advanced Mode - - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/Network.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/Network.tsx deleted file mode 100644 index 3aed2f8110..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/Network.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { HStack, Img, Text } from '@chakra-ui/react'; - -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useChainConfig } from '@ui/hooks/useChainConfig'; - -export const Network = ({ chainId }: { chainId: number }) => { - const chainConfig = useChainConfig(chainId); - - return ( - - {chainConfig && ( - - - {chainConfig.specificParams.metadata.name} - {chainConfig.specificParams.metadata.shortName} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/NetworkFilterDropdown.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/NetworkFilterDropdown.tsx deleted file mode 100644 index 4ffbf5b1b8..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/NetworkFilterDropdown.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import { SpinnerIcon } from '@chakra-ui/icons'; -import type { AvatarProps, ButtonProps } from '@chakra-ui/react'; -import { - Avatar, - AvatarGroup, - Button, - Checkbox, - Flex, - HStack, - Icon, - Img, - Spinner, - Text, - VStack -} from '@chakra-ui/react'; -import type { SupportedChains } from '@ionicprotocol/types'; -import { MdOutlineKeyboardArrowDown } from 'react-icons/md'; - -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL_NETWORKS } from '@ui/constants/index'; -import { useChainConfig, useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useColors } from '@ui/hooks/useColors'; -import type { NetworkFilter } from '@ui/types/ComponentPropsType'; - -export const NetworkFilterDropdown = ({ - loadingStatusPerChain, - networkFilter, - onNetworkFilter, - props -}: { - loadingStatusPerChain: { [chainId: string]: boolean }; - networkFilter: NetworkFilter[]; - onNetworkFilter: (filter: NetworkFilter) => void; - props?: ButtonProps; -}) => { - const { cIRow } = useColors(); - const enabledChains = useEnabledChains(); - const chainFilter = networkFilter.filter((f) => f !== ALL_NETWORKS) as SupportedChains[]; - - return ( - - - Select Networks - onNetworkFilter(ALL_NETWORKS)} - > - All Networks - - {enabledChains.map((chainId) => { - return ( - - ); - })} - - } - popoverProps={{ placement: 'bottom-start', trigger: 'click' }} - > - - - - ); -}; - -const IconChainName = ({ - chainId, - isLoading -}: { - chainId: SupportedChains; - isLoading: boolean; -}) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - {isLoading ? ( - - ) : ( - - )} - {chainConfig.specificParams.metadata.shortName} - - ) : null; -}; - -const ChainFilterCheckbox = ({ - chainId, - onNetworkFilter, - networkFilter, - isLoading -}: { - chainId: SupportedChains; - isLoading: boolean; - networkFilter: (SupportedChains | string)[]; - onNetworkFilter: (chainId: SupportedChains) => void; -}) => { - const chainConfig = useChainConfig(chainId); - const isChecked = networkFilter.includes(chainId) || networkFilter.includes(ALL_NETWORKS); - - return chainConfig ? ( - onNetworkFilter(chainId)}> - - - ) : null; -}; - -interface ButtonContentProps extends AvatarProps { - chainId: SupportedChains; - loadingStatusPerChain: { [chainId: string]: boolean }; -} - -const ButtonContent = ({ chainId, loadingStatusPerChain, ...avatarProps }: ButtonContentProps) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - - ) : undefined - } - name={chainConfig.specificParams.metadata.shortName} - src={chainConfig.specificParams.metadata.img} - width="26px" - {...avatarProps} - /> - - ) : null; -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/PoolFilterButtons.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/PoolFilterButtons.tsx deleted file mode 100644 index ec125c83e4..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/PoolFilterButtons.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import type { ButtonGroupProps } from '@chakra-ui/react'; -import { ButtonGroup, Flex, Text } from '@chakra-ui/react'; - -import { CButton } from '@ui/components/shared/Button'; -import { RowBox } from '@ui/components/shared/IonicBox'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL_POOLS, LST, RWA, STABLECOINS } from '@ui/constants/index'; -import type { LendingPoolFilter } from '@ui/types/ComponentPropsType'; - -export const PoolFilterButtons = ({ - isLoading, - onPoolFilter, - poolFilter, - props -}: { - isLoading: boolean; - onPoolFilter: (filter: LendingPoolFilter) => void; - poolFilter: LendingPoolFilter; - props?: ButtonGroupProps; -}) => { - return ( - - - onPoolFilter(ALL_POOLS)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - All Pools - - - - onPoolFilter(LST)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - LST - - - - onPoolFilter(RWA)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - RWA - - - - onPoolFilter(STABLECOINS)} - px={{ base: '8px' }} - py={{ base: 0 }} - variant="_filter" - > - - - Stablecoins - - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/PoolName.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/PoolName.tsx deleted file mode 100644 index 956129f1f0..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/PoolName.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { AvatarGroup, Box, Button, HStack, Link, Stack, Text, VStack } from '@chakra-ui/react'; -import { useRouter } from 'next/router'; -import { useState } from 'react'; - -import { GradientText } from '@ui/components/shared/GradientText'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { usePoolClaimableRewards } from '@ui/hooks/rewards/usePoolClaimableRewards'; -import { useRewardTokensOfPool } from '@ui/hooks/rewards/useRewardTokensOfPool'; -import { useColors } from '@ui/hooks/useColors'; - -export const PoolName = ({ - comptroller, - chainId, - poolName, - poolId, - isDisabledTooltip -}: { - chainId: number; - comptroller: string; - isDisabledTooltip?: boolean; - poolId: number; - poolName: string; -}) => { - const { setGlobalLoading } = useMultiIonic(); - const { data: rewardTokens } = useRewardTokensOfPool(comptroller, chainId); - const { data: claimableRewards } = usePoolClaimableRewards(comptroller, chainId); - const { cGreen, cIRow } = useColors(); - const router = useRouter(); - const [isHovering, setIsHovering] = useState(false); - - return ( - - - - - - - - {rewardTokens && rewardTokens.length && ( - - - Earn Rewards - - - {rewardTokens.map((token) => ( - - ))} - - - )} - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/SupplyBalance.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/SupplyBalance.tsx deleted file mode 100644 index 110012f102..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/SupplyBalance.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Text } from '@chakra-ui/react'; - -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const SupplyBalance = ({ pool }: { pool: PoolData }) => { - const { address } = useMultiIonic(); - return ( - <> - {!address ? ( - - - - - - - ) : ( - - )} - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/TotalSupply.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/TotalSupply.tsx deleted file mode 100644 index e7a1a8728a..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/TotalSupply.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const TotalSupply = ({ pool }: { pool: PoolData }) => { - return ( - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/LendingVaults/index.tsx b/packages/ui/components/pages/DashboardPage/LendingVaults/index.tsx deleted file mode 100644 index 769e0e6210..0000000000 --- a/packages/ui/components/pages/DashboardPage/LendingVaults/index.tsx +++ /dev/null @@ -1,615 +0,0 @@ -import { ChevronLeftIcon, ChevronRightIcon } from '@chakra-ui/icons'; -import { - Center, - Divider, - Flex, - Hide, - HStack, - Select, - Skeleton, - Stack, - Table, - Tbody, - Td, - Text, - Th, - Thead, - Tr -} from '@chakra-ui/react'; -import { useQuery } from '@tanstack/react-query'; -import type { - ColumnDef, - FilterFn, - PaginationState, - SortingFn, - SortingState -} from '@tanstack/react-table'; -import { - flexRender, - getCoreRowModel, - getExpandedRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - useReactTable -} from '@tanstack/react-table'; -import * as React from 'react'; -import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'; - -import { Assets } from './Assets'; -import { Claim } from './Claim'; -import { Liquidity } from './Liquidity'; -import { LendingManage } from './Manage'; -import { Network } from './Network'; -import { NetworkFilterDropdown } from './NetworkFilterDropdown'; -import { PoolName } from './PoolName'; -import { SupplyBalance } from './SupplyBalance'; -import { TotalSupply } from './TotalSupply'; - -import { Banner } from '@ui/components/shared/Banner'; -import { CIconButton } from '@ui/components/shared/Button'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import { SearchInput } from '@ui/components/shared/SearchInput'; -import { TableHeaderCell } from '@ui/components/shared/TableHeaderCell'; -import { - ALL_NETWORKS, - ALL_POOLS, - ASSETS, - IONIC_LOCALSTORAGE_KEYS, - LIQUIDITY, - NETWORK, - POOL_NAME, - POOLS_COLUMNS, - POOLS_COUNT_PER_PAGE, - SEARCH, - SIMPLE_MODE, - SUPPLY, - SUPPLY_BALANCE, - TOTAL_SUPPLY, - YOUR_BALANCE -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCrossPools } from '@ui/hooks/ionic/useCrossPools'; -import { useLendingPools } from '@ui/hooks/lend/useLendingPools'; -import { useLoadingStatusPerChain } from '@ui/hooks/pools/useLoadingStatusPerChain'; -import { useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useColors } from '@ui/hooks/useColors'; -import type { LendingFilter, NetworkFilter } from '@ui/types/ComponentPropsType'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export type PoolRowData = { - assets: PoolData; - liquidity: PoolData; - network: PoolData; - poolName: PoolData; - supplyBalance: PoolData; - totalSupply: PoolData; -}; - -export const LendingVaults = () => { - const enabledChains = useEnabledChains(); - const { isAllLoading, poolsPerChain, allPools, error } = useCrossPools([...enabledChains]); - const { address } = useMultiIonic(); - const [isLoading, setIsLoading] = useState(false); - const [selectedFilteredPools, setSelectedFilteredPools] = useState([]); - const [sorting, setSorting] = useState([ - { desc: true, id: address ? SUPPLY_BALANCE : TOTAL_SUPPLY } - ]); - const [pagination, onPagination] = useState({ - pageIndex: 0, - pageSize: POOLS_COUNT_PER_PAGE[0] - }); - const [networkFilter, setNetworkFilter] = useState([ALL_NETWORKS]); - const [globalFilter, setGlobalFilter] = useState([...networkFilter]); - const [searchText, setSearchText] = useState(''); - const mounted = useRef(false); - - const loadingStatusPerChain = useLoadingStatusPerChain(poolsPerChain); - - useQuery( - [ - 'selectedFilteredPools', - globalFilter, - allPools.map((pool) => pool.comptroller), - Object.values(poolsPerChain).map((query) => query.data?.map((pool) => pool.comptroller)) - ], - () => { - const pools: PoolData[] = []; - - if (globalFilter.includes(ALL_NETWORKS)) { - setSelectedFilteredPools([...allPools]); - } else { - globalFilter.map((filter) => { - const data = poolsPerChain[filter.toString()]?.data; - if (data) { - pools.push(...data); - } - }); - - setSelectedFilteredPools(pools); - } - - return null; - }, - { - enabled: Object.values(poolsPerChain).length > 0 && allPools.length > 0 - } - ); - - const globalFilterFn: FilterFn = useCallback( - (row, columnId, value) => { - const pool = row.original.network; - const namesAndSymbols: string[] = []; - pool.assets.map((asset) => { - namesAndSymbols.push( - asset.underlyingName.toLowerCase(), - asset.underlyingSymbol.toLowerCase() - ); - }); - if ( - !searchText || - (value.includes(SEARCH) && - (pool.comptroller.toLowerCase().includes(searchText.toLowerCase()) || - pool.name.toLowerCase().includes(searchText.toLowerCase()) || - namesAndSymbols.some((ns) => ns.includes(searchText.toLowerCase())))) - ) { - if (value.includes(ALL_NETWORKS) || value.includes(pool.chainId)) { - return true; - } else { - return false; - } - } else { - return false; - } - }, - [searchText] - ); - - const poolSort: SortingFn = (rowA, rowB, columnId) => { - if (columnId === NETWORK) { - return rowB.original.network.chainId > rowA.original.network.chainId ? 1 : -1; - } else if (columnId === POOL_NAME) { - return rowB.original.network.name.localeCompare(rowA.original.network.name); - } else if (columnId === SUPPLY_BALANCE) { - return rowA.original.network.totalSupplyBalanceFiat > - rowB.original.network.totalSupplyBalanceFiat - ? 1 - : -1; - } else if (columnId === LIQUIDITY) { - return rowA.original.network.totalLiquidityFiat > rowB.original.network.totalLiquidityFiat - ? 1 - : -1; - } else if (columnId === TOTAL_SUPPLY) { - return rowA.original.network.totalSuppliedFiat > rowB.original.network.totalSuppliedFiat - ? 1 - : -1; - } else { - return 1; - } - }; - - const data: PoolRowData[] = useLendingPools(allPools); - - const columns: ColumnDef[] = useMemo(() => { - return [ - { - accessorFn: (row) => row.network, - cell: ({ getValue }) => ().chainId} />, - enableHiding: false, - filterFn: globalFilterFn, - footer: (props) => props.column.id, - header: (context) => {NETWORK}, - id: NETWORK, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.poolName, - cell: ({ getValue }) => ( - ().chainId} - comptroller={getValue().comptroller} - poolId={getValue().id} - poolName={getValue().name} - /> - ), - enableHiding: false, - footer: (props) => props.column.id, - header: (context) => {POOL_NAME}, - id: POOL_NAME, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.assets, - cell: ({ getValue }) => ()} />, - enableSorting: false, - footer: (props) => props.column.id, - header: (context) => {ASSETS}, - id: ASSETS - }, - { - accessorFn: (row) => row.totalSupply, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {TOTAL_SUPPLY}, - id: TOTAL_SUPPLY, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.liquidity, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {LIQUIDITY}, - id: LIQUIDITY, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.supplyBalance, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => {YOUR_BALANCE}, - id: YOUR_BALANCE, - sortingFn: poolSort - }, - { - cell: ({ row }) => { - return ( - - - - - ); - }, - header: () => null, - id: SUPPLY - } - ]; - }, [globalFilterFn]); - - const table = useReactTable({ - columns, - data, - enableSortingRemoval: false, - getColumnCanGlobalFilter: () => true, - getCoreRowModel: getCoreRowModel(), - getExpandedRowModel: getExpandedRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), - getRowCanExpand: () => true, - getSortedRowModel: getSortedRowModel(), - globalFilterFn: globalFilterFn, - onGlobalFilterChange: setGlobalFilter, - onPaginationChange: onPagination, - onSortingChange: setSorting, - state: { - globalFilter, - pagination, - sorting - } - }); - - const { data: tableData } = useQuery(['LendingPoolsTableData', table], () => { - return { - canNextPage: table.getCanNextPage(), - canPreviousPage: table.getCanPreviousPage(), - filteredRows: table.getFilteredRowModel().rows, - headerGroups: table.getHeaderGroups(), - rows: table.getRowModel().rows - }; - }); - - const { cCard, cIPage, cIRow } = useColors(); - - useEffect(() => { - if (globalFilter.includes(SEARCH)) { - setGlobalFilter([...networkFilter, SEARCH]); - } else { - setGlobalFilter([...networkFilter]); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [networkFilter]); - - const onNetworkFilter = (filter: NetworkFilter) => { - let _networkFilter: NetworkFilter[] = []; - - if (networkFilter.includes(filter)) { - if (filter === ALL_NETWORKS) { - _networkFilter = [enabledChains[0]]; - } else { - _networkFilter = networkFilter.filter((f) => f !== filter); - - if (_networkFilter.length === 0) { - _networkFilter = [ALL_NETWORKS]; - } - } - } else { - if (networkFilter.includes(ALL_NETWORKS)) { - _networkFilter = [filter]; - } else if ( - filter === ALL_NETWORKS || - enabledChains.length === networkFilter.filter((f) => f !== ALL_NETWORKS).length + 1 - ) { - _networkFilter = [ALL_NETWORKS]; - } else { - _networkFilter = [...networkFilter, filter]; - } - } - - setNetworkFilter(_networkFilter); - }; - - useEffect(() => { - if (searchText) { - setGlobalFilter([...globalFilter, SEARCH]); - } else { - setGlobalFilter(globalFilter.filter((f) => f !== SEARCH)); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchText]); - - useEffect(() => { - if (mounted.current) { - const oldData = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - let oldObj; - if (oldData) { - oldObj = JSON.parse(oldData); - } - const data = { ...oldObj, globalFilter, searchText, sorting }; - localStorage.setItem(IONIC_LOCALSTORAGE_KEYS, JSON.stringify(data)); - } - }, [searchText, globalFilter, sorting]); - - useQuery( - [ - 'statusPerChain', - globalFilter, - isAllLoading, - Object.values(poolsPerChain).map((query) => { - return [query.data?.map((pool) => pool.comptroller), query.isLoading]; - }) - ], - () => { - const selectedChainIds = Object.keys(poolsPerChain).filter((chainId) => - globalFilter.includes(Number(chainId)) - ); - if (selectedChainIds.length > 0) { - let _isLoading = true; - selectedChainIds.map((chainId) => { - _isLoading = _isLoading && poolsPerChain[chainId].isLoading; - }); - setIsLoading(_isLoading); - } else { - setIsLoading(isAllLoading); - } - - return null; - }, - { - enabled: Object.values(poolsPerChain).length > 0 - } - ); - - useEffect(() => { - mounted.current = true; - - const data = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - if (data && mounted.current) { - const obj = JSON.parse(data); - const _globalFilter = (obj.globalFilter as LendingFilter[]) || [ - ALL_NETWORKS, - ALL_POOLS, - SIMPLE_MODE - ]; - setGlobalFilter(_globalFilter); - - if (obj && obj.sorting && POOLS_COLUMNS.includes(obj.sorting[0].id)) { - setSorting(obj.sorting); - } else { - setSorting([{ desc: true, id: TOTAL_SUPPLY }]); - } - } - - return () => { - mounted.current = false; - }; - }, []); - - if (error && error.code !== 'NETWORK_ERROR') { - return ( - - ); - } - - return ( - - - - Lending Pools - - setSearchText(searchText)} - placeholder="Search by asset or pool name" - /> -
- -
- -
-
- {tableData ? ( - <> - {!isLoading ? ( - - - {tableData.headerGroups.map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - ); - })} - - ))} - - - {tableData.rows && tableData.rows.length !== 0 ? ( - tableData.rows.map((row) => ( - - - {row.getVisibleCells().map((cell, index) => { - return ( - - ); - })} - - - )) - ) : selectedFilteredPools.length === 0 ? ( - - - - ) : ( - - - - )} - -
- - {flexRender(header.column.columnDef.header, header.getContext())} - -
- {flexRender(cell.column.columnDef.cell, cell.getContext())} -
-
There are no pools.
-
-
There are no results
-
- ) : ( - - - - - )} - - - - Pools Per Page - - - - - - {!tableData || tableData.filteredRows.length === 0 - ? 0 - : pagination.pageIndex * pagination.pageSize + 1}{' '} - -{' '} - {(pagination.pageIndex + 1) * pagination.pageSize > tableData.filteredRows.length - ? tableData.filteredRows.length - : (pagination.pageIndex + 1) * pagination.pageSize}{' '} - of {tableData.filteredRows.length} - - - } - isDisabled={!tableData.canPreviousPage} - isRound - onClick={() => table.previousPage()} - variant="_outline" - /> - } - isDisabled={!tableData.canNextPage} - isRound - onClick={() => table.nextPage()} - variant="_outline" - /> - - - - - ) : null} -
-
- ); -}; diff --git a/packages/ui/components/pages/DashboardPage/NetApr/index.tsx b/packages/ui/components/pages/DashboardPage/NetApr/index.tsx deleted file mode 100644 index 3ffaf6eee5..0000000000 --- a/packages/ui/components/pages/DashboardPage/NetApr/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Flex, Text } from '@chakra-ui/react'; - -import { CardBox } from '@ui/components/shared/IonicBox'; - -export const NetApr = () => { - return ( - - - - Net APR - 2.80% - - - - Evg.Collateral APR - - 4.82% - - - - Evg.Borrowing APR - - 4.10% - - - - Evg.Supply APR - - 2.79% - - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/NetAssetValue/index.tsx b/packages/ui/components/pages/DashboardPage/NetAssetValue/index.tsx deleted file mode 100644 index 2bfd2fa41c..0000000000 --- a/packages/ui/components/pages/DashboardPage/NetAssetValue/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Flex, Text } from '@chakra-ui/react'; - -import { CardBox } from '@ui/components/shared/IonicBox'; - -export const NetAssetValue = () => { - return ( - - - - Net asset value - $11,157,39 - - - - Total Collateral - - $233.31 - - - - Total Borrowed - - $123.47 - - - - Total Supply - - $10,924.08 - - - - - - ); -}; diff --git a/packages/ui/components/pages/DashboardPage/index.tsx b/packages/ui/components/pages/DashboardPage/index.tsx deleted file mode 100644 index 80405b79d2..0000000000 --- a/packages/ui/components/pages/DashboardPage/index.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Flex } from '@chakra-ui/react'; -import Head from 'next/head'; - -import { Borrows } from './Borrows'; -import { Claimable } from './Claimable'; -import { LendingStrategy } from './LendingStrategy'; -import { LendingVaults } from './LendingVaults'; -import { NetApr } from './NetApr'; -import { NetAssetValue } from './NetAssetValue'; - -import PageLayout from '@ui/components/pages/Layout/PageLayout'; -import PageTransitionLayout from '@ui/components/shared/PageTransitionLayout'; - -export const Dashboard = () => { - return ( - <> - - Dashboard - - - - - - - - - - - - - - - - - - - - - - - - - - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetButton.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetButton.tsx deleted file mode 100644 index 18d26a0d89..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetButton.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Button } from '@chakra-ui/react'; -import React from 'react'; - -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useIsUpgradeable } from '@ui/hooks/ionic/useIsUpgradable'; - -const AddAssetButton = ({ - openAddAssetModal, - comptrollerAddress, - poolChainId -}: { - comptrollerAddress: string; - openAddAssetModal: () => void; - poolChainId: number; -}) => { - const isUpgradeable = useIsUpgradeable(comptrollerAddress, poolChainId); - const isEditableAdmin = useIsEditableAdmin(comptrollerAddress, poolChainId); - - return isUpgradeable ? ( - - ) : null; -}; - -export default AddAssetButton; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetModal/AddAssetSettings.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetModal/AddAssetSettings.tsx deleted file mode 100644 index bf43f91501..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetModal/AddAssetSettings.tsx +++ /dev/null @@ -1,456 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - Divider, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Link, - Select, - Stack, - Text, - VStack -} from '@chakra-ui/react'; -import type { MarketConfig } from '@ionicprotocol/types'; -import { useQueryClient } from '@tanstack/react-query'; -import { constants } from 'ethers'; -import dynamic from 'next/dynamic'; -import { useEffect, useMemo, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { Center, Column } from '@ui/components/shared/Flex'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { SliderWithLabel } from '@ui/components/shared/SliderWithLabel'; -import { - ADMIN_FEE, - ADMIN_FEE_TOOLTIP, - LOAN_TO_VALUE, - LOAN_TO_VALUE_TOOLTIP, - RESERVE_FACTOR, - RESERVE_FACTOR_TOOLTIP -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useExtraPoolInfo } from '@ui/hooks/ionic/useExtraPoolInfo'; -import { useColors } from '@ui/hooks/useColors'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import type { TokenData } from '@ui/types/ComponentPropsType'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -const IRMChart = dynamic( - () => import('@ui/components/pages/EditPoolPage/AssetConfiguration/IRMChart'), - { - ssr: false - } -); - -type AddAssetFormData = { - adminFee: number; - collateralFactor: number; - interestRateModel: string; - pluginIndex: number; - reserveFactor: number; -}; - -export const AddAssetSettings = ({ - comptrollerAddress, - onSuccess, - poolID, - poolName, - tokenData, - poolChainId -}: { - comptrollerAddress: string; - onSuccess?: () => void; - poolChainId: number; - poolID: string; - poolName: string; - tokenData: TokenData; -}) => { - const { currentSdk, currentChain } = useMultiIonic(); - const successToast = useSuccessToast(); - const errorToast = useErrorToast(); - const queryClient = useQueryClient(); - const { cSelect, cIPage } = useColors(); - const { data } = useExtraPoolInfo(comptrollerAddress, poolChainId); - - const [isDeploying, setIsDeploying] = useState(false); - const [isPossible, setIsPossible] = useState(true); - - if (!currentSdk) throw new Error("SDK doesn't exist!"); - - const { - control, - register, - handleSubmit, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - adminFee: ADMIN_FEE.DEFAULT, - collateralFactor: LOAN_TO_VALUE.DEFAULT, - interestRateModel: currentSdk.chainDeployment.JumpRateModel.address, - pluginIndex: -1, - reserveFactor: RESERVE_FACTOR.DEFAULT - } - }); - - const watchAdminFee = watch('adminFee', ADMIN_FEE.DEFAULT); - const watchReserveFactor = watch('reserveFactor', RESERVE_FACTOR.DEFAULT); - const watchInterestRateModel = watch( - 'interestRateModel', - currentSdk.chainDeployment.JumpRateModel.address - ); - - const availablePlugins = useMemo(() => [], []); - - useEffect(() => { - const func = async () => { - setIsPossible(false); - try { - const masterPriceOracle = currentSdk.createMasterPriceOracle(); - const res = await masterPriceOracle.callStatic.oracles(tokenData.address); - if (res === constants.AddressZero) { - errorToast({ - description: - 'This asset is not supported. The price oracle is not available for this asset', - id: 'Asset not supported - ' + Math.random().toString() - }); - - return; - } - } catch (e) { - console.error(e); - return; - } - setIsPossible(true); - }; - - func(); - }, [tokenData.address, errorToast, currentSdk]); - - const deploy = async (data: AddAssetFormData) => { - const { collateralFactor, reserveFactor, adminFee, pluginIndex, interestRateModel } = data; - const plugin = pluginIndex === -1 ? undefined : availablePlugins[pluginIndex]; - - setIsDeploying(true); - - const marketConfig: MarketConfig = { - adminFee: adminFee, - bypassPriceFeedCheck: true, - collateralFactor: collateralFactor, - comptroller: comptrollerAddress, - feeDistributor: currentSdk.chainDeployment.FeeDistributor.address, - interestRateModel: interestRateModel, - name: poolName + ' ' + tokenData.name, - plugin: plugin, - reserveFactor: reserveFactor, - symbol: 'f' + tokenData.symbol + '-' + poolID, - underlying: tokenData.address - }; - - try { - await currentSdk.deployAsset(marketConfig); - - await queryClient.refetchQueries({ queryKey: ['usePoolData'] }); - - successToast({ - description: 'You may now lend and borrow with this asset.', - id: 'Added asset - ' + Math.random().toString(), - title: 'You have successfully added an asset to this pool!' - }); - - if (onSuccess) onSuccess(); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - symbol: tokenData.symbol, - underlying: tokenData.address - }; - const sentryInfo = { - contextName: 'Adding asset', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsDeploying(false); - } - }; - - return ( - - - - - - - - Loan-to-Value - - - - - - - ( - - )} - rules={{ - max: { - message: `Loan-to-Value must be no more than ${LOAN_TO_VALUE.MAX}%`, - value: LOAN_TO_VALUE.MAX - }, - min: { - message: `Loan-to-Value must be at least ${LOAN_TO_VALUE.MIN}%`, - value: LOAN_TO_VALUE.MIN - }, - required: 'Loan-to-Value is required' - }} - /> - - {errors.collateralFactor && errors.collateralFactor.message} - - - - - - - - - - Reserve Factor - - - - - - - ( - - )} - rules={{ - max: { - message: `Reserve factor must be no more than ${RESERVE_FACTOR.MAX}%`, - value: RESERVE_FACTOR.MAX - }, - min: { - message: `Reserve factor must be at least ${RESERVE_FACTOR.MIN}%`, - value: RESERVE_FACTOR.MIN - }, - required: 'Reserve factor is required' - }} - /> - - {errors.reserveFactor && errors.reserveFactor.message} - - - - - - - - - - Admin Fee - - - - - - - ( - - )} - rules={{ - max: { - message: `Admin fee must be no more than ${ADMIN_FEE.MAX}%`, - value: ADMIN_FEE.MAX - }, - min: { - message: `Admin fee must be at least ${ADMIN_FEE.MIN}%`, - value: ADMIN_FEE.MIN - }, - required: 'Admin fee is required' - }} - /> - - {errors.adminFee && errors.adminFee.message} - - - - - - - - - - Rewards Plugin - - This token has{' '} - - ERC4626 strategies - {' '} - implemented, allowing users to utilize their deposits (e.g. to stake them for - rewards) while using them as collateral. To learn mode about it, check out our{' '} - - docs - - . - - } - > - - - - - - - - {errors.pluginIndex && errors.pluginIndex.message} - - - - - - - - - - Interest Model - - - - - - - - - {errors.interestRateModel && errors.interestRateModel.message} - - - - - - -
- -
-
- ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetModal/index.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetModal/index.tsx deleted file mode 100644 index 309fea4ff0..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetModal/index.tsx +++ /dev/null @@ -1,286 +0,0 @@ -import { CheckIcon, CloseIcon } from '@chakra-ui/icons'; -import { - Box, - Button, - Center, - CircularProgress, - Flex, - Heading, - Input, - InputGroup, - InputRightElement, - Spacer, - Text, - VStack, - Wrap, - WrapItem -} from '@chakra-ui/react'; -import type { SupportedAsset } from '@ionicprotocol/types'; -import { useEffect, useMemo, useState } from 'react'; - -import { AddAssetSettings } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetModal/AddAssetSettings'; -import { IonicModal } from '@ui/components/shared/Modal'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useColors } from '@ui/hooks/useColors'; -import { usePoolData } from '@ui/hooks/usePoolData'; -import { useTokenData } from '@ui/hooks/useTokenData'; -import { sortSupportedAssets } from '@ui/utils/sorts'; - -interface AddAssetProps { - comptrollerAddress: string; - onSuccess?: () => void; - poolChainId: number; - poolID: string; - poolName: string; -} - -const AddAsset = ({ - comptrollerAddress, - onSuccess, - poolID, - poolName, - poolChainId -}: AddAssetProps) => { - const { currentSdk } = useMultiIonic(); - - const supportedAssets = useMemo(() => { - if (currentSdk) { - return currentSdk.supportedAssets.filter((asset) => !asset.disabled); - } else { - return []; - } - }, [currentSdk]); - - const [nameOrAddress, setNameOrAddress] = useState(''); - - const [availableAssets, setAvailableAssets] = useState([]); - const [addedAssets, setAddedAssets] = useState(); - const { data: poolData } = usePoolData(poolID, poolChainId); - - const { data: tokenData, isLoading, error } = useTokenData(nameOrAddress, poolData?.chainId); - - const { cIPage } = useColors(); - - useEffect(() => { - const availableAssets = supportedAssets.filter( - (asset) => - asset.name.toLowerCase().includes(nameOrAddress.toLowerCase()) || - asset.symbol.toLowerCase().includes(nameOrAddress.toLowerCase()) - ); - setAvailableAssets(sortSupportedAssets(availableAssets)); - }, [nameOrAddress, supportedAssets]); - - useEffect(() => { - if (poolData && poolData.assets.length !== 0) { - const addresses = poolData.assets.map((asset) => asset.underlyingToken.toLowerCase()); - setAddedAssets(addresses); - } - }, [poolData]); - - return ( - - - - {tokenData && poolData && ( - - )} - - {error && 'Invalid Address!'} - {tokenData && tokenData.symbol} - - {tokenData?.name && ( - - {tokenData.name} - - )} - - - - setNameOrAddress(event.target.value)} - placeholder={'Search name or paste address'} - textAlign="center" - value={nameOrAddress} - /> - - {error ? ( - - ) : isLoading ? ( - - ) : tokenData ? ( - - ) : null} - - - - - - {isLoading ? ( - <> - ) : tokenData ? ( - - ) : ( - <> - {poolData?.assets.length !== 0 && ( - - - Added assets - - - )} - - - {poolData && - poolData.assets.map((asset, index) => { - return ( - - - - ); - })} - - - - {poolData && availableAssets.length !== 0 ? ( - <> - - - Available supported assets - - - - - {availableAssets.map((asset, index) => { - return ( - - ); - })} - - - - ) : error ? ( - - Invalid address - - ) : ( - - Not available - - )} - - )} - - ); -}; - -const AddAssetModal = ({ - isOpen, - onClose, - poolChainId, - ...addAssetProps -}: AddAssetProps & { - isOpen: boolean; - onClose: () => void; - poolChainId: number; -}) => { - return ( - } - header="Add Asset" - isOpen={isOpen} - onClose={onClose} - /> - ); -}; - -export default AddAssetModal; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/AdminFee.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/AdminFee.tsx deleted file mode 100644 index 1bd04a7707..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/AdminFee.tsx +++ /dev/null @@ -1,202 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - ButtonGroup, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Spacer, - Text -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { useQueryClient } from '@tanstack/react-query'; -import type { ContractTransaction } from 'ethers'; -import { utils } from 'ethers'; -import { useEffect, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { testForCTokenErrorAndSend } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/index'; -import { Column } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { SliderWithLabel } from '@ui/components/shared/SliderWithLabel'; -import { ADMIN_FEE, ADMIN_FEE_TOOLTIP } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import { useExtraPoolInfo } from '@ui/hooks/ionic/useExtraPoolInfo'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -interface AdminFeeProps { - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const AdminFee = ({ comptrollerAddress, selectedAsset, poolChainId }: AdminFeeProps) => { - const { cToken: cTokenAddress } = selectedAsset; - const { currentSdk, currentChain } = useMultiIonic(); - - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const queryClient = useQueryClient(); - - const [isUpdating, setIsUpdating] = useState(false); - const { data: poolInfo } = useExtraPoolInfo(comptrollerAddress, poolChainId); - - const { - control, - handleSubmit, - setValue, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - adminFee: ADMIN_FEE.DEFAULT - } - }); - - const watchAdminFee = Number(watch('adminFee', ADMIN_FEE.DEFAULT)); - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - - useEffect(() => { - if (cTokenData) { - setValue('adminFee', parseInt(utils.formatUnits(cTokenData.adminFeeMantissa, 16))); - } - }, [cTokenData, setValue]); - - const updateAdminFee = async ({ adminFee }: { adminFee: number }) => { - if (!cTokenAddress || !currentSdk) return; - setIsUpdating(true); - const cToken = currentSdk.createICErc20(cTokenAddress || '', currentSdk.signer); - - // 5% -> 0.05 * 1e18 - const bigAdminFee = utils.parseUnits((adminFee / 100).toString()); - - try { - const tx: ContractTransaction = await testForCTokenErrorAndSend( - cToken.callStatic._setAdminFee, - bigAdminFee, - cToken._setAdminFee, - '' - ); - await tx.wait(); - - await queryClient.refetchQueries(); - - successToast({ - description: 'Successfully updated admin fee!', - id: 'Updated admin fee - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating admin fee', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsUpdating(false); - } - }; - - const setAdminFeeDefault = () => { - if (cTokenData) { - setValue('adminFee', parseInt(utils.formatUnits(cTokenData.adminFeeMantissa, 16))); - } - }; - - return ( - - {cTokenData && ( - <> - - - - - - Admin Fee {' '} - - - - - - - - ( - - )} - rules={{ - max: { - message: `Admin fee must be no more than ${ADMIN_FEE.MAX}%`, - value: ADMIN_FEE.MAX - }, - min: { - message: `Admin fee must be at least ${ADMIN_FEE.MIN}%`, - value: ADMIN_FEE.MIN - }, - required: 'Admin fee is required' - }} - /> - - {errors.adminFee && errors.adminFee.message} - - - - - {cTokenData && - watchAdminFee !== parseInt(utils.formatUnits(cTokenData.adminFeeMantissa, 16)) && ( - - - - - )} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/BorrowCapWhitelist.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/BorrowCapWhitelist.tsx deleted file mode 100644 index 908cd503db..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/BorrowCapWhitelist.tsx +++ /dev/null @@ -1,249 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - ButtonGroup, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Input, - Spacer, - Text -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { utils } from 'ethers'; -import { useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { CButton } from '@ui/components/shared/Button'; -import { Column } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { - ADD, - BORROW_CAP_WHITELIST, - BORROW_CAP_WHITELIST_TOOLTIP, - REMOVE -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import { useErrorToast, useInfoToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -interface BorrowCapWhitelistProps { - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const BorrowCapWhitelist = ({ - comptrollerAddress, - selectedAsset, - poolChainId -}: BorrowCapWhitelistProps) => { - const { cToken: cTokenAddress, underlyingSymbol } = selectedAsset; - const { currentSdk } = useMultiIonic(); - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const infoToast = useInfoToast(); - const addRecentTransaction = useAddRecentTransaction(); - - const [isUpdating, setIsUpdating] = useState(false); - - const { - control, - handleSubmit, - setValue, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - addressWhitelisted: BORROW_CAP_WHITELIST.DEFAULT, - mode: ADD - } - }); - - const watchAddressWhitelisted = watch('addressWhitelisted', BORROW_CAP_WHITELIST.DEFAULT); - const watchMode = watch('mode', ADD); - - const updateBorrowCapWhitelist = async ({ - addressWhitelisted, - mode - }: { - addressWhitelisted: string; - mode: string; - }) => { - if (!currentSdk) return; - - try { - setIsUpdating(true); - - const validAddress = utils.getAddress(addressWhitelisted); - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - const isBorrowCapwhitelisted = await comptroller.callStatic.isBorrowCapWhitelisted( - cTokenAddress, - validAddress - ); - - if ( - (!isBorrowCapwhitelisted && mode === ADD) || - (isBorrowCapwhitelisted && mode === REMOVE) - ) { - const tx = await comptroller._borrowCapWhitelist(cTokenAddress, validAddress, mode === ADD); - addRecentTransaction({ - description: `${ - mode === ADD ? 'Adding' : 'Removing' - } ${validAddress} in whitelist to borrow ${underlyingSymbol}`, - hash: tx.hash - }); - await tx.wait(); - - successToast({ - description: `Successfully ${mode === ADD ? 'added' : 'removed'} in whitelist.`, - id: 'Whitelist - ' + Math.random().toString() - }); - } else { - infoToast({ - description: `This address is already ${ - mode === ADD ? 'added' : 'removed' - } in whitelist.`, - id: 'Already added - ' + Math.random().toString() - }); - } - } catch (error) { - const sentryProperties = { - account: addressWhitelisted, - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating Borrow Cap Whitelist', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsUpdating(false); - setAddressWhitelistDefault(); - } - }; - - const setAddressWhitelistDefault = () => { - setValue('addressWhitelisted', BORROW_CAP_WHITELIST.DEFAULT); - }; - - return ( - - {cTokenData && ( - <> - - - - - - Borrow Cap Whitelist{' '} - - - - - - - - - - - ( - onChange(event.target.value)} - placeholder="0x0000000000000000000000000000000000000000" - type="text" - value={value} - width={200} - /> - )} - rules={{ - required: 'Address is required', - validate: { - isValidAdress: (v) => utils.isAddress(v) || 'Invalid address' - } - }} - /> - - - {errors.addressWhitelisted && errors.addressWhitelisted.message} - - - - ( - - {[ADD, REMOVE].map((_mode) => ( - onChange(_mode)} - variant="filter" - > - {_mode} - - ))} - - )} - /> - - - - - - {watchAddressWhitelisted !== '' && ( - - - - - )} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/DebtCeilings.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/DebtCeilings.tsx deleted file mode 100644 index d73d68760c..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/DebtCeilings.tsx +++ /dev/null @@ -1,378 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - ButtonGroup, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - InputGroup, - InputRightAddon, - NumberInput, - NumberInputField, - Select, - Spacer, - Text -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { useQueryClient } from '@tanstack/react-query'; -import { utils } from 'ethers'; -import { useEffect, useMemo, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { CButton } from '@ui/components/shared/Button'; -import { Column } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { DEBT_CEILING, DEFAULT_DECIMALS } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useAllUsdPrices } from '@ui/hooks/useAllUsdPrices'; -import { useColors } from '@ui/hooks/useColors'; -import { useDebtCeilingForAssetForCollateral } from '@ui/hooks/useDebtCeilingForAssetForCollateral'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { smallUsdFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -interface DebtCeilingsProps { - assets: NativePricedIonicAsset[]; - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const DebtCeilings = ({ - comptrollerAddress, - selectedAsset, - assets, - poolChainId -}: DebtCeilingsProps) => { - const { cToken: cTokenAddress } = selectedAsset; - const { currentSdk } = useMultiIonic(); - const { data: usdPrices } = useAllUsdPrices(); - const usdPrice = useMemo(() => { - if (usdPrices && usdPrices[poolChainId.toString()]) { - return usdPrices[poolChainId.toString()].value; - } else { - return undefined; - } - }, [usdPrices, poolChainId]); - - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const queryClient = useQueryClient(); - const { cSelect } = useColors(); - const [isEditDebtCeiling, setIsEditDebtCeiling] = useState(false); - const [debtCeilingState, setDebtCeilingState] = useState<{ - asset: NativePricedIonicAsset; - collateralAsset: NativePricedIonicAsset; - debtCeiling: number; - }>(); - const [defaultCollateralAssetCToken, setDefaultCollateralAssetCToken] = useState(); - - const { - control, - handleSubmit, - setValue, - register, - watch, - formState: { errors, isSubmitting } - } = useForm({ - defaultValues: { - collateralAsset: - assets.find((a) => a.cToken !== selectedAsset.cToken)?.cToken ?? assets[0].cToken, - debtCeiling: DEBT_CEILING.DEFAULT - } - }); - const isEditableAdmin = useIsEditableAdmin(comptrollerAddress, poolChainId); - - const watchDebtCeiling = Number(watch('debtCeiling', DEBT_CEILING.DEFAULT)); - - useEffect(() => { - const assetsExceptSelectedAsset = assets.filter((a) => a.cToken !== selectedAsset.cToken); - if (assetsExceptSelectedAsset.length > 0) { - setDefaultCollateralAssetCToken(assetsExceptSelectedAsset[0].cToken); - } else { - setDefaultCollateralAssetCToken(selectedAsset.cToken); - } - }, [assets, selectedAsset]); - - const watchCollateralAsset = watch('collateralAsset', defaultCollateralAssetCToken); - - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - const { data: debtCeilingPerCollateral } = useDebtCeilingForAssetForCollateral({ - assets: [selectedAsset], - collaterals: assets, - comptroller: comptrollerAddress, - poolChainId - }); - - useEffect(() => { - if (debtCeilingPerCollateral && debtCeilingPerCollateral.length > 0) { - const _debtCeiling = debtCeilingPerCollateral.find( - (_debtCeiling) => _debtCeiling.collateralAsset.cToken === watchCollateralAsset - ); - - setDebtCeilingState(_debtCeiling); - } else { - setDebtCeilingState(undefined); - } - }, [debtCeilingPerCollateral, watchCollateralAsset]); - - useEffect(() => { - setValue('debtCeiling', debtCeilingState ? debtCeilingState.debtCeiling : 0); - }, [debtCeilingState, setValue]); - - useEffect(() => { - if (defaultCollateralAssetCToken) { - setValue('collateralAsset', defaultCollateralAssetCToken); - setDefaultCollateralAssetCToken(undefined); - } - }, [defaultCollateralAssetCToken, setValue]); - - const updateDebtCeiling = async ({ - collateralAsset: collateralAssetAddress, - debtCeiling - }: { - collateralAsset: string; - debtCeiling: number | string; - }) => { - if (!currentSdk) return; - const collateralAsset = assets.find((asset) => asset.cToken === collateralAssetAddress); - if (!collateralAsset) { - throw new Error('Collateral asset not found'); - } - - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - try { - if (debtCeiling === '-1') { - const tx = await comptroller._blacklistBorrowingAgainstCollateral( - selectedAsset.cToken, - collateralAssetAddress, - true - ); - - await tx.wait(); - } else { - // if it was blacklisted already, then remove from blacklisted first - if (debtCeilingState?.debtCeiling === -1) { - const txBlacklisted = await comptroller._blacklistBorrowingAgainstCollateral( - selectedAsset.cToken, - collateralAssetAddress, - false - ); - - await txBlacklisted.wait(); - } - - const txDebtCeilings = await comptroller._setBorrowCapForCollateral( - selectedAsset.cToken, - collateralAssetAddress, - utils.parseUnits(debtCeiling.toString(), selectedAsset.underlyingDecimals) - ); - - await txDebtCeilings.wait(); - } - - await queryClient.refetchQueries({ - queryKey: ['useDebtCeilingForAssetForCollateral'] - }); - await queryClient.refetchQueries({ - queryKey: ['useCTokenData'] - }); - - successToast({ - description: `Successfully updated '${collateralAsset.underlyingSymbol}' debt ceiling for '${selectedAsset.underlyingSymbol}'!`, - id: 'Updated debt ceiling - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - collateralAsset, - comptroller: comptrollerAddress, - debtCeiling, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating debt ceiling', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - setDebtCeilingsDefault(); - } finally { - setIsEditDebtCeiling(false); - } - }; - - const setDebtCeilingsDefault = () => { - setValue('debtCeiling', debtCeilingState ? debtCeilingState.debtCeiling : 0); - - setIsEditDebtCeiling(false); - }; - - if (!cTokenData) { - return null; - } - - return ( - - - - - - Debt Ceilings - - - - - - - - - - - - - {errors.collateralAsset && errors.collateralAsset.message} - - - - ( - - - - - - {selectedAsset.underlyingSymbol}{' '} - {usdPrice && value > 0 - ? `(${smallUsdFormatter( - value * - Number( - utils.formatUnits(selectedAsset.underlyingPrice, DEFAULT_DECIMALS) - ) * - usdPrice - )})` - : ''} - - - )} - rules={{ - min: { - message: `Debt ceiling must be at least ${DEBT_CEILING.MIN} ${selectedAsset.underlyingSymbol}`, - value: DEBT_CEILING.MIN - }, - required: 'Debt ceiling is required' - }} - /> - - {errors.debtCeiling && errors.debtCeiling.message} - - - - - {isEditDebtCeiling ? ( - <> - - - - ) : ( - setIsEditDebtCeiling(true)} - > - Edit - - )} - - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/DebtCeilingsWhitelist.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/DebtCeilingsWhitelist.tsx deleted file mode 100644 index 021ef3418e..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/DebtCeilingsWhitelist.tsx +++ /dev/null @@ -1,342 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - ButtonGroup, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Input, - Select, - Spacer, - Text -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { utils } from 'ethers'; -import { useEffect, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { CButton } from '@ui/components/shared/Button'; -import { Column } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { - ADD, - DEBT_CEILING_WHITELIST, - DEBT_CEILING_WHITELIST_TOOLTIP, - REMOVE -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useColors } from '@ui/hooks/useColors'; -import { useErrorToast, useInfoToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -interface DebtCeilingsWhitelistProps { - assets: NativePricedIonicAsset[]; - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const DebtCeilingsWhitelist = ({ - comptrollerAddress, - selectedAsset, - assets, - poolChainId -}: DebtCeilingsWhitelistProps) => { - const { cToken: cTokenAddress } = selectedAsset; - const { currentSdk } = useMultiIonic(); - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const infoToast = useInfoToast(); - const { cSelect } = useColors(); - const [isSaving, setIsSaving] = useState(false); - const [defaultCollateralAssetCToken, setDefaultCollateralAssetCToken] = useState(); - - const { - control, - handleSubmit, - setValue, - register, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - addressWhitelisted: DEBT_CEILING_WHITELIST.DEFAULT, - collateralAsset: - assets.find((a) => a.cToken !== selectedAsset.cToken)?.cToken ?? assets[0].cToken, - mode: ADD - } - }); - const isEditableAdmin = useIsEditableAdmin(comptrollerAddress, poolChainId); - const addRecentTransaction = useAddRecentTransaction(); - - const watchAddressWhitelisted = watch('addressWhitelisted', DEBT_CEILING_WHITELIST.DEFAULT); - - const watchCollateralAsset = watch('collateralAsset', defaultCollateralAssetCToken); - const watchMode = watch('mode', ADD); - - useEffect(() => { - const assetsExceptSelectedAsset = assets.filter((a) => a.cToken !== selectedAsset.cToken); - if (assetsExceptSelectedAsset.length > 0) { - setDefaultCollateralAssetCToken(assetsExceptSelectedAsset[0].cToken); - } else { - setDefaultCollateralAssetCToken(selectedAsset.cToken); - } - }, [assets, selectedAsset]); - - useEffect(() => { - if (defaultCollateralAssetCToken) { - setValue('collateralAsset', defaultCollateralAssetCToken); - setDefaultCollateralAssetCToken(undefined); - } - }, [defaultCollateralAssetCToken, setValue]); - - const updateDebtCeilingWhitelist = async ({ - collateralAsset: collateralAssetAddress, - addressWhitelisted, - mode - }: { - addressWhitelisted: string; - collateralAsset: string; - mode: string; - }) => { - if (!currentSdk) return; - - const collateralAsset = assets.find((asset) => asset.cToken === collateralAssetAddress); - - if (!collateralAsset) return; - - try { - setIsSaving(true); - const validAddress = utils.getAddress(addressWhitelisted); - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - const [isAssetBlacklistWhitelisted, isDebtCeilingWhitelist] = await Promise.all([ - comptroller.callStatic.isBlacklistBorrowingAgainstCollateralWhitelisted( - selectedAsset.cToken, - collateralAssetAddress, - validAddress - ), - comptroller.callStatic.isBorrowCapForCollateralWhitelisted( - selectedAsset.cToken, - collateralAssetAddress, - validAddress - ) - ]); - - if ( - (!isAssetBlacklistWhitelisted && mode === ADD) || - (isAssetBlacklistWhitelisted && mode === REMOVE) - ) { - const tx = await comptroller._blacklistBorrowingAgainstCollateralWhitelist( - selectedAsset.cToken, - collateralAssetAddress, - validAddress, - mode === ADD - ); - addRecentTransaction({ - description: `${ - mode === ADD ? 'Adding' : 'Removing' - } ${validAddress} in asset-blacklist whitelist`, - hash: tx.hash - }); - await tx.wait(); - - successToast({ - description: `Successfully ${ - mode === ADD ? 'added' : 'removed' - } in asset-blacklist whitelist.`, - id: 'Asset-blacklist - ' + Math.random().toString() - }); - } else { - infoToast({ - description: `This address is already ${ - mode === ADD ? 'added' : 'removed' - } in asset-blacklist whitelist.`, - id: 'Asset-blacklist' + Math.random().toString() - }); - } - - if ( - (!isDebtCeilingWhitelist && mode === ADD) || - (isDebtCeilingWhitelist && mode === REMOVE) - ) { - const tx = await comptroller._setBorrowCapForCollateralWhitelist( - selectedAsset.cToken, - collateralAssetAddress, - validAddress, - mode === ADD - ); - addRecentTransaction({ - description: `${ - mode === ADD ? 'Adding' : 'Removing' - } ${validAddress} in debt-ceiling whitelist`, - hash: tx.hash - }); - await tx.wait(); - - successToast({ - description: `Successfully ${ - mode === ADD ? 'added' : 'removed' - } in debt-ceiling whitelist.`, - id: 'Debt-ceiling - ' + Math.random().toString() - }); - } else { - infoToast({ - description: `This address is already ${ - mode === ADD ? 'added' : 'removed' - } in debt-ceiling whitelist.`, - id: 'Debt-ceiling - ' + Math.random().toString() - }); - } - } catch (error) { - const sentryProperties = { - addressWhitelisted, - chainId: currentSdk.chainId, - collateralAsset, - comptroller: comptrollerAddress, - selectedAsset, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating debt ceiling Whitelist', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsSaving(false); - setAddressWhitelistDefault(); - } - }; - - const setAddressWhitelistDefault = () => { - setValue('addressWhitelisted', DEBT_CEILING_WHITELIST.DEFAULT); - }; - - return ( - - - - - - Debt Ceilings Whitelist - - - - - - - - - - - - - - - - - ( - onChange(event.target.value)} - placeholder="0x0000000000000000000000000000000000000000" - type="text" - value={value} - width={200} - /> - )} - rules={{ - required: 'Address is required', - validate: { - isValidAdress: (v) => utils.isAddress(v) || 'Invalid address' - } - }} - /> - - - {errors.addressWhitelisted && errors.addressWhitelisted.message} - - - - - - ( - - {[ADD, REMOVE].map((_mode) => ( - onChange(_mode)} - variant="filter" - > - {_mode} - - ))} - - )} - /> - - - - - - {watchAddressWhitelisted !== '' && ( - - - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/InterestRateModel.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/InterestRateModel.tsx deleted file mode 100644 index ac17caeeb6..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/InterestRateModel.tsx +++ /dev/null @@ -1,223 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - ButtonGroup, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Select, - Spacer, - Text -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { useQueryClient } from '@tanstack/react-query'; -import type { ContractTransaction } from 'ethers'; -import { utils } from 'ethers'; -import dynamic from 'next/dynamic'; -import { useEffect, useState } from 'react'; -import { useForm } from 'react-hook-form'; - -import { testForCTokenErrorAndSend } from '.'; - -import { ConfigRow } from '@ui/components/shared/ConfigRow'; -import { Column } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useSdk } from '@ui/hooks/ionic/useSdk'; -import { useColors } from '@ui/hooks/useColors'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -const IRMChart = dynamic( - () => import('@ui/components/pages/EditPoolPage/AssetConfiguration/IRMChart'), - { - ssr: false - } -); - -interface InterestRateModelProps { - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const InterestRateModel = ({ - comptrollerAddress, - selectedAsset, - poolChainId -}: InterestRateModelProps) => { - const { cToken: cTokenAddress } = selectedAsset; - const { currentSdk } = useMultiIonic(); - const sdk = useSdk(poolChainId); - - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const queryClient = useQueryClient(); - const { cSelect } = useColors(); - const [isUpdating, setIsUpdating] = useState(false); - const isEditableAdmin = useIsEditableAdmin(comptrollerAddress, poolChainId); - - const { - handleSubmit, - setValue, - register, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - interestRateModel: sdk ? sdk.chainDeployment.JumpRateModel.address : '' - } - }); - - const watchInterestRateModel = watch( - 'interestRateModel', - sdk ? sdk.chainDeployment.JumpRateModel.address : '' - ); - - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - - useEffect(() => { - if (cTokenData) { - setValue('interestRateModel', cTokenData.interestRateModelAddress); - } - }, [cTokenData, setValue]); - - const updateInterestRateModel = async ({ interestRateModel }: { interestRateModel: string }) => { - if (!cTokenAddress || !currentSdk) return; - setIsUpdating(true); - const cToken = currentSdk.createICErc20(cTokenAddress || '', currentSdk.signer); - - try { - const tx: ContractTransaction = await testForCTokenErrorAndSend( - // @ts-ignore - cToken.callStatic._setInterestRateModel, - interestRateModel, - // @ts-ignore - cToken._setInterestRateModel, - '' - ); - await tx.wait(); - await queryClient.refetchQueries(); - - successToast({ - description: 'Successfully updated interest rate model!', - id: 'Updated interest rate model - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - interestRateModel, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating interest rate model', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsUpdating(false); - } - }; - - const setInterestRateModelDefault = () => { - if (cTokenData) { - setValue('interestRateModel', cTokenData.interestRateModelAddress); - } - }; - - return ( - - {cTokenData && ( - <> - - - - - - - Interest Model - - - - - - - - - - {errors.interestRateModel && errors.interestRateModel.message} - - - - - {cTokenData && - cTokenData.interestRateModelAddress.toLowerCase() !== - watchInterestRateModel.toLowerCase() && ( - - - - - )} - - - - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/LoanToValue.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/LoanToValue.tsx deleted file mode 100644 index 4bf9f71c4e..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/LoanToValue.tsx +++ /dev/null @@ -1,222 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - ButtonGroup, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Spacer, - Text -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { ComptrollerErrorCodes } from '@ionicprotocol/types'; -import { useQueryClient } from '@tanstack/react-query'; -import { utils } from 'ethers'; -import { useEffect, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { Column } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { SliderWithLabel } from '@ui/components/shared/SliderWithLabel'; -import { LOAN_TO_VALUE, LOAN_TO_VALUE_TOOLTIP } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import { useExtraPoolInfo } from '@ui/hooks/ionic/useExtraPoolInfo'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -interface LoanToValueProps { - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const LoanToValue = ({ - comptrollerAddress, - selectedAsset, - poolChainId -}: LoanToValueProps) => { - const { cToken: cTokenAddress } = selectedAsset; - const { currentSdk, currentChain } = useMultiIonic(); - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const queryClient = useQueryClient(); - - const [isUpdating, setIsUpdating] = useState(false); - const { data: poolInfo } = useExtraPoolInfo(comptrollerAddress, poolChainId); - - const { - control, - handleSubmit, - setValue, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - collateralFactor: LOAN_TO_VALUE.DEFAULT - } - }); - - const watchCollateralFactor = Number(watch('collateralFactor', LOAN_TO_VALUE.DEFAULT)); - - useEffect(() => { - if (cTokenData) { - setValue( - 'collateralFactor', - parseInt(utils.formatUnits(cTokenData.collateralFactorMantissa, 16)) - ); - } - }, [cTokenData, setValue]); - - const updateCollateralFactor = async ({ collateralFactor }: { collateralFactor: number }) => { - if (!cTokenAddress || !currentSdk) return; - setIsUpdating(true); - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - - // 70% -> 0.7 * 1e18 - const bigCollateralFactor = utils.parseUnits((collateralFactor / 100).toString()); - try { - const response = await comptroller.callStatic._setCollateralFactor( - cTokenAddress, - bigCollateralFactor - ); - - if (!response.eq(0)) { - const err = new Error(' Code: ' + ComptrollerErrorCodes[response.toNumber()]); - - throw err; - } - - const tx = await comptroller._setCollateralFactor(cTokenAddress, bigCollateralFactor); - await tx.wait(); - - await queryClient.refetchQueries(); - - successToast({ - description: 'Successfully updated loan-to-Value!', - id: 'Updated loan-to-value - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating loan-to-value', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsUpdating(false); - } - }; - - const setCollateralFactorDefault = () => { - if (cTokenData) { - setValue( - 'collateralFactor', - parseInt(utils.formatUnits(cTokenData.collateralFactorMantissa, 16)) - ); - } - }; - - return ( - - {cTokenData && ( - <> - - - - - - - Loan-to-Value{' '} - - - - - - - - - ( - - )} - rules={{ - max: { - message: `Loan-to-Value must be no more than ${LOAN_TO_VALUE.MAX}%`, - value: LOAN_TO_VALUE.MAX - }, - min: { - message: `Loan-to-Value must be at least ${LOAN_TO_VALUE.MIN}%`, - value: LOAN_TO_VALUE.MIN - }, - required: 'Loan-to-Value is required' - }} - /> - - {errors.collateralFactor && errors.collateralFactor.message} - - - - - {cTokenData && - watchCollateralFactor !== - parseInt(utils.formatUnits(cTokenData.collateralFactorMantissa, 16)) && ( - - - - - )} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/Plugin.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/Plugin.tsx deleted file mode 100644 index 19b7f3468e..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/Plugin.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { Box, Flex, HStack, Link, Spacer, Text } from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; - -import { ConfigRow } from '@ui/components/shared/ConfigRow'; -import { Column } from '@ui/components/shared/Flex'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { usePluginInfo } from '@ui/hooks/usePluginInfo'; - -interface PluginProps { - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const Plugin = ({ selectedAsset, poolChainId }: PluginProps) => { - const { data: pluginInfo } = usePluginInfo(poolChainId, selectedAsset.plugin); - - return ( - - {pluginInfo && ( - <> - - - - - Rewards Plugin - - Token can have{' '} - - ERC4626 strategies - {' '} - , allowing users to utilize their deposits (e.g. to stake them for rewards) - while using them as collateral. To learn mode about it, check out our{' '} - - docs - - . - - } - > - - - - - - {pluginInfo?.name} - - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/ReserveFactor.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/ReserveFactor.tsx deleted file mode 100644 index 9806877083..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/ReserveFactor.tsx +++ /dev/null @@ -1,215 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - ButtonGroup, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Spacer, - Text -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { useQueryClient } from '@tanstack/react-query'; -import type { ContractTransaction } from 'ethers'; -import { utils } from 'ethers'; -import { useEffect, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { testForCTokenErrorAndSend } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/index'; -import { Column } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { SliderWithLabel } from '@ui/components/shared/SliderWithLabel'; -import { RESERVE_FACTOR } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import { useExtraPoolInfo } from '@ui/hooks/ionic/useExtraPoolInfo'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -interface ReserveFactorProps { - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const ReserveFactor = ({ - comptrollerAddress, - selectedAsset, - poolChainId -}: ReserveFactorProps) => { - const { cToken: cTokenAddress } = selectedAsset; - const { currentSdk, currentChain } = useMultiIonic(); - - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const queryClient = useQueryClient(); - const [isUpdating, setIsUpdating] = useState(false); - const { data: poolInfo } = useExtraPoolInfo(comptrollerAddress, poolChainId); - - const { - control, - handleSubmit, - setValue, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - reserveFactor: RESERVE_FACTOR.DEFAULT - } - }); - - const watchReserveFactor = Number(watch('reserveFactor', RESERVE_FACTOR.DEFAULT)); - - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - - useEffect(() => { - if (cTokenData) { - setValue('reserveFactor', parseInt(utils.formatUnits(cTokenData.reserveFactorMantissa, 16))); - } - }, [cTokenData, setValue]); - - const updateReserveFactor = async ({ reserveFactor }: { reserveFactor: number }) => { - if (!cTokenAddress || !currentSdk) return; - setIsUpdating(true); - const cToken = currentSdk.createICErc20(cTokenAddress || '', currentSdk.signer); - - // 10% -> 0.1 * 1e18 - const bigReserveFactor = utils.parseUnits((reserveFactor / 100).toString()); - - try { - const tx: ContractTransaction = await testForCTokenErrorAndSend( - cToken.callStatic._setReserveFactor, - bigReserveFactor, - cToken._setReserveFactor, - '' - ); - await tx.wait(); - - await queryClient.refetchQueries(); - - successToast({ - description: 'Successfully updated reserve factor!', - id: 'Updated reserve factor - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating reserve factor', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsUpdating(false); - } - }; - - const setReserveFactorDefault = () => { - if (cTokenData) { - setValue('reserveFactor', parseInt(utils.formatUnits(cTokenData.reserveFactorMantissa, 16))); - } - }; - - return ( - - {cTokenData && ( - <> - - - - - - Reserve Factor - - - - - - - - ( - - )} - rules={{ - max: { - message: `Reserve factor must be no more than ${RESERVE_FACTOR.MAX}%`, - value: RESERVE_FACTOR.MAX - }, - min: { - message: `Reserve factor must be at least ${RESERVE_FACTOR.MIN}%`, - value: RESERVE_FACTOR.MIN - }, - required: 'Reserve factor is required' - }} - /> - - {errors.reserveFactor && errors.reserveFactor.message} - - - - - {cTokenData && - watchReserveFactor !== - parseInt(utils.formatUnits(cTokenData.reserveFactorMantissa, 16)) && ( - - - - - )} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/SupplyAndBorrowCap.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/SupplyAndBorrowCap.tsx deleted file mode 100644 index 34e4c1817f..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/SupplyAndBorrowCap.tsx +++ /dev/null @@ -1,452 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - ButtonGroup, - Divider, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - InputGroup, - InputRightAddon, - NumberInput, - NumberInputField, - Spacer, - Text -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { useQueryClient } from '@tanstack/react-query'; -import { utils } from 'ethers'; -import { useEffect, useMemo, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { CButton } from '@ui/components/shared/Button'; -import { Column } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { BORROW_CAP, DEFAULT_DECIMALS, SUPPLY_CAP } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useAllUsdPrices } from '@ui/hooks/useAllUsdPrices'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { smallUsdFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -interface SupplyAndBorrowCapsProps { - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const SupplyAndBorrowCaps = ({ - comptrollerAddress, - selectedAsset, - poolChainId -}: SupplyAndBorrowCapsProps) => { - const queryClient = useQueryClient(); - const { cToken: cTokenAddress } = selectedAsset; - const { currentSdk } = useMultiIonic(); - const { data: usdPrices } = useAllUsdPrices(); - const usdPrice = useMemo(() => { - if (usdPrices && usdPrices[poolChainId.toString()]) { - return usdPrices[poolChainId.toString()].value; - } else { - return undefined; - } - }, [usdPrices, poolChainId]); - const [isEditSupplyCap, setIsEditSupplyCap] = useState(false); - const [isEditBorrowCap, setIsEditBorrowCap] = useState(false); - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - const [isSupplyCapSaving, setIsSupplyCapSaving] = useState(false); - const [isBorrowCapSaving, setIsBorrowCapSaving] = useState(false); - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - - const { - control, - handleSubmit, - setValue, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - borrowCap: BORROW_CAP.DEFAULT, - supplyCap: SUPPLY_CAP.DEFAULT - } - }); - - const isEditableAdmin = useIsEditableAdmin(comptrollerAddress, poolChainId); - - const watchSupplyCap = Number(watch('supplyCap', SUPPLY_CAP.DEFAULT)); - const watchBorrowCap = Number(watch('borrowCap', BORROW_CAP.DEFAULT)); - - useEffect(() => { - if (cTokenData) { - setValue( - 'supplyCap', - parseFloat(utils.formatUnits(cTokenData.supplyCap, cTokenData.decimals)) - ); - setValue( - 'borrowCap', - parseFloat(utils.formatUnits(cTokenData.borrowCap, cTokenData.decimals)) - ); - } - }, [cTokenData, setValue]); - - const updateSupplyCaps = async ({ supplyCap }: { supplyCap: number }) => { - if (!cTokenAddress || !currentSdk) return; - - setIsSupplyCapSaving(true); - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - try { - const tx = await comptroller._setMarketSupplyCaps( - [cTokenAddress], - [utils.parseUnits(supplyCap.toString(), selectedAsset.underlyingDecimals)] - ); - await tx.wait(); - - await queryClient.refetchQueries({ - queryKey: ['useSupplyCap'] - }); - await queryClient.refetchQueries({ - queryKey: ['useMaxSupplyAmount'] - }); - await queryClient.refetchQueries({ - queryKey: ['useCTokenData'] - }); - - successToast({ - description: 'Successfully updated max supply amount!', - id: 'Updated max supply - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - supplyCap, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating max supply amount', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsEditSupplyCap(false); - setIsSupplyCapSaving(false); - } - }; - - const updateBorrowCap = async ({ borrowCap }: { borrowCap: number }) => { - if (!cTokenAddress || !currentSdk) return; - - setIsBorrowCapSaving(true); - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - try { - const tx = await comptroller._setMarketBorrowCaps( - [cTokenAddress], - [utils.parseUnits(borrowCap.toString(), selectedAsset.underlyingDecimals)] - ); - - await tx.wait(); - - await queryClient.refetchQueries({ - queryKey: ['useBorrowCap'] - }); - await queryClient.refetchQueries({ - queryKey: ['useMaxBorrowAmount'] - }); - await queryClient.refetchQueries({ - queryKey: ['useCTokenData'] - }); - - successToast({ - description: 'Successfully updated max total borrow amount!', - id: 'Updated max total borrow - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - borrowCap, - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating max total borrow amount', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsEditBorrowCap(false); - setIsBorrowCapSaving(false); - } - }; - - const setSupplyCapsDefault = () => { - if (cTokenData) { - setValue( - 'supplyCap', - parseInt(utils.formatUnits(cTokenData.supplyCap, selectedAsset.underlyingDecimals)) - ); - } - - setIsEditSupplyCap(false); - }; - - const setTotalBorrowCapsDefault = () => { - if (cTokenData) { - setValue( - 'borrowCap', - parseInt(utils.formatUnits(cTokenData.borrowCap, selectedAsset.underlyingDecimals)) - ); - } - - setIsEditBorrowCap(false); - }; - - if (!cTokenData) return null; - - return ( - - <> - - - - - - - Supply Cap - - - - - - - - - ( - - - - - - {selectedAsset.underlyingSymbol}{' '} - {usdPrice && - value !== 0 && - `(${smallUsdFormatter( - value * - Number( - utils.formatUnits(selectedAsset.underlyingPrice, DEFAULT_DECIMALS) - ) * - usdPrice - )})`} - - - )} - rules={{ - min: { - message: `Supply caps must be at least ${SUPPLY_CAP.MIN} ${selectedAsset.underlyingSymbol}`, - value: SUPPLY_CAP.MIN - }, - required: 'Supply caps is required' - }} - /> - - {errors.supplyCap && errors.supplyCap.message} - - - - - {isEditSupplyCap ? ( - - - - - ) : ( - - setIsEditSupplyCap(true)} - > - Edit - - - )} - - - - - - - - - Borrow Cap - - - - - - - - - ( - - - - - - {selectedAsset.underlyingSymbol}{' '} - {usdPrice && - value !== 0 && - `(${smallUsdFormatter( - value * - Number( - utils.formatUnits(selectedAsset.underlyingPrice, DEFAULT_DECIMALS) - ) * - usdPrice - )})`} - - - )} - rules={{ - min: { - message: `Borrow cap must be at least ${BORROW_CAP.MIN} ${selectedAsset.underlyingSymbol}`, - value: BORROW_CAP.MIN - }, - required: 'Borrow cap is required' - }} - /> - - {errors.borrowCap && errors.borrowCap.message} - - - - - {isEditBorrowCap ? ( - - - - - ) : ( - - setIsEditBorrowCap(true)} - > - Edit - - - )} - - - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/SupplyCapWhitelist.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/SupplyCapWhitelist.tsx deleted file mode 100644 index 3b1a8de617..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/SupplyCapWhitelist.tsx +++ /dev/null @@ -1,249 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { - Button, - ButtonGroup, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Input, - Spacer, - Text -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { utils } from 'ethers'; -import { useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; - -import { CButton } from '@ui/components/shared/Button'; -import { Column } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { - ADD, - REMOVE, - SUPPLY_CAP_WHITELIST, - SUPPLY_CAP_WHITELIST_TOOLTIP -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import { useErrorToast, useInfoToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -interface SupplyCapWhitelistProps { - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const SupplyCapWhitelist = ({ - comptrollerAddress, - selectedAsset, - poolChainId -}: SupplyCapWhitelistProps) => { - const { cToken: cTokenAddress, underlyingSymbol } = selectedAsset; - const { currentSdk } = useMultiIonic(); - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const infoToast = useInfoToast(); - const addRecentTransaction = useAddRecentTransaction(); - - const [isUpdating, setIsUpdating] = useState(false); - - const { - control, - handleSubmit, - setValue, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - addressWhitelisted: SUPPLY_CAP_WHITELIST.DEFAULT, - mode: ADD - } - }); - - const watchAddressWhitelisted = watch('addressWhitelisted', SUPPLY_CAP_WHITELIST.DEFAULT); - const watchMode = watch('mode', ADD); - - const updateSupplyCapWhitelist = async ({ - addressWhitelisted, - mode - }: { - addressWhitelisted: string; - mode: string; - }) => { - if (!currentSdk) return; - - try { - setIsUpdating(true); - - const validAddress = utils.getAddress(addressWhitelisted); - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - const isSupplyCapwhitelisted = await comptroller.callStatic.isSupplyCapWhitelisted( - cTokenAddress, - validAddress - ); - - if ( - (!isSupplyCapwhitelisted && mode === ADD) || - (isSupplyCapwhitelisted && mode === REMOVE) - ) { - const tx = await comptroller._supplyCapWhitelist(cTokenAddress, validAddress, mode === ADD); - addRecentTransaction({ - description: `${ - mode === ADD ? 'Adding' : 'Removing' - } ${validAddress} in whitelist to supply ${underlyingSymbol}`, - hash: tx.hash - }); - await tx.wait(); - - successToast({ - description: `Successfully ${mode === ADD ? 'added' : 'removed'} in whitelist.`, - id: 'Updated supply cap whitelist - ' + Math.random().toString() - }); - } else { - infoToast({ - description: `This address is already ${ - mode === ADD ? 'added' : 'removed' - } in whitelist.`, - id: 'Already added or removed - ' + Math.random().toString() - }); - } - } catch (error) { - const sentryProperties = { - account: addressWhitelisted, - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating Supply Cap Whitelist', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsUpdating(false); - setAddressWhitelistDefault(); - } - }; - - const setAddressWhitelistDefault = () => { - setValue('addressWhitelisted', SUPPLY_CAP_WHITELIST.DEFAULT); - }; - - return ( - - {cTokenData && ( - <> - - - - - - Supply Cap Whitelist{' '} - - - - - - - - - - - ( - onChange(event.target.value)} - placeholder="0x0000000000000000000000000000000000000000" - type="text" - value={value} - width={200} - /> - )} - rules={{ - required: 'Address is required', - validate: { - isValidAdress: (v) => utils.isAddress(v) || 'Invalid address' - } - }} - /> - - - {errors.addressWhitelisted && errors.addressWhitelisted.message} - - - - ( - - {[ADD, REMOVE].map((_mode) => ( - onChange(_mode)} - variant="filter" - > - {_mode} - - ))} - - )} - /> - - - - - - {watchAddressWhitelisted !== '' && ( - - - - - )} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/ToggleBorrow.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/ToggleBorrow.tsx deleted file mode 100644 index 4e0a6097a4..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/ToggleBorrow.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { InfoOutlineIcon } from '@chakra-ui/icons'; -import { Flex, HStack, Spacer, Switch, Text } from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import { useState } from 'react'; - -import { Column, Row } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useErrorToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -interface ToggleBorrowProps { - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; -} - -export const ToggleBorrow = ({ - comptrollerAddress, - selectedAsset, - poolChainId -}: ToggleBorrowProps) => { - const [isUpdating, setIsUpdating] = useState(false); - const { cToken: cTokenAddress, isBorrowPaused: isPaused } = selectedAsset; - const { currentSdk } = useMultiIonic(); - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - const addRecentTransaction = useAddRecentTransaction(); - const errorToast = useErrorToast(); - const queryClient = useQueryClient(); - const isEditableAdmin = useIsEditableAdmin(comptrollerAddress, poolChainId); - - const toggleBorrowState = async () => { - if (!cTokenAddress || !currentSdk) return; - setIsUpdating(true); - - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - try { - if (!cTokenAddress) throw new Error('Missing token address'); - const tx = await comptroller._setBorrowPaused(cTokenAddress, !isPaused); - addRecentTransaction({ description: 'Set borrowing status', hash: tx.hash }); - await tx.wait(); - await queryClient.refetchQueries(); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - token: cTokenAddress - }; - const sentryInfo = { - contextName: 'Updating borrow status', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsUpdating(false); - } - }; - - return ( - - {cTokenData && ( - <> - - - Borrowing Possibility - - - - - - - - - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/index.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/index.tsx deleted file mode 100644 index b97bc40262..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/index.tsx +++ /dev/null @@ -1,181 +0,0 @@ -import { Divider } from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { ComptrollerErrorCodes, CTokenErrorCodes } from '@ionicprotocol/types'; -import type { BigNumber, ContractFunction } from 'ethers'; - -import { AdminFee } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/AdminFee'; -import { BorrowCapWhitelist } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/BorrowCapWhitelist'; -import { DebtCeilings } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/DebtCeilings'; -import { DebtCeilingsWhitelist } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/DebtCeilingsWhitelist'; -import { InterestRateModel } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/InterestRateModel'; -import { LoanToValue } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/LoanToValue'; -import { Plugin } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/Plugin'; -import { ReserveFactor } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/ReserveFactor'; -import { SupplyAndBorrowCaps } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/SupplyAndBorrowCap'; -import { SupplyCapWhitelist } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/SupplyCapWhitelist'; -import { ToggleBorrow } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/ToggleBorrow'; -import RemoveAssetButton from '@ui/components/pages/EditPoolPage/AssetConfiguration/RemoveAssetButton'; -import { ConfigRow } from '@ui/components/shared/ConfigRow'; -import { Column } from '@ui/components/shared/Flex'; -import { useCTokenData } from '@ui/hooks/ionic/useCTokenData'; -import type { TokenData } from '@ui/types/ComponentPropsType'; - -export async function testForCTokenErrorAndSend( - txObjectStaticCall: ContractFunction, // for static calls - txArgs: BigNumber | string, - txObject: ContractFunction, // actual method - failMessage: string -) { - let response = await txObjectStaticCall(txArgs); - - if (response.toString() !== '0') { - response = parseInt(response); - let err; - - if (response >= 1000) { - const comptrollerResponse = response - 1000; - let msg = ComptrollerErrorCodes[comptrollerResponse]; - if (msg === 'BORROW_BELOW_MIN') { - msg = - 'As part of our guarded launch, you cannot borrow less than 1 ETH worth of tokens at the moment.'; - } - err = new Error(failMessage + ' Comptroller Error: ' + msg); - } else { - err = new Error(failMessage + ' CToken Code: ' + CTokenErrorCodes[response]); - } - - // TODO CAPTURE WITH SENTRY - - throw err; - } - - return txObject(txArgs); -} - -interface AssetSettingsProps { - assets: NativePricedIonicAsset[]; - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; - setSelectedAsset: (value: NativePricedIonicAsset) => void; - tokenData: TokenData; -} - -export const AssetSettings = ({ - comptrollerAddress, - selectedAsset, - assets, - poolChainId, - setSelectedAsset -}: AssetSettingsProps) => { - const { cToken: cTokenAddress } = selectedAsset; - const { data: cTokenData } = useCTokenData(comptrollerAddress, cTokenAddress, poolChainId); - - return ( - - {cTokenData && ( - <> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - )} - - ); -}; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/EditAssetSettings.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/EditAssetSettings.tsx deleted file mode 100644 index e11d7a4432..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/EditAssetSettings.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { Spinner, Text } from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; - -import { AssetSettings } from '@ui/components/pages/EditPoolPage/AssetConfiguration/AssetSettings/index'; -import { Center } from '@ui/components/shared/Flex'; -import { useTokenData } from '@ui/hooks/useTokenData'; - -const EditAssetSettings = ({ - comptrollerAddress, - selectedAsset, - poolChainId, - setSelectedAsset, - assets -}: { - assets: NativePricedIonicAsset[]; - comptrollerAddress: string; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; - setSelectedAsset: (value: NativePricedIonicAsset) => void; -}) => { - const { data: tokenData, isLoading } = useTokenData(selectedAsset.underlyingToken, poolChainId); - if (isLoading) { - return ( -
- -
- ); - } - - if (tokenData) { - return ( - - ); - } - return ( -
- Try again later -
- ); -}; - -export default EditAssetSettings; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/IRMChart.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/IRMChart.tsx deleted file mode 100644 index 3fdde3e57c..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/IRMChart.tsx +++ /dev/null @@ -1,44 +0,0 @@ -/* This is a dynamically imported component on client-side only */ - -import { Box, Center, Spinner, Text } from '@chakra-ui/react'; -import dynamic from 'next/dynamic'; - -import { useAssetChartData } from '@ui/hooks/useAssetChartData'; - -const UtilizationChart = dynamic(() => import('@ui/components/shared/UtilizationChart'), { - ssr: false -}); - -interface IRMChartProps { - adminFee: number; - interestRateModelAddress: string; - poolChainId: number; - reserveFactor: number; -} -const IRMChart = ({ - interestRateModelAddress, - reserveFactor, - adminFee, - poolChainId -}: IRMChartProps) => { - const { data, isLoading, error } = useAssetChartData( - interestRateModelAddress, - reserveFactor, - adminFee, - poolChainId - ); - - return ( -
- {isLoading && } - {error && {"No graph is available for this asset's interest curves."}} - {data && ( - - - - )} -
- ); -}; - -export default IRMChart; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/RemoveAssetButton.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/RemoveAssetButton.tsx deleted file mode 100644 index 2c03d12f48..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/RemoveAssetButton.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { Box, Button, useDisclosure } from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { ComptrollerErrorCodes } from '@ionicprotocol/types'; -import { useQueryClient } from '@tanstack/react-query'; -import { useState } from 'react'; - -import ConfirmDeleteModal from '@ui/components/shared/ConfirmDeleteModal'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useIsUpgradeable } from '@ui/hooks/ionic/useIsUpgradable'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -const RemoveAssetButton = ({ - comptrollerAddress, - asset, - poolChainId, - setSelectedAsset, - assets -}: { - asset: NativePricedIonicAsset; - assets: NativePricedIonicAsset[]; - comptrollerAddress: string; - poolChainId: number; - setSelectedAsset: (value: NativePricedIonicAsset) => void; -}) => { - const { currentSdk } = useMultiIonic(); - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const isUpgradeable = useIsUpgradeable(comptrollerAddress, poolChainId); - const { isOpen, onOpen, onClose } = useDisclosure(); - const queryClient = useQueryClient(); - const [isRemoving, setIsRemoving] = useState(false); - const isEditableAdmin = useIsEditableAdmin(comptrollerAddress, poolChainId); - - const removeAsset = () => { - onClose(); - remove(); - }; - - const remove = async () => { - if (!currentSdk) return; - - setIsRemoving(true); - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - const response = await comptroller.callStatic._unsupportMarket(asset.cToken); - - if (!response.eq(0)) { - const err = new Error(' Code: ' + ComptrollerErrorCodes[response.toNumber()]); - throw err; - } - - try { - const tx = await comptroller._unsupportMarket(asset.cToken); - await tx.wait(); - - await queryClient.refetchQueries(); - setSelectedAsset(assets[0]); - - successToast({ - description: 'You have successfully removed an asset from this pool!', - id: 'Removed asset - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - token: asset.cToken - }; - const sentryInfo = { - contextName: 'Removing asset', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - - return; - } - - setIsRemoving(false); - }; - - return isUpgradeable ? ( - - - - - ) : null; -}; - -export default RemoveAssetButton; diff --git a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/index.tsx b/packages/ui/components/pages/EditPoolPage/AssetConfiguration/index.tsx deleted file mode 100644 index 43e75b6d6e..0000000000 --- a/packages/ui/components/pages/EditPoolPage/AssetConfiguration/index.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import type { BoxProps } from '@chakra-ui/react'; -import { Box, Divider, Flex, Text } from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import React, { useState } from 'react'; - -import AddAssetButton from '@ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetButton'; -import EditAssetSettings from '@ui/components/pages/EditPoolPage/AssetConfiguration/EditAssetSettings'; -import { CButton } from '@ui/components/shared/Button'; -import { ConfigRow } from '@ui/components/shared/ConfigRow'; -import { Center, Column } from '@ui/components/shared/Flex'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useTokenData } from '@ui/hooks/useTokenData'; - -interface AssetButtonProps extends BoxProps { - asset: NativePricedIonicAsset; - isEditableAdmin?: boolean | null; - poolChainId: number; - selectedAsset: NativePricedIonicAsset; - setSelectedAsset: (value: NativePricedIonicAsset) => void; -} - -const AssetButton = ({ - asset, - selectedAsset, - setSelectedAsset, - isEditableAdmin, - poolChainId, - ...boxProps -}: AssetButtonProps) => { - const { data: tokenData } = useTokenData(asset.underlyingToken, poolChainId); - - return ( - - { - setSelectedAsset(asset); - }} - px={2} - variant="_filter" - > - -
- {tokenData?.symbol ?? asset.underlyingSymbol} -
-
-
- ); -}; - -const AssetConfiguration = ({ - openAddAssetModal, - assets, - comptrollerAddress, - poolChainId -}: { - assets: NativePricedIonicAsset[]; - comptrollerAddress: string; - openAddAssetModal: () => void; - poolChainId: number; -}) => { - const [selectedAsset, setSelectedAsset] = useState(assets[0]); - const isEditableAdmin = useIsEditableAdmin(comptrollerAddress, poolChainId); - - return ( - - - - Assets Configuration - - - - - - - - - - {selectedAsset ? ( - <> - - - Assets: - - - {assets.map((asset) => ( - - ))} - - - - - - - - ) : null} - - ); -}; - -export default AssetConfiguration; diff --git a/packages/ui/components/pages/EditPoolPage/FlywheelEdit/AddFlywheelModal.tsx b/packages/ui/components/pages/EditPoolPage/FlywheelEdit/AddFlywheelModal.tsx deleted file mode 100644 index d096ca62e6..0000000000 --- a/packages/ui/components/pages/EditPoolPage/FlywheelEdit/AddFlywheelModal.tsx +++ /dev/null @@ -1,137 +0,0 @@ -import { CheckIcon, SmallCloseIcon as CloseIcon } from '@chakra-ui/icons'; -import { - Box, - Button, - CircularProgress, - HStack, - Input, - InputGroup, - InputRightElement, - Text, - VStack -} from '@chakra-ui/react'; -import React, { useCallback, useMemo, useState } from 'react'; - -import ClipboardValue from '@ui/components/shared/ClipboardValue'; -import { Center } from '@ui/components/shared/Flex'; -import { IonicModal } from '@ui/components/shared/Modal'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useFlywheel } from '@ui/hooks/rewards/useFlywheel'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import type { AddFlywheelModalProps, AddFlywheelProps } from '@ui/types/ComponentPropsType'; -import { shortAddress } from '@ui/utils/shortAddress'; - -const AddFlywheel = ({ comptrollerAddress, onSuccess }: AddFlywheelProps) => { - const { currentSdk, address } = useMultiIonic(); - - const successToast = useSuccessToast(); - const errorToast = useErrorToast(); - - const [flywheelAddress, setFlywheelAddress] = useState(''); - const { data: flywheel, error, isLoading } = useFlywheel(flywheelAddress); - - const [isAdding, setIsAdding] = useState(false); - const isReady = useMemo( - () => flywheel?.address === flywheelAddress, - [flywheel?.address, flywheelAddress] - ); - - const addFlywheel = useCallback(async () => { - if (!flywheel || !currentSdk) return; - - try { - setIsAdding(true); - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - const tx = await comptroller.functions._addRewardsDistributor(flywheel?.address, { - from: address - }); - await tx.wait(); - successToast({ - description: 'Flywheel added to pool!', - id: 'Added flywheel - ' + Math.random().toString() - }); - if (onSuccess) onSuccess(); - } catch (e) { - console.error(e); - errorToast({ - description: e as string, - id: 'Adding flywheel - ' + Math.random().toString() - }); - } finally { - setIsAdding(false); - } - }, [address, comptrollerAddress, errorToast, flywheel, currentSdk, onSuccess, successToast]); - - return ( - - - setFlywheelAddress(event.target.value)} - placeholder="Flywheel Address: 0xXX...XX" - px={2} - textAlign="center" - value={flywheelAddress} - /> - - {error ? ( - - ) : isLoading ? ( - - ) : flywheel ? ( - - ) : null} - - - - {flywheel && ( - - - Owner: - - - - Reward Token: - - - - Rewards Contract: - - - - Booster: - - - - )} - - - - - ); -}; - -const AddFlywheelModal = ({ isOpen, onClose, ...rest }: AddFlywheelModalProps) => { - return ( - - - - } - header="Add Existing Flywheel" - isOpen={isOpen} - onClose={onClose} - /> - ); -}; - -export default AddFlywheelModal; diff --git a/packages/ui/components/pages/EditPoolPage/FlywheelEdit/CreateFlywheelModal.tsx b/packages/ui/components/pages/EditPoolPage/FlywheelEdit/CreateFlywheelModal.tsx deleted file mode 100644 index 938c6caaa4..0000000000 --- a/packages/ui/components/pages/EditPoolPage/FlywheelEdit/CreateFlywheelModal.tsx +++ /dev/null @@ -1,241 +0,0 @@ -import { CheckIcon, SmallCloseIcon as CloseIcon } from '@chakra-ui/icons'; -import { - Box, - Button, - CircularProgress, - Image, - Input, - InputGroup, - InputRightElement, - Text, - VStack -} from '@chakra-ui/react'; -// import { FlywheelStaticRewards } from '@ionicprotocol/sdk/dist/cjs/typechain/FlywheelStaticRewards'; -// import { IonicFlywheel } from '@ionicprotocol/sdk/dist/cjs/typechain/IonicFlywheel'; -import { useRouter } from 'next/router'; -import { useState } from 'react'; - -import { Center } from '@ui/components/shared/Flex'; -import { IonicModal } from '@ui/components/shared/Modal'; -import TransactionStepper from '@ui/components/shared/TransactionStepper'; -import { INCOMPLETE } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { useTokenData } from '@ui/hooks/useTokenData'; -import SmallWhiteCircle from '@ui/images/small-white-circle.png'; -import type { CreateFlywheelModalProps, CreateFlywheelProps } from '@ui/types/ComponentPropsType'; - -const steps = [ - { - description: 'Deploying Flywheel Core', - index: 1, - status: INCOMPLETE, - title: 'Deploying Flywheel Core' - }, - { - description: 'Deploying Flywheel Rewards', - index: 2, - status: INCOMPLETE, - title: 'Deploying Flywheel Rewards' - }, - { - description: 'Adding Rewards to Flywheel', - index: 3, - status: INCOMPLETE, - title: 'Adding Rewards to Flywheel' - }, - { - description: 'Adding Flywheel to Pool', - index: 4, - status: INCOMPLETE, - title: 'Adding Flywheel to Pool' - } -]; - -// const CreateFlywheel = ({ comptrollerAddress, onSuccess }: CreateFlywheelProps) => { -const CreateFlywheel = ({ onSuccess }: CreateFlywheelProps) => { - const { currentSdk } = useMultiIonic(); - - const successToast = useSuccessToast(); - const errorToast = useErrorToast(); - - const [rewardToken, setRewardToken] = useState(''); - - const [isDeploying, setIsDeploying] = useState(false); - const [activeStep, setActiveStep] = useState(0); - const [failedStep, setFailedStep] = useState(0); - const { - data: rewardTokenData, - error, - isLoading - } = useTokenData(rewardToken, currentSdk?.chainId); - - // const readyToDeploy = useMemo(() => { - // if (!rewardTokenData) return false; - // return rewardTokenData.address.toLowerCase() === rewardToken.toLowerCase(); - // }, [rewardToken, rewardTokenData]); - - const router = useRouter(); - const poolChainId = router.query.chainId as string; - - const handleDeploy = async () => { - if (!currentSdk) return; - - try { - setActiveStep(0); - setFailedStep(0); - if (!rewardTokenData) throw new Error('No Token Data'); - setIsDeploying(true); - // let fwCore: IonicFlywheel; - - try { - setActiveStep(1); - - // fwCore = await currentSdk.deployFlywheelCore(rewardTokenData.address); - successToast({ - description: 'Flywheel Core Deployed', - id: 'Flywheel core deployed - ' + Math.random().toString() - }); - } catch (error) { - setFailedStep(1); - console.error(error); - throw 'Failed to deploy Flywheel Core'; - } - - // let fwStaticRewards: FlywheelStaticRewards; - try { - setActiveStep(2); - // fwStaticRewards = await currentSdk.deployFlywheelStaticRewards(fwCore.address); - // await fwStaticRewards.deployTransaction.wait(); - successToast({ - description: 'Flywheel Rewards Deployed', - id: 'Flywheel rewards deployed - ' + Math.random().toString() - }); - } catch (error) { - setFailedStep(2); - console.error(error); - throw 'Failed to deploy Flywheel Rewards'; - } - - try { - setActiveStep(3); - // const tx = await currentSdk.setFlywheelRewards(fwCore.address, fwStaticRewards.address); - // await tx.wait(); - successToast({ - description: 'Rewards Added to Flywheel', - id: 'Rewards added - ' + Math.random().toString() - }); - } catch (error) { - setFailedStep(3); - console.error(error); - throw 'Failed to add Rewards to Flywheel'; - } - - try { - setActiveStep(4); - // const tx = await currentSdk.addFlywheelCoreToComptroller( - // fwCore.address, - // comptrollerAddress - // ); - // await tx.wait(); - successToast({ - description: 'Flywheel added to Pool', - id: 'Flywheel added - ' + Math.random().toString() - }); - } catch (error) { - setFailedStep(4); - console.error(error); - throw 'Failed to add Flywheel to Pool'; - } - - setIsDeploying(false); - setActiveStep(0); - setFailedStep(0); - if (onSuccess) onSuccess(); - } catch (error) { - console.error(error); - setIsDeploying(false); - errorToast({ - description: JSON.stringify(error), - id: 'Adding flywheel - ' + Math.random().toString() - }); - return; - } - }; - - return ( - - - {rewardTokenData?.logoURL && ( - - )} - {`Reward Token: ${ - rewardTokenData ? rewardTokenData.name + ` (${rewardTokenData.symbol})` : '' - }`} - - setRewardToken(event.target.value)} - placeholder="Reward Token Address: 0xXX...XX" - px={2} - textAlign="center" - value={rewardToken} - /> - - {error ? ( - - ) : isLoading ? ( - - ) : rewardTokenData ? ( - - ) : null} - - - - - - - - - - - - ); -}; - -const CreateFlywheelModal = ({ - isOpen, - onClose, - ...createFlywheelProps -}: CreateFlywheelModalProps) => { - return ( - - - - } - header="Create New Flywheel" - isOpen={isOpen} - onClose={onClose} - /> - ); -}; -export default CreateFlywheelModal; diff --git a/packages/ui/components/pages/EditPoolPage/FlywheelEdit/EditFlywheelModal.tsx b/packages/ui/components/pages/EditPoolPage/FlywheelEdit/EditFlywheelModal.tsx deleted file mode 100644 index ace666c7f8..0000000000 --- a/packages/ui/components/pages/EditPoolPage/FlywheelEdit/EditFlywheelModal.tsx +++ /dev/null @@ -1,521 +0,0 @@ -import { - Button, - Divider, - Heading, - HStack, - Image, - InputGroup, - InputRightAddon, - NumberInput, - NumberInputField, - Select, - Skeleton, - Spinner, - Stat, - StatGroup, - StatHelpText, - StatLabel, - StatNumber, - Text, - VStack -} from '@chakra-ui/react'; -import type { SupportedChains } from '@ionicprotocol/types'; -import { utils } from 'ethers'; -import { formatUnits } from 'ethers/lib/utils'; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import DatePicker from 'react-datepicker'; - -import ClipboardValue from '@ui/components/shared/ClipboardValue'; -import { Center } from '@ui/components/shared/Flex'; -import { IonicModal } from '@ui/components/shared/Modal'; -import { DEFAULT_DECIMALS } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useFlywheelEnabledMarkets } from '@ui/hooks/rewards/useFlywheelEnabledMarkets'; -import { useRewardsInfoForMarket } from '@ui/hooks/rewards/useRewardsInfoForMarket'; -import { useColors } from '@ui/hooks/useColors'; -import { useErrorToast } from '@ui/hooks/useToast'; -import { useTokenBalance } from '@ui/hooks/useTokenBalance'; -import { useTokenData } from '@ui/hooks/useTokenData'; -import SmallWhiteCircle from '@ui/images/small-white-circle.png'; -import type { Flywheel } from '@ui/types/ComponentPropsType'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { toFixedNoRound } from '@ui/utils/formatNumber'; -import { ChainSupportedAssets } from '@ui/utils/networkData'; -import { shortAddress } from '@ui/utils/shortAddress'; -import 'react-datepicker/dist/react-datepicker.css'; - -const EditFlywheelModal = ({ - flywheel, - pool, - isOpen, - onClose -}: { - flywheel: Flywheel; - isOpen: boolean; - onClose: () => void; - pool: PoolData; -}) => { - const { currentSdk, address } = useMultiIonic(); - - const { data: tokenData } = useTokenData(flywheel.rewardToken, currentSdk?.chainId); - const isAdmin = address === flywheel.owner; - - const { data: flywheelRewardsBalance, refetch: refetchRewardsBalance } = useTokenBalance( - flywheel.rewardToken, - pool.chainId, - flywheel.rewards - ); - const { data: myBalance } = useTokenBalance(flywheel.rewardToken, pool.chainId); - const rewardTokenDecimal = useMemo(() => { - const asset = ChainSupportedAssets[pool.chainId as SupportedChains].find((asset) => { - return asset.underlying === flywheel.rewardToken; - }); - - return asset ? asset.decimals : DEFAULT_DECIMALS; - }, [flywheel.rewardToken, pool.chainId]); - - const errorToast = useErrorToast(); - - const [fundingAmount, setTransactionPendingAmount] = useState(0); - const [supplySpeed, setSupplySpeed] = useState('0.0'); - const [isTransactionPending, setTransactionPending] = useState(false); - const [selectedMarket, selectMarket] = useState(pool?.assets[0]); - const [endDate, setEndDate] = useState(null); - const [isDateEditable, setDateEditable] = useState(false); - const [isSpeedEditable, setSpeedEditable] = useState(false); - - const { data: rewardsInfo, refetch: refetchRewardsInfo } = useRewardsInfoForMarket( - flywheel.address, - selectedMarket?.cToken, - pool.chainId - ); - const { data: enabledMarkets, refetch: refetchEnabledMarkets } = useFlywheelEnabledMarkets( - flywheel.address - ); - - const { cPage } = useColors(); - - const rewardsSpeed = useMemo(() => { - return rewardsInfo?.rewardsPerSecond - ? Number( - toFixedNoRound(utils.formatUnits(rewardsInfo.rewardsPerSecond, rewardTokenDecimal), 8) - ) - : 0; - }, [rewardsInfo, rewardTokenDecimal]); - - useEffect(() => { - if (rewardsInfo?.rewardsPerSecond) { - setSupplySpeed( - toFixedNoRound(utils.formatUnits(rewardsInfo.rewardsPerSecond, rewardTokenDecimal), 8) - ); - } - if (rewardsInfo?.rewardsEndTimestamp !== undefined && rewardsInfo?.rewardsEndTimestamp >= 0) { - if (rewardsInfo?.rewardsEndTimestamp === 0) { - setEndDate(null); - } else { - setEndDate(new Date(rewardsInfo.rewardsEndTimestamp * 1000)); - } - } - }, [rewardsInfo, rewardTokenDecimal]); - - const fund = useCallback(async () => { - if (!currentSdk) return; - const token = currentSdk.getEIP20TokenInstance(flywheel.rewardToken, currentSdk.signer); - - setTransactionPending(true); - try { - const tx = await token.transfer( - flywheel.rewards, - utils.parseUnits(fundingAmount.toString(), rewardTokenDecimal) - ); - await tx.wait(); - refetchRewardsBalance(); - } catch (error) { - const sentryProperties = { - amount: fundingAmount, - chainId: currentSdk.chainId, - rewardToken: flywheel.rewardToken, - rewards: flywheel.rewards - }; - const sentryInfo = { - contextName: 'Funding flywheel rewards contract', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setTransactionPending(false); - } - }, [ - flywheel.rewardToken, - flywheel.rewards, - currentSdk, - fundingAmount, - refetchRewardsBalance, - errorToast, - rewardTokenDecimal - ]); - - const updateRewardInfo = useCallback(async () => { - if (!currentSdk) return; - if (!isAdmin) throw new Error('User is not admin of this Flywheel!'); - if (!selectedMarket) throw new Error('No asset selected!'); - - try { - setTransactionPending(true); - - const tx = await currentSdk.setStaticRewardInfo(flywheel.rewards, selectedMarket.cToken, { - // TODO enable in UI - rewardsEndTimestamp: endDate ? endDate.getTime() / 1000 : 0, - rewardsPerSecond: utils.parseUnits(supplySpeed, rewardTokenDecimal) - }); - - await tx.wait(); - refetchRewardsInfo(); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - rewards: flywheel.rewards, - rewardsEndTimestamp: endDate ? endDate.getTime() / 1000 : 0, - rewardsPerSecond: utils.parseUnits(supplySpeed, rewardTokenDecimal), - token: selectedMarket.cToken - }; - const sentryInfo = { - contextName: 'Updating rewards info', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setTransactionPending(false); - setDateEditable(false); - setSpeedEditable(false); - } - }, [ - supplySpeed, - endDate, - flywheel.rewards, - currentSdk, - isAdmin, - selectedMarket, - refetchRewardsInfo, - errorToast, - rewardTokenDecimal - ]); - - const enableForRewards = useCallback( - (market: string) => async () => { - if (!currentSdk) return; - - try { - setTransactionPending(true); - const tx = await currentSdk.addMarketForRewardsToFlywheelCore(flywheel.address, market); - await tx.wait(); - refetchRewardsInfo(); - refetchEnabledMarkets(); - setTransactionPending(false); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - flywheel: flywheel.address, - token: market - }; - const sentryInfo = { - contextName: 'Enabling rewards', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setTransactionPending(false); - } - }, - [flywheel.address, currentSdk, errorToast, refetchRewardsInfo, refetchEnabledMarkets] - ); - - const onMax = () => { - if (myBalance) { - setTransactionPendingAmount(Number(utils.formatUnits(myBalance, rewardTokenDecimal))); - } - }; - - return ( - - - {tokenData?.logoURL ? ( - {tokenData.symbol} - ) : ( - - )} - - - Reward Token - {tokenData ? ( - {tokenData.symbol} - ) : ( - - Token Name - - )} - - - - - - Rewards Contract - {flywheelRewardsBalance && tokenData ? ( - - {formatUnits(flywheelRewardsBalance, tokenData.decimals)} - - ) : ( - - 0.0000 - - )} - - - - - - - {/* Funding */} - - - - Fund Flywheel Rewards Contract - - - - - { - setTransactionPendingAmount(parseFloat(valueString)); - }} - > - - - {tokenData?.symbol} - - - - - - - Your balance:{' '} - {myBalance - ? Number(utils.formatUnits(myBalance, rewardTokenDecimal)).toFixed(4) - : 0}{' '} - {tokenData?.symbol} - - - - - {/* Rewards */} - {pool.assets.length ? ( - - - Set Speed and End Time for Market Suppliers - - - - {selectedMarket && - enabledMarkets && - !enabledMarkets.includes(selectedMarket.cToken) && ( -
- -
- )} - {rewardsInfo && rewardsInfo?.enabled && ( - <> - - - Current Speed - - - - { - setSupplySpeed(newSupplySpeed); - }} - step={0.1} - value={supplySpeed} - > - - - {`${tokenData?.symbol} / sec`} - - - - - - - - - - End Time - - - - {rewardsInfo?.rewardsEndTimestamp === 0 && !isDateEditable ? ( - End Time/Date Has Not Yet Been Set - ) : ( - setEndDate(date)} - readOnly={!isDateEditable} - selected={endDate} - showTimeInput - timeInputLabel="Time:" - /> - )} - - - - - - )} -
- ) : ( -
- Add Assets to this pool to configure their rewards. -
- )} -
- - } - header="Edit Flywheel" - isOpen={isOpen} - onClose={onClose} - /> - ); -}; - -export default EditFlywheelModal; diff --git a/packages/ui/components/pages/EditPoolPage/FlywheelEdit/index.tsx b/packages/ui/components/pages/EditPoolPage/FlywheelEdit/index.tsx deleted file mode 100644 index a35a83dc8a..0000000000 --- a/packages/ui/components/pages/EditPoolPage/FlywheelEdit/index.tsx +++ /dev/null @@ -1,226 +0,0 @@ -// Chakra and UI -import { - Badge, - Button, - Flex, - Heading, - HStack, - Image, - Spinner, - Table, - Tbody, - Td, - Th, - Thead, - Tr, - useDisclosure -} from '@chakra-ui/react'; -import type { SupportedChains } from '@ionicprotocol/types'; -import { utils } from 'ethers'; -import React, { useCallback, useMemo, useState } from 'react'; - -import AddFlywheelModal from '@ui/components/pages/EditPoolPage/FlywheelEdit/AddFlywheelModal'; -import CreateFlywheelModal from '@ui/components/pages/EditPoolPage/FlywheelEdit/CreateFlywheelModal'; -import EditFlywheelModal from '@ui/components/pages/EditPoolPage/FlywheelEdit/EditFlywheelModal'; -import ClipboardValue from '@ui/components/shared/ClipboardValue'; -import { Center, Column } from '@ui/components/shared/Flex'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import { TokenIconGroup } from '@ui/components/shared/TokenIconGroup'; -import { config } from '@ui/config/index'; -import { DEFAULT_DECIMALS } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useIsUpgradeable } from '@ui/hooks/ionic/useIsUpgradable'; -import { useCTokensUnderlying } from '@ui/hooks/rewards/useCTokensUnderlying'; -import { useFlywheelsForPool } from '@ui/hooks/rewards/useFlywheelsForPool'; -import { useColors } from '@ui/hooks/useColors'; -import { useTokenBalance } from '@ui/hooks/useTokenBalance'; -import { useTokenData } from '@ui/hooks/useTokenData'; -import type { Flywheel } from '@ui/types/ComponentPropsType'; -import type { PoolData } from '@ui/types/TokensDataMap'; -import { ChainSupportedAssets } from '@ui/utils/networkData'; -import { shortAddress } from '@ui/utils/shortAddress'; - -const FlywheelEdit = ({ pool }: { pool: PoolData }) => { - const { isOpen: isAddOpen, onOpen: openAdd, onClose: closeAdd } = useDisclosure(); - const { isOpen: isEditOpen, onOpen: openEdit, onClose: closeEdit } = useDisclosure(); - const { isOpen: isCreateOpen, onOpen: openCreate, onClose: closeCreate } = useDisclosure(); - - const { - data: flywheels, - refetch: refetchFlywheels, - isLoading - } = useFlywheelsForPool(pool.comptroller, pool.chainId); - const isUpgradeable = useIsUpgradeable(pool.comptroller, pool.chainId); - - const [flywheel, setFlywheel] = useState(); - const isEditableAdmin = useIsEditableAdmin(pool.comptroller, pool.chainId); - - const onFlywheelEdit = useCallback( - (fw: Flywheel) => { - setFlywheel(fw); - openEdit(); - }, - [setFlywheel, openEdit] - ); - - return ( - <> - {isUpgradeable && ( - <> - { - closeAdd(); - refetchFlywheels(); - }} - /> - { - closeCreate(); - refetchFlywheels(); - }} - /> - - )} - - {pool && flywheel && ( - - )} - - - {isLoading && ( - - - - )} - - {pool?.comptroller && isUpgradeable && ( - - Flywheels - - - - {config.isFWDeployEnabled ? ( - - ) : null} - - - )} - - {!!pool && !!flywheels?.length && ( - - - - - - - - - - - - - {!pool && !flywheels.length ? ( -
- -
- ) : ( - flywheels.map((fw, i) => ( - - )) - )} - -
AddressReward TokenActive Markets in PoolBalanceAdmin
- )} -
- - ); -}; - -const FlywheelRow = ({ - flywheel, - pool, - onClick -}: { - flywheel: Flywheel; - onClick: (fw: Flywheel) => void; - pool: PoolData; -}) => { - const { address, currentSdk } = useMultiIonic(); - - // TODO check authority here as well. - const isAdmin = address === flywheel.owner; - const { data: tokenData } = useTokenData(flywheel.rewardToken, currentSdk?.chainId); - // TODO filter out rewards of markets of other pools! - - // Balances - const { data: fwBalance } = useTokenBalance(flywheel.rewardToken, pool.chainId, flywheel.rewards); - const fwTokenDecimal = useMemo(() => { - const asset = ChainSupportedAssets[pool.chainId as SupportedChains].find((asset) => { - return asset.underlying === flywheel.rewardToken; - }); - - return asset ? asset.decimals : DEFAULT_DECIMALS; - }, [flywheel.rewardToken, pool.chainId]); - const marketsOfPool = useMemo(() => pool.assets.map((a) => a.cToken), [pool]); - const activeMarkets = useMemo( - () => flywheel.markets.filter((m) => marketsOfPool.includes(m)), - [flywheel.markets, marketsOfPool] - ); - const underlyingsMap = useCTokensUnderlying(activeMarkets); - const underlyings = Object.values(underlyingsMap); - - const { cCard } = useColors(); - - return ( - (isAdmin ? onClick(flywheel) : {})} - p={4} - > - - - - - - - {tokenData?.logoURL ? ( - - ) : null} - - {tokenData ? tokenData.symbol ?? 'Invalid Address!' : 'Loading...'} - - - - - {!!underlyings.length ? ( - - ) : ( - None - )} - - - {fwBalance ? Number(utils.formatUnits(fwBalance, fwTokenDecimal)).toFixed(3) : 0}{' '} - {tokenData?.symbol} - - - {isAdmin ? 'Admin' : 'Not Admin'} - - - ); -}; - -export default FlywheelEdit; diff --git a/packages/ui/components/pages/EditPoolPage/PoolConfiguration/TransferOwnershipModal.tsx b/packages/ui/components/pages/EditPoolPage/PoolConfiguration/TransferOwnershipModal.tsx deleted file mode 100644 index c73cc11f95..0000000000 --- a/packages/ui/components/pages/EditPoolPage/PoolConfiguration/TransferOwnershipModal.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { Button, Input, VStack } from '@chakra-ui/react'; -import { utils } from 'ethers'; -import { useState } from 'react'; - -import { Center } from '@ui/components/shared/Flex'; -import { IonicModal } from '@ui/components/shared/Modal'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; - -const TransferOwnershipModal = ({ - isOpen, - onClose, - comptrollerAddress -}: { - comptrollerAddress: string; - isOpen: boolean; - onClose: () => void; -}) => { - const { currentSdk } = useMultiIonic(); - const successToast = useSuccessToast(); - const errorToast = useErrorToast(); - const [isTransferring, setIsTransferring] = useState(false); - - const [inputAddress, setInputAddress] = useState(''); - - const transferOwnership = async () => { - if (!currentSdk) return; - - const verifiedAddress = utils.getAddress(inputAddress); - - try { - setIsTransferring(true); - - const unitroller = currentSdk.createUnitroller(comptrollerAddress); - - const tx = await unitroller._setPendingAdmin(verifiedAddress); - await tx.wait(); - - successToast({ - description: `${verifiedAddress} can now become the admin of this pool!`, - id: 'Transfer ownership - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - newAdmin: verifiedAddress - }; - const sentryInfo = { - contextName: 'Transferring ownership', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsTransferring(false); - setInputAddress(''); - onClose(); - } - }; - - return ( - -
- setInputAddress(event.target.value)} - placeholder="Transferring Address: 0xXX...XX" - px={2} - textAlign="center" - value={inputAddress} - variant="outline" - /> -
- - - } - header="Transfer Ownership" - isOpen={isOpen} - onClose={onClose} - /> - ); -}; - -export default TransferOwnershipModal; diff --git a/packages/ui/components/pages/EditPoolPage/PoolConfiguration/index.tsx b/packages/ui/components/pages/EditPoolPage/PoolConfiguration/index.tsx deleted file mode 100644 index 90d8df466a..0000000000 --- a/packages/ui/components/pages/EditPoolPage/PoolConfiguration/index.tsx +++ /dev/null @@ -1,747 +0,0 @@ -import { - AvatarGroup, - Box, - Button, - ButtonGroup, - Divider, - Flex, - FormControl, - FormErrorMessage, - FormLabel, - HStack, - Input, - Spacer, - Spinner, - Switch, - Text, - useDisclosure -} from '@chakra-ui/react'; -import type { NativePricedIonicAsset } from '@ionicprotocol/types'; -import { ComptrollerErrorCodes } from '@ionicprotocol/types'; -import { useChainModal, useConnectModal } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import type { BigNumber, ContractTransaction } from 'ethers'; -import { utils } from 'ethers'; -import { useRouter } from 'next/router'; -import { useEffect, useMemo, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; -import { useSwitchNetwork } from 'wagmi'; - -import { WhitelistInfo } from '@ui/components/pages/CreatePoolPage/WhitelistInfo'; -import TransferOwnershipModal from '@ui/components/pages/EditPoolPage/PoolConfiguration/TransferOwnershipModal'; -import { ConfigRow } from '@ui/components/shared/ConfigRow'; -import { Center, Column } from '@ui/components/shared/Flex'; -import { SliderWithLabel } from '@ui/components/shared/SliderWithLabel'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { CLOSE_FACTOR, LIQUIDATION_INCENTIVE } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useExtraPoolInfo } from '@ui/hooks/ionic/useExtraPoolInfo'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { getChainConfig } from '@ui/utils/networkData'; - -const PoolConfiguration = ({ - assets, - comptrollerAddress, - poolName, - poolChainId -}: { - assets: NativePricedIonicAsset[]; - comptrollerAddress: string; - poolChainId: number; - poolName: string; -}) => { - const router = useRouter(); - const poolId = router.query.poolId as string; - - const { currentSdk, address, currentChain } = useMultiIonic(); - const { openConnectModal } = useConnectModal(); - const { openChainModal } = useChainModal(); - - const queryClient = useQueryClient(); - const errorToast = useErrorToast(); - const successToast = useSuccessToast(); - const chainConfig = useMemo(() => getChainConfig(poolChainId), [poolChainId]); - const { switchNetworkAsync } = useSwitchNetwork(); - const handleSwitch = async () => { - if (chainConfig && switchNetworkAsync) { - await switchNetworkAsync(chainConfig.chainId); - } else if (openChainModal) { - openChainModal(); - } - }; - const { data } = useExtraPoolInfo(comptrollerAddress, poolChainId); - const isEditableAdmin = useIsEditableAdmin(comptrollerAddress, poolChainId); - const [inputPoolName, setInputPoolName] = useState(poolName); - const [isEditable, setIsEditable] = useState(false); - const [isSaving, setIsSaving] = useState(false); - const [isUpdating, setIsUpdating] = useState(false); - - const { - control, - handleSubmit, - setValue, - watch, - formState: { errors } - } = useForm({ - defaultValues: { - closeFactor: CLOSE_FACTOR.DEFAULT, - liquidationIncentive: LIQUIDATION_INCENTIVE.DEFAULT, - whitelist: [] - } - }); - - const watchCloseFactor = Number(watch('closeFactor', CLOSE_FACTOR.DEFAULT)); - const watchLiquidationIncentive = Number( - watch('liquidationIncentive', LIQUIDATION_INCENTIVE.DEFAULT) - ); - - const { - isOpen: isTransferOwnershipModalOpen, - onOpen: openTransferOwnershipModalOpen, - onClose: closeTransferOwnershipModalOpen - } = useDisclosure(); - - const changeWhitelistStatus = async (enforce: boolean) => { - if (!currentSdk) return; - - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - - try { - const response = await comptroller.callStatic._setWhitelistEnforcement(enforce); - if (!response.eq(0)) { - const err = new Error(' Code: ' + ComptrollerErrorCodes[response.toNumber()]); - throw err; - } - const tx = await comptroller._setWhitelistEnforcement(enforce); - await tx.wait(); - - await queryClient.refetchQueries(); - - successToast({ - description: 'Successfully changed whitelist status!', - id: 'Whitelist status - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - status: enforce - }; - const sentryInfo = { - contextName: 'Changing whitelist status', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const addToWhitelist = async (newUser: string, onChange: (v: string[]) => void) => { - if (!currentSdk) return; - - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - - const newList = data ? [...data.whitelist, newUser] : [newUser]; - - try { - const response = await comptroller.callStatic._setWhitelistStatuses( - newList, - Array(newList.length).fill(true) - ); - - if (!response.eq(0)) { - const err = new Error(' Code: ' + ComptrollerErrorCodes[response.toNumber()]); - - throw err; - } - - const tx = await comptroller._setWhitelistStatuses(newList, Array(newList.length).fill(true)); - await tx.wait(); - - await queryClient.refetchQueries(); - - onChange(newList); - - successToast({ - description: 'Successfully added!', - id: 'Added to whitelist - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - newUser - }; - const sentryInfo = { - contextName: 'Adding to whitelist', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const removeFromWhitelist = async (removeUser: string, onChange: (v: string[]) => void) => { - if (!currentSdk) return; - - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - - let whitelist = data?.whitelist; - if (!whitelist) { - console.warn('No whitelist not set'); - whitelist = []; - } - - try { - const response = await comptroller.callStatic._setWhitelistStatuses( - whitelist, - whitelist?.map((user) => user !== removeUser) - ); - - if (!response.eq(0)) { - const err = new Error(' Code: ' + ComptrollerErrorCodes[response.toNumber()]); - - throw err; - } - - const tx = await comptroller._setWhitelistStatuses( - whitelist, - whitelist?.map((user) => user !== removeUser) - ); - await tx.wait(); - - await queryClient.refetchQueries(); - - onChange(whitelist.filter((v) => v !== removeUser)); - - successToast({ - description: 'Successfully removed from the whitelist!', - id: 'Removed from whitelist - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - removeUser - }; - const sentryInfo = { - contextName: 'Removing from whitelist', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const renounceOwnership = async () => { - if (!currentSdk) return; - - const unitroller = currentSdk.getUnitrollerInstance(comptrollerAddress, currentSdk.signer); - - try { - const response = await unitroller.callStatic._toggleAdminRights(false); - if (!response.eq(0)) { - const err = new Error(' Code: ' + ComptrollerErrorCodes[response.toNumber()]); - - throw err; - } - const tx: ContractTransaction = await unitroller._toggleAdminRights(false); - await tx.wait(); - - await queryClient.refetchQueries(); - - successToast({ - description: 'Successfully changed admin rights!', - id: 'Changed admin rights - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress - }; - const sentryInfo = { - contextName: 'Changing admin rights', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - // Update values on refetch! - useEffect(() => { - if (data) { - setValue('closeFactor', parseInt(utils.formatUnits(data.closeFactor, 16))); - setValue( - 'liquidationIncentive', - parseInt(utils.formatUnits(data.liquidationIncentive, 16)) - 100 - ); - } - }, [data, setValue]); - - const updateCloseFactor = async ({ closeFactor }: { closeFactor: number }) => { - if (!currentSdk) return; - - setIsUpdating(true); - // 50% -> 0.5 * 1e18 - const bigCloseFactor: BigNumber = utils.parseUnits((closeFactor / 100).toString()); - - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - - try { - const response = await comptroller.callStatic._setCloseFactor(bigCloseFactor); - - if (!response.eq(0)) { - const err = new Error(' Code: ' + ComptrollerErrorCodes[response.toNumber()]); - - throw err; - } - - const tx = await comptroller._setCloseFactor(bigCloseFactor); - await tx.wait(); - - await queryClient.refetchQueries(); - - successToast({ - description: 'Successfully updated close factor!', - id: 'Updated close factor - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - closeFactor: bigCloseFactor, - comptroller: comptrollerAddress - }; - const sentryInfo = { - contextName: 'Updating close factor', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsUpdating(false); - } - }; - - const updateLiquidationIncentive = async ({ - liquidationIncentive - }: { - liquidationIncentive: number; - }) => { - if (!currentSdk) return; - - // 8% -> 1.08 * 1e8 - const bigLiquidationIncentive: BigNumber = utils.parseUnits( - (liquidationIncentive / 100 + 1).toString() - ); - - const comptroller = currentSdk.createComptroller(comptrollerAddress, currentSdk.signer); - - try { - const response = - await comptroller.callStatic._setLiquidationIncentive(bigLiquidationIncentive); - - if (!response.eq(0)) { - const err = new Error(' Code: ' + ComptrollerErrorCodes[response.toNumber()]); - - throw err; - } - - const tx = await comptroller._setLiquidationIncentive(bigLiquidationIncentive); - await tx.wait(); - - await queryClient.refetchQueries(); - - successToast({ - description: 'Successfully updated liquidation incentive!', - id: 'Updated liquidation incentive - ' + Math.random().toString() - }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - comptroller: comptrollerAddress, - liquidationIncentive: bigLiquidationIncentive - }; - const sentryInfo = { - contextName: 'Updating liquidation incentive', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } - }; - - const onSave = async () => { - if (!currentSdk || !inputPoolName) return; - - try { - setIsSaving(true); - const PoolDirectory = currentSdk.getPoolDirectoryInstance(currentSdk.signer); - const tx = await PoolDirectory.setPoolName(poolId, inputPoolName, { - from: address - }); - await tx.wait(); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - poolId, - poolName: inputPoolName - }; - const sentryInfo = { - contextName: 'Setting pool name', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - } finally { - setIsSaving(false); - } - }; - - const onCancel = () => { - setInputPoolName(poolName); - setIsEditable(false); - }; - - const setLiquidationIncentiveDefault = () => { - if (data) { - setValue( - 'liquidationIncentive', - parseInt(utils.formatUnits(data.liquidationIncentive, 16)) - 100 - ); - } - }; - - const setCloseFactorDefault = () => { - if (data) { - setValue('closeFactor', parseInt(utils.formatUnits(data.closeFactor, 16))); - } - }; - - return ( - - - - {`Pool ${poolId} Configuration`} - {!currentChain ? ( - - - - ) : currentChain.id !== poolChainId ? ( - - - - ) : null} - - - - {data ? ( - - - - Pool Name: - setInputPoolName(e.target.value)} - p={4} - readOnly={!isEditable} - value={inputPoolName} - variant={'outlineLightGray'} - /> - - {isEditable ? ( - - - - - ) : ( - - )} - - - - - Assets: - - {assets.length > 0 ? ( - <> - - {assets.map(({ underlyingToken, cToken }) => { - return ( - - ); - })} - - - {assets.map(({ underlyingSymbol }, index, array) => { - return underlyingSymbol + (index !== array.length - 1 ? ' / ' : ''); - })} - - - ) : ( - None - )} - - - - Whitelist: - { - changeWhitelistStatus(!data.enforceWhitelist); - }} - /> - - {data.enforceWhitelist && ( - - - - - ( - - )} - /> - - - - - )} - {/* {data.enforceWhitelist ? ( - - ) : null} */} - - - - - - Ownable: - {data.upgradeable ? ( - - - - - - ) : ( - - Admin Rights Disabled - - )} - - - - - - - - - Close Factor: - - - - ( - - )} - rules={{ - max: { - message: `Close factor must be no more than ${CLOSE_FACTOR.MAX}%`, - value: CLOSE_FACTOR.MAX - }, - min: { - message: `Close factor must be at least ${CLOSE_FACTOR.MIN}%`, - value: CLOSE_FACTOR.MIN - }, - required: 'Close factor is required' - }} - /> - - {errors.closeFactor && errors.closeFactor.message} - - - - - {data && watchCloseFactor !== parseInt(utils.formatUnits(data.closeFactor, 16)) && ( - - - - - )} - - - - - - - - - Liquidation Incentive: - - - - ( - - )} - rules={{ - max: { - message: `Liquidation incentive must be no more than ${LIQUIDATION_INCENTIVE.MAX}%`, - value: LIQUIDATION_INCENTIVE.MAX - }, - min: { - message: `Liquidation incentive must be at least ${LIQUIDATION_INCENTIVE.MIN}%`, - value: LIQUIDATION_INCENTIVE.MIN - }, - required: 'Liquidation incentive is required' - }} - /> - - {errors.liquidationIncentive && errors.liquidationIncentive.message} - - - - - {data && - watchLiquidationIncentive !== - parseInt(utils.formatUnits(data.liquidationIncentive, 16)) - 100 && ( - - - - - )} - - - - ) : ( -
- -
- )} -
- ); -}; - -export default PoolConfiguration; diff --git a/packages/ui/components/pages/EditPoolPage/index.tsx b/packages/ui/components/pages/EditPoolPage/index.tsx deleted file mode 100644 index 70a227cac7..0000000000 --- a/packages/ui/components/pages/EditPoolPage/index.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import { ArrowBackIcon } from '@chakra-ui/icons'; -import { Flex, HStack, Spinner, Text, useDisclosure } from '@chakra-ui/react'; -import Head from 'next/head'; -import { useRouter } from 'next/router'; -import { memo, useEffect, useMemo } from 'react'; - -import AssetConfiguration from '@ui/components/pages/EditPoolPage/AssetConfiguration'; -import AddAssetButton from '@ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetButton'; -import AddAssetModal from '@ui/components/pages/EditPoolPage/AssetConfiguration/AddAssetModal'; -import FlywheelEdit from '@ui/components/pages/EditPoolPage/FlywheelEdit'; -import PoolConfiguration from '@ui/components/pages/EditPoolPage/PoolConfiguration'; -import PageLayout from '@ui/components/pages/Layout/PageLayout'; -import { Banner } from '@ui/components/shared/Banner'; -import { Center, Column, RowOrColumn } from '@ui/components/shared/Flex'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import PageTransitionLayout from '@ui/components/shared/PageTransitionLayout'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useIsComptrollerAdmin } from '@ui/hooks/ionic/useIsComptrollerAdmin'; -import { useIsEditableAdmin } from '@ui/hooks/ionic/useIsEditableAdmin'; -import { useAllUsdPrices } from '@ui/hooks/useAllUsdPrices'; -import { usePoolData } from '@ui/hooks/usePoolData'; -import { useIsSemiSmallScreen } from '@ui/hooks/useScreenSize'; - -const EditPoolPage = memo(() => { - const isMobile = useIsSemiSmallScreen(); - - const { - isOpen: isAddAssetModalOpen, - onOpen: openAddAssetModal, - onClose: closeAddAssetModal - } = useDisclosure(); - - const { setGlobalLoading } = useMultiIonic(); - - const router = useRouter(); - const poolId = router.query.poolId as string; - const poolChainId = router.query.chainId as string; - const { data } = usePoolData(poolId, Number(poolChainId)); - const { data: usdPrices } = useAllUsdPrices(); - const usdPrice = useMemo(() => { - if (usdPrices && poolChainId && usdPrices[poolChainId.toString()]) { - return usdPrices[poolChainId.toString()].value; - } else { - return undefined; - } - }, [usdPrices, poolChainId]); - const { data: isAdmin, isLoading } = useIsComptrollerAdmin(data?.comptroller, data?.chainId); - const isEditableAdmin = useIsEditableAdmin(data?.comptroller, Number(poolChainId)); - - useEffect(() => { - if (!isEditableAdmin) { - closeAddAssetModal(); - } - }, [isEditableAdmin, closeAddAssetModal]); - - if (!data || !usdPrice) { - return ( -
- -
- ); - } - - return ( - <> - - {`Edit: ${data.name}`} - - - - - - - { - setGlobalLoading(true); - router.back(); - }} - /> - - Back - - - {isLoading ? ( - - ) : ( - - )} - - - - {data ? ( - - ) : ( -
- -
- )} -
- - - {data.assets.length > 0 ? ( - - ) : ( - - There are no assets in this pool. - - - - )} - -
- -
-
-
- - ); -}); - -export default EditPoolPage; diff --git a/packages/ui/components/pages/ErrorPage.tsx b/packages/ui/components/pages/ErrorPage.tsx deleted file mode 100644 index 6bade16ca8..0000000000 --- a/packages/ui/components/pages/ErrorPage.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { ExternalLinkIcon } from '@chakra-ui/icons'; -import { Box, Code, Heading, Link, Text } from '@chakra-ui/react'; -import type { FallbackProps } from 'react-error-boundary'; - -const ErrorPage: React.FC = ({ error }) => { - return ( - - - Whoops! Looks like something went wrong! - - You can either reload the page, or report this error to us on our{' '} - - GitHub - - - - - - {error.toString()} - - ); -}; - -export default ErrorPage; diff --git a/packages/ui/components/pages/Ionic/Modals/ClaimAllRewardsModal/PendingTransaction.tsx b/packages/ui/components/pages/Ionic/Modals/ClaimAllRewardsModal/PendingTransaction.tsx deleted file mode 100644 index 4b55f4997a..0000000000 --- a/packages/ui/components/pages/Ionic/Modals/ClaimAllRewardsModal/PendingTransaction.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { Box, Button, Flex, Icon, Text, VStack } from '@chakra-ui/react'; -import type { SupportedAsset } from '@ionicprotocol/types'; -import { BsFillCheckCircleFill, BsFillXCircleFill } from 'react-icons/bs'; - -import { Column } from '@ui/components/shared/Flex'; -import Loader from '@ui/components/shared/Loader'; -import TransactionStepper from '@ui/components/shared/TransactionStepper'; -import { useAddTokenToWallet } from '@ui/hooks/useAddTokenToWallet'; -import { useErrorToast, useSuccessToast } from '@ui/hooks/useToast'; -import type { TxStep } from '@ui/types/ComponentPropsType'; - -export const PendingTransaction = ({ - activeStep, - failedStep, - steps, - isClaiming, - poolChainId, - assetPerRewardToken -}: { - activeStep: number; - assetPerRewardToken: { [rewardToken: string]: SupportedAsset | undefined }; - failedStep: number; - isClaiming: boolean; - poolChainId: number; - steps: TxStep[]; -}) => { - return ( - - {isClaiming ? ( - - ) : failedStep === 0 ? ( - - - - All Done! - - - You claimed{' '} - {Object.values(assetPerRewardToken) - .map((asset) => asset?.symbol) - .join(', ')} - - - {Object.values(assetPerRewardToken).map((asset) => { - if (asset) { - return ; - } - })} - - - ) : ( - - - - Failed! - - - )} - - - - - {isClaiming ? ( - - - Check your wallet to submit the transactions - - - Do not close this pop-up until you submit all transactions! - - - ) : null} - - ); -}; - -const AddTokenToWalletButton = ({ asset }: { asset: SupportedAsset }) => { - const successToast = useSuccessToast(); - const errorToast = useErrorToast(); - - const addToken = useAddTokenToWallet({ - errorToast, - successToast, - underlyingAddress: asset.underlying, - underlyingDecimals: asset.decimals, - underlyingSymbol: asset.symbol - }); - - return ( - - - - ); -}; diff --git a/packages/ui/components/pages/Ionic/Modals/ClaimAllRewardsModal/index.tsx b/packages/ui/components/pages/Ionic/Modals/ClaimAllRewardsModal/index.tsx deleted file mode 100644 index f1bf80209f..0000000000 --- a/packages/ui/components/pages/Ionic/Modals/ClaimAllRewardsModal/index.tsx +++ /dev/null @@ -1,394 +0,0 @@ -import { Box, Button, HStack, Img, Spinner, Text, VStack } from '@chakra-ui/react'; -import type { FlywheelClaimableRewards } from '@ionicprotocol/sdk/dist/cjs/src/modules/Flywheel'; -import type { SupportedAsset } from '@ionicprotocol/types'; -import { useAddRecentTransaction, useChainModal } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import { utils } from 'ethers'; -import { useCallback, useEffect, useState } from 'react'; -import { BsFillArrowRightCircleFill, BsFillGiftFill } from 'react-icons/bs'; -import { useSwitchNetwork } from 'wagmi'; - -import { PendingTransaction } from '@ui/components/pages/Ionic/Modals/ClaimAllRewardsModal/PendingTransaction'; -import { Center } from '@ui/components/shared/Flex'; -import { IonicModal } from '@ui/components/shared/Modal'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { COMPLETE, INCOMPLETE } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useAllClaimableRewards } from '@ui/hooks/rewards/useAllClaimableRewards'; -import { useChainConfig, useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useErrorToast } from '@ui/hooks/useToast'; -import { useTokenData } from '@ui/hooks/useTokenData'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import { dynamicFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { ChainSupportedAssets } from '@ui/utils/networkData'; - -const ClaimableToken = ({ - data, - isClaiming, - onClick, - rewardChainId -}: { - data: Pick; - isClaiming: boolean; - onClick: () => void; - rewardChainId: string; -}) => { - const { amount, rewardToken } = data; - const { currentChain } = useMultiIonic(); - const { data: tokenData } = useTokenData(rewardToken, Number(rewardChainId)); - const { openChainModal } = useChainModal(); - const { switchNetworkAsync } = useSwitchNetwork(); - const chainConfig = useChainConfig(Number(rewardChainId)); - - const handleSwitch = async () => { - if (chainConfig && switchNetworkAsync) { - await switchNetworkAsync(chainConfig.chainId); - } else if (openChainModal) { - openChainModal(); - } - }; - - return ( - - {currentChain && ( - - )} - - - - {dynamicFormatter(Number(utils.formatUnits(amount, tokenData?.decimals)), { - maximumFractionDigits: 8, - minimumFractionDigits: 4 - })} - - - - - {tokenData?.extraData?.shortName ?? tokenData?.symbol} - - {currentChain?.id !== Number(rewardChainId) ? ( - - ) : ( - - )} - - - ); -}; - -export const ClaimAllRewardsModal = ({ - isOpen, - isLoading, - onClose -}: { - isLoading: boolean; - isOpen: boolean; - onClose: () => void; -}) => { - const { currentSdk, currentChain } = useMultiIonic(); - const addRecentTransaction = useAddRecentTransaction(); - const errorToast = useErrorToast(); - const chainConfig = useChainConfig(Number(currentSdk?.chainId)); - const [isClaiming, setIsClaiming] = useState(false); - const [steps, setSteps] = useState([]); - const [activeStep, setActiveStep] = useState(0); - const [failedStep, setFailedStep] = useState(0); - const [assetPerRewardToken, setAssetPerRewardToken] = useState<{ - [rewardToken: string]: SupportedAsset | undefined; - }>({}); - const [claimableRewards, setClaimableRewards] = useState< - Pick[] - >([]); - const enabledChains = useEnabledChains(); - const { data: allRewards } = useAllClaimableRewards(enabledChains); - const queryClient = useQueryClient(); - - useEffect(() => { - if (currentSdk && allRewards) { - const rewards: Pick[] = []; - - allRewards.map((reward) => { - if (reward.chainId === currentSdk.chainId) { - rewards.push({ - amount: reward.amount, - rewardToken: reward.rewardToken - }); - } - }); - - if (rewards.length > 0) { - setClaimableRewards(rewards); - } - } - }, [currentSdk, allRewards]); - - const claimRewards = useCallback( - async (rewardToken: string) => { - if (!currentSdk || !currentChain) return; - - setIsClaiming(true); - - const asset = ChainSupportedAssets[currentSdk.chainId].find((asset) => { - return asset.underlying === rewardToken; - }); - - const _steps: TxStep[] = [ - { - description: `Claim ${asset ? asset.symbol : ''} rewards from Midas`, - index: 1, - status: INCOMPLETE, - title: `Claim rewards on ${currentChain.network}` - } - ]; - - setSteps(_steps); - setFailedStep(0); - setActiveStep(1); - - try { - const tx = await currentSdk.claimRewardsForRewardToken(rewardToken); - - addRecentTransaction({ - description: `Claiming ${asset ? asset.symbol : ''} rewards`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - - setSteps([..._steps]); - - await tx.wait(); - - _steps[0] = { - ..._steps[0], - status: COMPLETE, - txHash: tx.hash - }; - setSteps([..._steps]); - - await queryClient.refetchQueries({ queryKey: ['useAllClaimableRewards'] }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - rewardToken - }; - const sentryInfo = { - contextName: `Claiming ${asset ? asset.symbol : ''} rewards`, - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - setFailedStep(1); - } - - setIsClaiming(false); - }, - [currentSdk, currentChain, addRecentTransaction, queryClient, errorToast] - ); - - const claimAllRewards = useCallback(async () => { - if (!currentSdk || !currentChain) return; - - setIsClaiming(true); - - const _assetPerRewardToken: { [rewardToken: string]: SupportedAsset | undefined } = {}; - - claimableRewards.map((reward) => { - const asset = ChainSupportedAssets[currentSdk.chainId].find((asset) => { - return asset.underlying === reward.rewardToken; - }); - - _assetPerRewardToken[reward.rewardToken] = asset; - }); - - const _steps: TxStep[] = [ - { - description: `Claim ${Object.values(_assetPerRewardToken) - .map((asset) => asset?.symbol) - .filter((symbol) => !!symbol) - .join(', ')} rewards from Midas`, - index: 1, - status: INCOMPLETE, - title: `Claim rewards on ${currentChain.network}` - } - ]; - - setSteps(_steps); - setAssetPerRewardToken(_assetPerRewardToken); - setFailedStep(0); - setActiveStep(1); - - try { - const tx = await currentSdk.claimAllRewards(); - - addRecentTransaction({ - description: `Claim all rewards`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - - setSteps([..._steps]); - - await tx.wait(); - - _steps[0] = { - ..._steps[0], - status: COMPLETE, - txHash: tx.hash - }; - setSteps([..._steps]); - - await queryClient.refetchQueries({ queryKey: ['useAllClaimableRewards'] }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId - }; - const sentryInfo = { - contextName: 'Claiming all rewards', - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - setFailedStep(1); - } - - setIsClaiming(false); - }, [currentSdk, currentChain, claimableRewards, addRecentTransaction, queryClient, errorToast]); - - return ( - - {!allRewards || allRewards.length === 0 ? ( -
- - No rewards available to be claimed - -
- ) : !isClaiming ? ( - <> - {allRewards.map((reward, index) => ( - claimRewards(reward.rewardToken)} - rewardChainId={reward.chainId.toString()} - /> - ))} -
- {claimableRewards.length > 0 ? ( - - ) : null} -
- - ) : currentSdk ? ( - - ) : null} - - } - header={ - - Claim Rewards - {isLoading ? : null} - - } - isOpen={isOpen} - modalCloseButtonProps={{ hidden: isClaiming, right: 4, top: 4 }} - onClose={() => { - onClose(); - - if (!isClaiming) { - setSteps([]); - } - }} - /> - ); -}; diff --git a/packages/ui/components/pages/Ionic/Modals/ClaimMarketRewardsModal/index.tsx b/packages/ui/components/pages/Ionic/Modals/ClaimMarketRewardsModal/index.tsx deleted file mode 100644 index 4c2ac582ee..0000000000 --- a/packages/ui/components/pages/Ionic/Modals/ClaimMarketRewardsModal/index.tsx +++ /dev/null @@ -1,266 +0,0 @@ -import { Box, Button, HStack, Img, Spinner, Text, VStack } from '@chakra-ui/react'; -import type { FlywheelClaimableRewards } from '@ionicprotocol/sdk/dist/cjs/src/modules/Flywheel'; -import type { SupportedAsset } from '@ionicprotocol/types'; -import { useAddRecentTransaction } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import { utils } from 'ethers'; -import { useCallback, useState } from 'react'; -import { BsFillGiftFill } from 'react-icons/bs'; - -import { PendingTransaction } from '@ui/components/pages/Ionic/Modals/ClaimAllRewardsModal/PendingTransaction'; -import { Center } from '@ui/components/shared/Flex'; -import { IonicModal } from '@ui/components/shared/Modal'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { COMPLETE, INCOMPLETE } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useAssetClaimableRewards } from '@ui/hooks/rewards/useAssetClaimableRewards'; -import { useChainConfig } from '@ui/hooks/useChainConfig'; -import { useErrorToast } from '@ui/hooks/useToast'; -import { useTokenData } from '@ui/hooks/useTokenData'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import { dynamicFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { ChainSupportedAssets } from '@ui/utils/networkData'; - -const ClaimableToken = ({ - data, - rewardChainId -}: { - data: FlywheelClaimableRewards; - rewardChainId: string; -}) => { - const { amount, rewardToken } = data; - const { currentChain } = useMultiIonic(); - const { data: tokenData } = useTokenData(rewardToken, Number(rewardChainId)); - - return ( - - {currentChain && ( - - )} - - - - {dynamicFormatter(Number(utils.formatUnits(amount, tokenData?.decimals)), { - maximumFractionDigits: 8, - minimumFractionDigits: 4 - })} - - - - - {tokenData?.extraData?.shortName ?? tokenData?.symbol} - - ); -}; - -export const ClaimMarketRewardsModal = ({ - isOpen, - isLoading, - marketAddress, - onClose, - poolAddress -}: { - isLoading: boolean; - isOpen: boolean; - marketAddress: string; - onClose: () => void; - poolAddress: string; -}) => { - const { currentSdk, currentChain } = useMultiIonic(); - const addRecentTransaction = useAddRecentTransaction(); - const errorToast = useErrorToast(); - const chainConfig = useChainConfig(Number(currentSdk?.chainId)); - const [isClaiming, setIsClaiming] = useState(false); - const [steps, setSteps] = useState([]); - const [activeStep, setActiveStep] = useState(0); - const [failedStep, setFailedStep] = useState(0); - const [assetPerRewardToken, setAssetPerRewardToken] = useState<{ - [rewardToken: string]: SupportedAsset | undefined; - }>({}); - const { data: marketRewards } = useAssetClaimableRewards( - marketAddress, - poolAddress, - currentChain?.id - ); - const queryClient = useQueryClient(); - - const claimMarketRewards = useCallback(async () => { - if (!currentSdk || !currentChain || !marketRewards || marketRewards.length === 0) return; - - setIsClaiming(true); - - const _assetPerRewardToken: { [rewardToken: string]: SupportedAsset | undefined } = {}; - const flywheels: string[] = []; - - marketRewards.map((reward) => { - flywheels.push(reward.flywheel); - - const asset = ChainSupportedAssets[currentSdk.chainId].find((asset) => { - return asset.underlying === reward.rewardToken; - }); - - _assetPerRewardToken[reward.rewardToken] = asset; - }); - - const _steps: TxStep[] = [ - { - description: `Claim ${Object.values(_assetPerRewardToken) - .map((asset) => asset?.symbol) - .filter((symbol) => !!symbol) - .join(', ')} rewards from Midas`, - index: 1, - status: INCOMPLETE, - title: `Claim rewards on ${currentChain.network}` - } - ]; - - setSteps(_steps); - setAssetPerRewardToken(_assetPerRewardToken); - setFailedStep(0); - setActiveStep(1); - - try { - const tx = await currentSdk.claimRewardsForMarket(marketAddress, flywheels); - - addRecentTransaction({ - description: `Claim rewards on market`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - - setSteps([..._steps]); - - await tx.wait(); - - _steps[0] = { - ..._steps[0], - status: COMPLETE, - txHash: tx.hash - }; - setSteps([..._steps]); - - await queryClient.refetchQueries({ queryKey: ['useAssetClaimableRewards'] }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - flywheels, - marketAddress - }; - const sentryInfo = { - contextName: `Claiming rewards on market ${marketAddress}`, - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - setFailedStep(1); - } - - setIsClaiming(false); - }, [ - currentSdk, - currentChain, - marketRewards, - marketAddress, - addRecentTransaction, - queryClient, - errorToast - ]); - - return ( - - {!marketRewards || marketRewards.length === 0 ? ( -
- - No rewards available to be claimed in this market - -
- ) : !isClaiming ? ( - <> - {marketRewards.map((reward, index) => { - return currentChain ? ( - - ) : null; - })} -
- -
- - ) : currentSdk ? ( - - ) : null} - - } - header={ - - Claim Rewards - {isLoading ? : null} - - } - isOpen={isOpen} - modalCloseButtonProps={{ hidden: isClaiming, right: 4, top: 4 }} - onClose={() => { - onClose(); - - if (!isClaiming) { - setSteps([]); - } - }} - /> - ); -}; diff --git a/packages/ui/components/pages/Ionic/Modals/ClaimPoolRewardsModal/index.tsx b/packages/ui/components/pages/Ionic/Modals/ClaimPoolRewardsModal/index.tsx deleted file mode 100644 index 9c9cb6b1a5..0000000000 --- a/packages/ui/components/pages/Ionic/Modals/ClaimPoolRewardsModal/index.tsx +++ /dev/null @@ -1,295 +0,0 @@ -import { Box, Button, HStack, Img, Spinner, Text, VStack } from '@chakra-ui/react'; -import type { FlywheelClaimableRewards } from '@ionicprotocol/sdk/dist/cjs/src/modules/Flywheel'; -import type { SupportedAsset } from '@ionicprotocol/types'; -import { useAddRecentTransaction, useChainModal } from '@rainbow-me/rainbowkit'; -import { useQueryClient } from '@tanstack/react-query'; -import { utils } from 'ethers'; -import { useCallback, useState } from 'react'; -import { BsFillArrowRightCircleFill, BsFillGiftFill } from 'react-icons/bs'; -import { useSwitchNetwork } from 'wagmi'; - -import { PendingTransaction } from '@ui/components/pages/Ionic/Modals/ClaimAllRewardsModal/PendingTransaction'; -import { Center } from '@ui/components/shared/Flex'; -import { IonicModal } from '@ui/components/shared/Modal'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { COMPLETE, INCOMPLETE } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { usePoolClaimableRewards } from '@ui/hooks/rewards/usePoolClaimableRewards'; -import { useChainConfig } from '@ui/hooks/useChainConfig'; -import { useErrorToast } from '@ui/hooks/useToast'; -import { useTokenData } from '@ui/hooks/useTokenData'; -import type { TxStep } from '@ui/types/ComponentPropsType'; -import { dynamicFormatter } from '@ui/utils/bigUtils'; -import { handleGenericError } from '@ui/utils/errorHandling'; -import { ChainSupportedAssets } from '@ui/utils/networkData'; - -const ClaimableToken = ({ - data, - rewardChainId -}: { - data: FlywheelClaimableRewards; - rewardChainId: string; -}) => { - const { amount, rewardToken } = data; - const { currentChain } = useMultiIonic(); - const { data: tokenData } = useTokenData(rewardToken, Number(rewardChainId)); - - return ( - - {currentChain && ( - - )} - - - - {dynamicFormatter(Number(utils.formatUnits(amount, tokenData?.decimals)), { - maximumFractionDigits: 8, - minimumFractionDigits: 4 - })} - - - - - {tokenData?.extraData?.shortName ?? tokenData?.symbol} - - ); -}; - -export const ClaimPoolRewardsModal = ({ - isOpen, - isLoading, - onClose, - poolAddress, - poolChainId -}: { - isLoading: boolean; - isOpen: boolean; - onClose: () => void; - poolAddress: string; - poolChainId: number; -}) => { - const { currentSdk, currentChain } = useMultiIonic(); - const addRecentTransaction = useAddRecentTransaction(); - const errorToast = useErrorToast(); - const chainConfig = useChainConfig(Number(poolChainId)); - const [isClaiming, setIsClaiming] = useState(false); - const [steps, setSteps] = useState([]); - const [activeStep, setActiveStep] = useState(0); - const [failedStep, setFailedStep] = useState(0); - const [assetPerRewardToken, setAssetPerRewardToken] = useState<{ - [rewardToken: string]: SupportedAsset | undefined; - }>({}); - const { data: poolRewards } = usePoolClaimableRewards(poolAddress, poolChainId); - const { switchNetworkAsync } = useSwitchNetwork(); - const { openChainModal } = useChainModal(); - - const handleSwitch = async () => { - if (chainConfig && switchNetworkAsync) { - await switchNetworkAsync(chainConfig.chainId); - } else if (openChainModal) { - openChainModal(); - } - }; - - const queryClient = useQueryClient(); - - const claimPoolRewards = useCallback(async () => { - if (!currentSdk || !currentChain || !poolRewards || poolRewards.length === 0) return; - - setIsClaiming(true); - - const _assetPerRewardToken: { [rewardToken: string]: SupportedAsset | undefined } = {}; - - poolRewards.map((reward) => { - const asset = ChainSupportedAssets[currentSdk.chainId].find((asset) => { - return asset.underlying === reward.rewardToken; - }); - - _assetPerRewardToken[reward.rewardToken] = asset; - }); - - const _steps: TxStep[] = [ - { - description: `Claim ${Object.values(_assetPerRewardToken) - .map((asset) => asset?.symbol) - .filter((symbol) => !!symbol) - .join(', ')} rewards from Midas`, - index: 1, - status: INCOMPLETE, - title: `Claim rewards on ${currentChain.network}` - } - ]; - - setSteps(_steps); - setAssetPerRewardToken(_assetPerRewardToken); - setFailedStep(0); - setActiveStep(1); - - try { - const tx = await currentSdk.claimRewardsForPool(poolAddress); - - addRecentTransaction({ - description: `Claim rewards on pool`, - hash: tx.hash - }); - - _steps[0] = { - ..._steps[0], - txHash: tx.hash - }; - - setSteps([..._steps]); - - await tx.wait(); - - _steps[0] = { - ..._steps[0], - status: COMPLETE, - txHash: tx.hash - }; - setSteps([..._steps]); - - await queryClient.refetchQueries({ queryKey: ['usePoolClaimableRewards'] }); - } catch (error) { - const sentryProperties = { - chainId: currentSdk.chainId, - poolAddress - }; - const sentryInfo = { - contextName: `Claiming rewards on pool ${poolAddress}`, - properties: sentryProperties - }; - handleGenericError({ error, sentryInfo, toast: errorToast }); - setFailedStep(1); - } - - setIsClaiming(false); - }, [ - currentSdk, - currentChain, - poolRewards, - poolAddress, - addRecentTransaction, - queryClient, - errorToast - ]); - - return ( - - {!poolRewards || poolRewards.length === 0 ? ( -
- - No rewards available to be claimed in this pool - -
- ) : !isClaiming ? ( - <> - {poolRewards.map((reward, index) => { - return currentChain ? ( - - ) : null; - })} -
- {currentChain?.id !== Number(poolChainId) ? ( - - ) : ( - - )} -
- - ) : currentSdk ? ( - - ) : null} - - } - header={ - - Claim Rewards - {isLoading ? : null} - - } - isOpen={isOpen} - modalCloseButtonProps={{ hidden: isClaiming, right: 4, top: 4 }} - onClose={() => { - onClose(); - - if (!isClaiming) { - setSteps([]); - } - }} - /> - ); -}; diff --git a/packages/ui/components/pages/Ionic/Modals/Terms.tsx b/packages/ui/components/pages/Ionic/Modals/Terms.tsx deleted file mode 100644 index 90a81477be..0000000000 --- a/packages/ui/components/pages/Ionic/Modals/Terms.tsx +++ /dev/null @@ -1,514 +0,0 @@ -import { Button, Flex, ListItem, Spacer, Text, UnorderedList, VStack } from '@chakra-ui/react'; -import { useEffect, useState } from 'react'; - -import { IonicModal } from '@ui/components/shared/Modal'; -import { IONIC_T_AND_C_ACCEPTED } from '@ui/constants/index'; - -const Terms = ({ isAcceptedTerms }: { isAcceptedTerms: boolean }) => { - const [hasAcceptedTerms, setHasAcceptedTerms] = useState(isAcceptedTerms); - - const accept = () => { - setHasAcceptedTerms(true); - }; - - useEffect(() => { - localStorage.setItem(IONIC_T_AND_C_ACCEPTED, 'true'); - }, [hasAcceptedTerms]); - - return ( - - - 1. Acceptance of Terms - - - The Ionic Protocol system and software (the “Ionic Protocol”) is an autonomous system of - smart contracts on various blockchains that permits, among other things, transactions - using smart contracts, and lending and borrowing of cryptocurrencies. The Ionic - Protocol, https://midascapital.xyz (the “Interface” or “App”) — which includes text, - images, audio, code and other materials (collectively, the "Content") and all - of the features provided. Note, however, the Ionic Protocol is an experimental prototype - and its use involves a high degree of risk. There are numerous ways the Ionic Protocol - could fail in an unexpected way, resulting in the total and absolute loss of funds in - the protocol. Please read these Terms of Use (the “Terms” or “Terms of Use”) carefully - before using the Service. By using or otherwise accessing the Service, or clicking to - accept or agree to these Terms where that option is made available, you (1) accept and - agree to these Terms and (2) any additional terms, rules and conditions of participation - issued from time to time. If you do not agree to the Terms, then you may not access or - use the Content or Site. - - - 2. Modification of Terms of Use - - - These Terms may be discretionarily modified or replaced at any time, unless stated - otherwise herein. The most current version of these Terms will be posted on the - Interface with the "Last Revised" date at the top of the Terms changed. Any - modifications will be effective immediately upon posting the revisions to the Interface. - You shall be responsible for reviewing and becoming familiar with any such - modifications. You waive any right you may have to receive specific notice of such - changes or modifications. Use of the Interface by you after any modification to the - Terms constitutes your acceptance of the Terms as modified. If you do not agree to the - Terms in effect when you access or use the Interface, you must stop using the Interface. - - - 3. Eligibility - - - You hereby represent and warrant that you are fully able and competent to enter into the - terms, conditions, obligations, affirmations, representations and warranties set forth - in these Terms and to abide by and comply with these Terms. The Ionic Protocol is global - and by accessing the Interface, you are representing and warranting that, you are of the - legal age of majority in your jurisdiction as is required to access the Interface and - enter into arrangements.. You further represent that you are otherwise legally permitted - to use the service in your jurisdiction including owning cryptographic tokens of value, - and interacting with the Interface and Ionic Protocol. You further represent you are - responsible for ensuring compliance with the laws of your jurisdiction and acknowledge - that Midas Labs Ltd. & Midas Labs FZE LLC is not. liable for your compliance with such - laws. Finally, you represent and warrant that you will not use the Service for any - illegal activity. - - - 4. Representations, Warranties, and Risks - - 4.1. No Representation or Warranty. - - You expressly understand and agree that your use of the Service is at your sole risk. - (A) MIDAS LABS LTD. & MIDAS LABS FZE LLC EXPRESSLY DISCLAIMS ALL REPRESENTATIONS AND - WARRANTIES, EXPRESS, IMPLIED OR STATUTORY; AND (B) WITH RESPECT TO THE MIDAS LABS LTD. & - MIDAS LABS FZE LLC, MIDAS LABS LTD. & MIDAS LABS FZE LLC SPECIFICALLY DOES NOT REPRESENT - AND WARRANT AND EXPRESSLY DISCLAIMS ANY REPRESENTATION OR WARRANTY, EXPRESS, IMPLIED OR - STATUTORY, INCLUDING WITHOUT LIMITATION, ANY REPRESENTATIONS OR WARRANTIES OF TITLE, - NON-INFRINGEMENT, MERCHANTABILITY, USAGE, SECURITY, SUITABILITY OR FITNESS FOR ANY - PARTICULAR PURPOSE, OR AS TO THE WORKMANSHIP OR TECHNICAL CODING THEREOF, OR THE ABSENCE - OF ANY DEFECTS THEREIN, WHETHER LATENT OR PATENT. MIDAS LABS LTD. & MIDAS LABS FZE LLC - DO NOT REPRESENT OR WARRANT THAT THE SERVICE AND ANY RELATED INFORMATION ARE ACCURATE, - COMPLETE, RELIABLE, CURRENT OR ERROR-FREE. - - 4.2 Disclaimer of Fiduciary Duties - - TO THE FULLEST EXTENT PERMITTED BY LAW AND NOTWITHSTANDING ANY OTHER PROVISION OF THIS - AGREEMENT OR ANY OTHER AGREEMENT CONTEMPLATED HEREIN OR APPLICABLE PROVISIONS OF LAW OR - EQUITY OR OTHERWISE, THE PARTIES HERETO HEREBY AGREE TO ELIMINATE ANY AND ALL FIDUCIARY - DUTIES MIDAS LABS LTD. & MIDAS LABS FZE LLC OR ANY RELATED ENTITIES AND AGENTS MAY HAVE - TO THE USER, ITS AFFILIATES, OR THE END USERS OF MIDAS LABS LTD. & MIDAS LABS FZE LLC, - THE INTERFACE OR THE CONTENT, PROVIDED THAT SUCH EXCLUSION OR LIMITATION OF LIABILITY - SHALL NOT EXTEND TO MISAPPROPRIATION OF ASSETS OR FUNDS OF THE USERS, ITS AFFILIATES, OR - THE USERS OF MIDAS LABS LTD. & MIDAS LABS FZE LLC OR INTERFACE OR CONTENT PROVIDED BY - MIDAS LABS LTD. & MIDAS LABS FZE LLC OR ANY RELATED ENTITIES AND AGENTS OR OTHER ACTS OR - OMISSIONS THAT CONSTITUTE A BAD FAITH VIOLATION OF THE IMPLIED CONTRACTUAL COVENANT OF - GOOD FAITH AND FAIR DEALING. - - - 4.3 Sophistication and Risk of Cryptographic Systems - - - By utilizing the Ionic Protocol or Interface or interacting with the Content in any way, - you represent that you understand the inherent risks associated with cryptographic - systems; and warrant that you have an understanding of the usage and intricacies of - native cryptographic tokens, like Ether (ETH) and smart contract based tokens such as - those that follow the Ethereum Token Standard - (https://github.com/ethereum/EIPs/issues/20), and blockchain-based software systems. - Midas Labs Ltd. & Midas Labs FZE LLC does not own or control any of the underlying - software through which blockchain networks are formed. In general, the underlying - software for blockchain networks tends to be open source such that anyone can use, copy, - modify, and distribute it. By using the Ionic Protocol and the Interface, you - acknowledge and agree (i) Midas Labs Ltd. & Midas Labs FZE LLC is not responsible for - operation of the underlying software and networks that there exists no guarantee of - functionality, security, or availability of such software and networks; and (ii) that - the underlying protocols are subject to sudden changes in operating rules (known as - "Forks"), and that such Forks may materially affect the Ionic Protocol - Protocol. It might be discretionarily decided not to support (or cease supporting) the - Forked network entirely. You acknowledge and agree that the Midas Labs Ltd. & Midas Labs - FZE LLC assumes absolutely no responsibility whatsoever in respect of any underlying - software protocols, whether Forked or not. - - - 4.4 Risk of Regulatory Actions in One or More Jurisdictions - - - - The Ionic Protocol, the Interface, and cryptocurrencies in protocol could be impacted by - one or more regulatory inquiries or regulatory action, which could impede or limit the - ability of Midas Labs Ltd. & Midas Labs FZE LLC to continue to develop, or which could - impede or limit your ability to access or use the Service or Ethereum blockchain, - including access to your funds. - - - 4.5 Risk of Weaknesses or Exploits in the Field of Cryptography - - - - You acknowledge and understand that Cryptography is a progressing field. Advances in - code cracking or technical advances such as the development of quantum computers may - present risks to cryptocurrencies and Ionic Protocol, Interface or accessing Content, - which could result in the theft or loss of your cryptographic tokens or property. To the - extent possible, it is intended to update the protocol underlying the Service to account - for any advances in cryptography and to incorporate additional security measures, but - does not guarantee or otherwise represent full security of the system. By using the - Ionic Protocol, Interface or accessing Content, you acknowledge these inherent risks. - - 4.6 Volatility of Cryptocurrency - - - You understand that Ethereum and other blockchain technologies and associated currencies - or tokens are highly volatile due to many factors including but not limited to adoption, - speculation, technology and security risks. You also acknowledge that the cost of - transacting on such technologies is variable and may increase at any time causing impact - to any activities taking place on the Ethereum blockchain. You acknowledge these risks - and represent that Midas Labs Ltd. & Midas Labs FZE LLC or any related entity or person - cannot be held liable for such fluctuations or increased costs. - - - 4.7 Application Security - - - You acknowledge that the Ionic Protocol and Interface are subject to flaws and - acknowledge that you are solely responsible for evaluating any code provided via the - Ionic Protocol, Interface or Content, including those approved and integrated via the - TRIBE DAO. This warning and others later provided by Midas Labs Ltd. & Midas Labs FZE - LLC in no way evidence or represent an on-going duty to alert you to all of the - potential risks of utilizing the Ionic Protocol, Interface or accessing Content. - - - 4.8 Website Accuracy - - - Although it is intended to provide accurate and timely information on the Interface and - other tools making up the Ionic Protocol, the Interface (including, without limitation, - the Content) or relevant tools may not always be entirely accurate, complete or current - and may also include technical inaccuracies or typographical errors. In an effort to - continue to provide you with as complete and accurate information as possible, - information may be changed or updated from time to time without notice, including - without limitation information regarding our policies. Accordingly, you should verify - all information before relying on it, and all decisions based on information contained - on the Interface or relevant tools are your sole responsibility and Midas Labs Ltd. & - Midas Labs FZE LLC shall have no liability for such decisions. Links to third-party - materials (including without limitation websites) may be provided as a convenience but - are not controlled by any entity. You acknowledge and agree that we are not responsible - for any aspect of the information, content, or services contained in any third-party - materials or on any third party sites accessible or linked to the Interface or available - via other relevant tools. - - - 4.9 Technical Knowledge - - - Any use or interaction with the Ionic Protocol and Interface requires a comprehensive - understanding of applied cryptography and computer science in order to appreciate - inherent risks, including those listed above. You represent and warrant that you possess - relevant knowledge and skills. - - - 5. Indemnity - - - You agree to release and to indemnify, defend and hold harmless Midas Labs Ltd. & Midas - Labs FZE LLC and any related entities, as well as the officers, directors, employees, - shareholders and representatives of any of the foregoing entities, from and against any - and all losses, liabilities, expenses, damages, costs (including attorneys' fees, - fees or penalties imposed by any regulatory authority and court costs) claims or actions - of any kind whatsoever arising or resulting from your use of the Service, your violation - of these Terms of Use, your violation of any law, rule, or regulation, or the rights of - any third party, and any of your acts or omissions that implicate publicity rights, - defamation or invasion of privacy. Each of the Midas Labs Ltd. & Midas Labs FZE LLC - reserve the right, at its own expense, to assume exclusive defense and control of any - matter otherwise subject to indemnification by you and, in such case, you agree to - cooperate with Midas Labs Ltd. & Midas Labs FZE LLC in the defense of such matter. - - - 6. Limitation on liability - - - YOU ACKNOWLEDGE AND AGREE THAT YOU ASSUME FULL RESPONSIBILITY FOR YOUR USE OF THE SITE - AND SERVICE. YOU ACKNOWLEDGE AND AGREE THAT ANY INFORMATION YOU SEND OR RECEIVE DURING - YOUR USE OF THE SITE AND SERVICE MAY NOT BE SECURE AND MAY BE INTERCEPTED OR LATER - ACQUIRED BY UNAUTHORIZED PARTIES. YOU ACKNOWLEDGE AND AGREE THAT YOUR USE OF THE SITE - AND SERVICE IS AT YOUR OWN RISK. RECOGNIZING SUCH, YOU UNDERSTAND AND AGREE THAT, TO THE - FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER MIDAS LABS LTD. & MIDAS LABS FZE LLC - NOR ANY RELATED ENTITIES, SUPPLIERS OR LICENSORS WILL BE LIABLE TO YOU FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY OR OTHER DAMAGES OF - ANY KIND, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA - OR OTHER TANGIBLE OR INTANGIBLE LOSSES OR ANY OTHER DAMAGES BASED ON CONTRACT, TORT, - STRICT LIABILITY OR ANY OTHER THEORY (EVEN IF MIDAS LABS LTD. & MIDAS LABS FZE LLC OR - RELATED ENTITIES HAD BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), RESULTING FROM - THE SITE OR SERVICE; THE USE OR THE INABILITY TO USE THE SITE OR SERVICE; UNAUTHORIZED - ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; STATEMENTS OR CONDUCT OF ANY - THIRD PARTY ON THE SITE OR SERVICE; ANY ACTIONS WE TAKE OR FAIL TO TAKE AS A RESULT OF - COMMUNICATIONS YOU SEND TO US; HUMAN ERRORS; TECHNICAL MALFUNCTIONS; FAILURES, INCLUDING - PUBLIC UTILITY OR TELEPHONE OUTAGES; OMISSIONS, INTERRUPTIONS, LATENCY, DELETIONS OR - DEFECTS OF ANY DEVICE OR NETWORK, PROVIDERS, OR SOFTWARE (INCLUDING, BUT NOT LIMITED TO, - THOSE THAT DO NOT PERMIT PARTICIPATION IN THE SERVICE); ANY INJURY OR DAMAGE TO COMPUTER - EQUIPMENT; INABILITY TO FULLY ACCESS THE SITE OR SERVICE OR ANY OTHER WEBSITE; THEFT, - TAMPERING, DESTRUCTION, OR UNAUTHORIZED ACCESS TO, IMAGES OR OTHER CONTENT OF ANY KIND; - DATA THAT IS PROCESSED LATE OR INCORRECTLY OR IS INCOMPLETE OR LOST; TYPOGRAPHICAL, - PRINTING OR OTHER ERRORS, OR ANY COMBINATION THEREOF; OR ANY OTHER MATTER RELATING TO - THE SITE OR SERVICE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES - OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. - ACCORDINGLY, SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU. - - - 7. Proprietary Rights - - - All title, ownership and intellectual property rights in and to the Interface and Midas - Capital Protocol are owned by Midas Labs Ltd. & Midas Labs FZE LLC, related entities or - their licensors. You acknowledge and agree that the Ionic Protocol, Interface and - Content contain proprietary and confidential information that is protected by applicable - intellectual property and other laws. Except as expressly authorized by a relevant - entity, you agree not to copy, modify, rent, lease, loan, sell, distribute, perform, - display or create derivative works based on the Ionic Protocol, Interface and Content, - in whole or in part. - - - 8. Links - - - The Service provides, or third parties may provide, links to other World Wide Web or - accessible sites, applications or resources. Because none of the Midas Labs Ltd. & Midas - Labs FZE LLC have control over such sites, applications and resources, you acknowledge - and agree that Midas Labs Ltd. & Midas Labs FZE LLC or any related entity is not - responsible for the availability of such external sites, applications or resources, and - does not endorse and is not responsible or liable for any content, advertising, products - or other materials on or available from such sites or resources. You further acknowledge - and agree that Midas Labs Ltd. & Midas Labs FZE LLC or any related entity shall not be - responsible or liable, directly or indirectly, for any damage or loss caused or alleged - to be caused by or in connection with use of or reliance on any such content, goods or - services available on or through any such site or resource. - - - 9. Termination and Suspension - - - Midas Labs Ltd. & Midas Labs FZE LLC may terminate or suspend access to the Interface - immediately, without prior notice or liability, if you breach any of the terms or - conditions of the Terms. Upon termination of your access, your right to use the - Interface will immediately cease. The following provisions of the Terms survive any - termination of these Terms: INDEMNITY; WARRANTY DISCLAIMERS; LIMITATION ON LIABILITY; - OUR PROPRIETARY RIGHTS; LINKS; TERMINATION; NO THIRD-PARTY BENEFICIARIES; BINDING - ARBITRATION AND CLASS ACTION WAIVER; GENERAL INFORMATION. - - - 10. No Third-Party Beneficiaries - - - You agree that, except as otherwise expressly provided in these Terms, there shall be no - third party beneficiaries to the Terms. - - - 11. Notice and Procedure For Making Claims of Copyright Infringement - - - If you believe that your copyright or the copyright of a person on whose behalf you are - authorized to act has been infringed, please provide a written Notice - (contact@midaslabsltd.xyz) containing the following information: - - - - {' '} - an electronic or physical signature of the person authorized to act on behalf of the - owner of the copyright or other intellectual property interest; - - - {' '} - a description of the copyrighted work or other intellectual property that you claim - has been infringed; - - - {' '} - a description of where the material that you claim is infringing is located on the - Service; - - your address, telephone number, and email address; - - {' '} - a statement by you that you have a good faith belief that the disputed use is not - authorized by the copyright owner, its agent, or the law; - - - {' '} - a statement by you, made under penalty of perjury, that the above information in your - Notice is accurate and that you are the copyright or intellectual property owner or - authorized to act on the copyright or intellectual property owner's behalf. - - - - 12. Arbitration and Class Action Waiver - - 12.1. Initial Dispute Resolution - - - The parties agree shall use their best efforts to engage directly to settle any dispute, - claim, question, or disagreement and engage in good faith negotiations which shall be a - condition to either party initiating an arbitration. - - - 12.2. Binding Arbitration - - - If we cannot resolve the dispute through good-faith negotiations, you and we agree that - any dispute arising under this Agreement shall be finally settled in binding - arbitration, on an individual basis, in accordance with the American Arbitration - Association's rules for arbitration of consumer-related disputes (accessible at - https://www.adr.org/sites/default/files/Consumer%20Rules.pdf) and you and Midas Labs - Ltd. & Midas Labs FZE LLC hereby expressly waive trial by jury and right to participate - in a class action lawsuit or class-wide arbitration. The arbitration will be conducted - by a single, neutral arbitrator and shall take place in the county or parish in which - you reside, or another mutually agreeable location, in the English language. The - arbitrator may award any relief that a court of competent jurisdiction could award, - including attorneys' fees when authorized by law, and the arbitral decision may be - enforced in any court. At your request, hearings may be conducted in person or by - telephone and the arbitrator may provide for submitting and determining motions on - briefs, without oral hearings. The prevailing party in any action or proceeding to - enforce this agreement shall be entitled to costs and attorneys' fees. If the - arbitrator(s) or arbitration administrator would impose filing fees or other - administrative costs on you, we will reimburse you, upon request, to the extent such - fees or costs would exceed those that you would otherwise have to pay if you were - proceeding instead in a court. We will also pay additional fees or costs if required to - do so by the arbitration administrator's rules or applicable law. Apart from the - foregoing, each Party will be responsible for any other fees or costs, such as attorney - fees that the Party may incur. If a court decides that any provision of this section - 12.2 is invalid or unenforceable, that provision shall be severed and the other parts of - this section 12.2 shall still apply. In any case, the remainder of this Agreement, will - continue to apply. - - - 12.3. Governing law - - - For any dispute not subject to arbitration, you and Midas Labs Ltd. & Midas Labs FZE LLC - agree to submit to the personal and exclusive jurisdiction and venue in the federal and - state courts located in Wilmington, Delaware. You further agree to accept service of - process by mail, and hereby waive any and all jurisdictional and venue defenses - otherwise available. The terms and the relationship between you and Midas Labs Ltd. & - Midas Labs FZE LLC shall be governed by the laws of BVI without regard to conflict of - law provisions. - - - 13. General Provisions - - 13.1. Entire Agreement - - These Terms (and any additional terms, rules and conditions of participation that may be - posted on the Service) constitute the entire agreement with respect to the Service and - supersedes any prior agreements, oral or written. In the event of a conflict between - these Terms and the additional terms, rules and conditions of participation, the latter - will prevail over the Terms to the extent of the conflict. - - - 13.2. Waiver and Severability of Terms - - - The failure of any entity to exercise or enforce any right or provision of the Terms - shall not constitute a waiver of such right or provision. If any provision of the Terms - is found by an arbitrator or court of competent jurisdiction to be invalid, the parties - nevertheless agree that the arbitrator or court should endeavor to give effect to the - parties' intentions as reflected in the provision, and the other provisions of the - Terms remain in full force and effect. - - - 13.3. Statute of Limitations - - You agree that regardless of any statute or law to the contrary, any claim or cause of - action arising out of or related to the use of the Service or the Terms must be filed - within one (1) year after such claim or cause of action arose or be forever barred. - - 13.4. Section Titles - - The section titles in the Terms are for convenience only and have no legal or - contractual effect. - - 13.5. Communications - - Users with questions, complaints or claims with respect to the Service may contact us - using the relevant contact information set forth above and at contact@midaslabsltd.xyz. - - - 14. Prohibited Use - - - You may not use the Service to engage in the following categories of activity - ("Prohibited Uses"). The specific types of use listed below are - representative, but not exhaustive. If you are uncertain as to whether or not your use - of the Services involves a Prohibited Use, or have questions about how these - requirements apply to you, please contact us at contact@midaslabsltd.xyz By opening - using the Service provided here, you confirm that you will not use this Service to do - any of the following: - - - Unlawful Activity: Activity which would violate, or assist in violation of, any law, - statute, ordinance, or regulation, sanctions programs administered in any relevant - country, including but not limited to the U.S. Department of Treasury's Office - of Foreign Assets Control ("OFAC"), or which would involve proceeds of any - unlawful activity; publish, distribute or disseminate any unlawful material or - information - - - Abuse Other Users: Interfere with another individual's or entity's access - to or use of any Services; defame, abuse, extort, harass, stalk, threaten or - otherwise violate or infringe the legal rights (such as, but not limited to, rights - of privacy, publicity and intellectual property) of others; incite, threaten, - facilitate, promote, or encourage hate, racial intolerance, or violent acts against - others; harvest or otherwise collect information from the Interface about others, - including without limitation email addresses, without proper consent - - - - Fraud: Activity which operates to defraud Midas Labs Ltd. & Midas Labs FZE LLC, - Ionic Protocol and Interface users, or any other person; provide any false, - inaccurate, or misleading information. - - - - Intellectual Property Infringement: Engage in transactions involving items that - infringe or violate any copyright, trademark, right of publicity or privacy or any - other proprietary right under the law, including but not limited to sales, - distribution, or access to counterfeit music, movies, software, or other licensed - materials without the appropriate authorization from the rights holder; use of Midas - Labs Ltd. & Midas Labs FZE LLC intellectual property, name, or logo, including use - of Midas Labs Ltd. & Midas Labs FZE LLC trade or service marks, without express - consent from Midas Labs Ltd. & Midas Labs FZE LLC or in a manner that otherwise - harms Midas Labs Ltd. & Midas Labs FZE LLC; any action that implies an untrue - endorsement by or affiliation with Midas Labs Ltd. & Midas Labs FZE LLC. - - - - - } - footer={ - <> - - - - } - header={ - - Terms & Conditions - - - Last Revised: - 7/16/2022 - - - } - isOpen={!hasAcceptedTerms} - modalBodyProps={{ maxHeight: '60vh', overflowY: 'scroll' }} - modalHeaderProps={{ alignSelf: 'center', width: '100%' }} - modalProps={{ size: '6xl' }} - onClose={accept} - /> - ); -}; - -export default Terms; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/MidasHero/index.tsx b/packages/ui/components/pages/Ionic/PoolsPage/MidasHero/index.tsx deleted file mode 100644 index 0c8de26281..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/MidasHero/index.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import type { FlexProps } from '@chakra-ui/react'; -import { Avatar, Box, Flex, HStack, Link, Spinner, Text, VStack } from '@chakra-ui/react'; -import { motion } from 'framer-motion'; -import { FaDiscord, FaTelegram, FaTwitter } from 'react-icons/fa'; -import { SiGitbook } from 'react-icons/si'; - -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { - MIDAS_DISCORD_URL, - MIDAS_DOCS_URL, - MIDAS_TELEGRAM_URL, - MIDAS_TWITTER_URL -} from '@ui/constants/index'; -import { useTotalSupplyAndBorrow } from '@ui/hooks/ionic/useTotalSupplyAndBorrow'; -import { useColors } from '@ui/hooks/useColors'; -import { smallUsdFormatter } from '@ui/utils/bigUtils'; - -const MotionFlex = motion(Flex); - -const MidasHero = () => { - const { data, isLoading } = useTotalSupplyAndBorrow(); - const { cPage } = useColors(); - - return ( - - - - Unleash the Power of Your Assets - - - Let your holdings shine with the Midas Touch. From an individual DeFi user to a DAO or - Treasury, users can take advantage of Midas to earn yield, borrow against, or lend their - favorite tokens. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {[...data.chainTVLs.values()].map((chainTVL, index) => ( - - - - - {smallUsdFormatter(chainTVL.totalSupply)} - - {chainTVL.name} - - - ))} - - ) : null - } - popoverProps={{ placement: 'bottom' }} - width={{ base: '100%', lg: '40%' }} - > - - {isLoading || !data ? ( - - ) : ( - <> - - {smallUsdFormatter(data.totalSupply)} - - - )} - - Total value supplied across Midas - - - - - ); -}; - -export default MidasHero; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/AdditionalInfo.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/AdditionalInfo.tsx deleted file mode 100644 index a70b7e5ed1..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/AdditionalInfo.tsx +++ /dev/null @@ -1,292 +0,0 @@ -import { - AvatarGroup, - Box, - Button, - Grid, - GridItem, - HStack, - Link, - Text, - VStack -} from '@chakra-ui/react'; -import type { Row } from '@tanstack/react-table'; -import { useMemo } from 'react'; - -import type { PoolRowData } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/index'; -import ClaimPoolRewardsButton from '@ui/components/shared/ClaimPoolRewardsButton'; -import { ClipboardValueIconButton } from '@ui/components/shared/ClipboardValue'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { usePoolDetails } from '@ui/hooks/ionic/usePoolDetails'; -import { useRewardTokensOfPool } from '@ui/hooks/rewards/useRewardTokensOfPool'; -import { useAllUsdPrices } from '@ui/hooks/useAllUsdPrices'; -import type { PoolData } from '@ui/types/TokensDataMap'; -import { smallUsdFormatter } from '@ui/utils/bigUtils'; -import { getBlockTimePerMinuteByChainId, getScanUrlByChainId } from '@ui/utils/networkData'; -import { shortAddress } from '@ui/utils/shortAddress'; - -export const AdditionalInfo = ({ row }: { row: Row }) => { - const pool: PoolData = row.original.poolName; - const { getSdk, address } = useMultiIonic(); - const { data: usdPrices } = useAllUsdPrices(); - const usdPrice = useMemo(() => { - if (usdPrices && usdPrices[pool.chainId.toString()]) { - return usdPrices[pool.chainId.toString()].value; - } else { - return undefined; - } - }, [usdPrices, pool.chainId]); - const { data: rewardTokens } = useRewardTokensOfPool(pool.comptroller, pool.chainId); - const { data: poolDetails } = usePoolDetails(pool.assets, pool.chainId); - const sdk = useMemo(() => getSdk(pool.chainId), [getSdk, pool.chainId]); - const scanUrl = useMemo(() => getScanUrlByChainId(pool.chainId), [pool.chainId]); - - const topLendingApy = useMemo(() => { - if (sdk && poolDetails) { - return sdk - .ratePerBlockToAPY( - poolDetails.topLendingAPYAsset.supplyRatePerBlock, - getBlockTimePerMinuteByChainId(sdk.chainId) - ) - .toFixed(2); - } - }, [sdk, poolDetails]); - - const topBorrowApr = useMemo(() => { - if (sdk && poolDetails) { - return sdk - .ratePerBlockToAPY( - poolDetails.topBorrowAPRAsset.borrowRatePerBlock, - getBlockTimePerMinuteByChainId(sdk.chainId) - ) - .toFixed(2); - } - }, [sdk, poolDetails]); - - return ( - - - - - - - Your Supply Balance - - {address ? ( - - - {smallUsdFormatter(pool.totalSupplyBalanceFiat)} - {pool.totalSupplyBalanceFiat > 0 && pool.totalSupplyBalanceFiat < 0.01 && '+'} - - - ) : ( - - - - - - - )} - - - - Your Borrow Balance - - {address ? ( - - - {smallUsdFormatter(pool.totalBorrowBalanceFiat)} - {pool.totalBorrowBalanceFiat > 0 && pool.totalBorrowBalanceFiat < 0.01 && '+'} - - - ) : ( - - - - - - - )} - - - - {rewardTokens && rewardTokens.length > 0 && ( - - - Offering Rewards - - - {rewardTokens.map((token, i) => ( - - ))} - - - )} - - - - - - - - Most Supplied Asset - - - - {poolDetails?.mostSuppliedAsset ? ( - - ) : ( - - - )} - - - - {poolDetails?.mostSuppliedAsset && - usdPrice && - smallUsdFormatter(poolDetails.mostSuppliedAsset.totalSupplyNative * usdPrice)} - - - - - - - Top Lending APY - - - - {poolDetails?.topLendingAPYAsset ? ( - - ) : ( - - - )} - - - - {topLendingApy && `${topLendingApy}% APY`} - - - - - - - Top Stable Borrow APR - - - - {poolDetails?.topBorrowAPRAsset ? ( - - ) : ( - - - )} - - - - {topBorrowApr && `${topBorrowApr}% APR`} - - - - - - - Pool Address - - - - {pool.comptroller ? ( - - - - - - - ) : ( - - ? - - )} - - - - - - ); -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/Assets.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/Assets.tsx deleted file mode 100644 index 6799de9cec..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/Assets.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { AvatarGroup, HStack, Text } from '@chakra-ui/react'; -import { useMemo } from 'react'; - -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { SHRINK_ASSETS } from '@ui/constants/index'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const Assets = ({ pool }: { pool: PoolData }) => { - const tokens = useMemo(() => { - return pool.underlyingTokens.map((address, index) => ({ - address, - symbol: pool.underlyingSymbols[index] - })); - }, [pool.underlyingSymbols, pool.underlyingTokens]); - if (pool.underlyingTokens.length === 0) return null; - - return ( - - - {tokens.slice(0, SHRINK_ASSETS).map((token, i) => ( - - ))} - - {/* TODO list hidden assets in tooltip */} - {tokens.length - SHRINK_ASSETS > 0 && ( - +{tokens.length - SHRINK_ASSETS} - )} - - ); -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/BorrowBalance.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/BorrowBalance.tsx deleted file mode 100644 index fc386db182..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/BorrowBalance.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Text } from '@chakra-ui/react'; - -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const BorrowBalance = ({ pool }: { pool: PoolData }) => { - const { address } = useMultiIonic(); - return ( - <> - {!address ? ( - - - - - - - ) : ( - - )} - - ); -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/Chain.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/Chain.tsx deleted file mode 100644 index baa959f476..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/Chain.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { HStack, Img } from '@chakra-ui/react'; -import type { ReactNode } from 'react'; - -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useChainConfig } from '@ui/hooks/useChainConfig'; - -export const Chain = ({ chainId, ...props }: { [key: string]: ReactNode; chainId: number }) => { - const chainConfig = useChainConfig(chainId); - - return ( - - {chainConfig && ( - - {chainConfig.specificParams.metadata.name} - - )} - - ); -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ChainFilterButtons.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ChainFilterButtons.tsx deleted file mode 100644 index 324cb93002..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ChainFilterButtons.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import type { ButtonGroupProps } from '@chakra-ui/react'; -import { ButtonGroup, HStack, Img, Spinner, Text } from '@chakra-ui/react'; -import type { SupportedChains } from '@ionicprotocol/types'; - -import { CButton } from '@ui/components/shared/Button'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL } from '@ui/constants/index'; -import { useChainConfig, useEnabledChains } from '@ui/hooks/useChainConfig'; - -export const ChainFilterButtons = ({ - globalFilter, - isLoading, - loadingStatusPerChain, - onFilter, - props -}: { - globalFilter: (SupportedChains | string)[]; - isLoading: boolean; - loadingStatusPerChain: { [chainId: string]: boolean }; - onFilter: (filter: SupportedChains | string) => void; - props?: ButtonGroupProps; -}) => { - const enabledChains = useEnabledChains(); - - return ( - - onFilter(ALL)} - p={0} - variant="filter" - > - - - All - - - - {enabledChains.map((chainId) => { - return ( - - ); - })} - - ); -}; - -const ChainFilterButton = ({ - chainId, - onFilter, - globalFilter, - isLoading -}: { - chainId: SupportedChains; - globalFilter: (SupportedChains | string)[]; - isLoading: boolean; - onFilter: (chainId: SupportedChains) => void; -}) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - onFilter(chainId)} - p={0} - variant="filter" - > - - - {isLoading ? ( - - ) : ( - - )} - - {chainConfig.specificParams.metadata.shortName} - - - - - ) : null; -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ChainFilterDropdown.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ChainFilterDropdown.tsx deleted file mode 100644 index 70c0b27376..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ChainFilterDropdown.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import { SpinnerIcon } from '@chakra-ui/icons'; -import type { AvatarProps, ButtonProps } from '@chakra-ui/react'; -import { - Avatar, - AvatarGroup, - Button, - Checkbox, - HStack, - Img, - Spinner, - Text, - VStack -} from '@chakra-ui/react'; -import type { SupportedChains } from '@ionicprotocol/types'; - -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { ALL, SEARCH } from '@ui/constants/index'; -import { useChainConfig, useEnabledChains } from '@ui/hooks/useChainConfig'; - -export const ChainFilterDropdown = ({ - globalFilter, - isLoading, - loadingStatusPerChain, - onFilter, - props -}: { - globalFilter: (SupportedChains | string)[]; - isLoading: boolean; - loadingStatusPerChain: { [chainId: string]: boolean }; - onFilter: (filter: SupportedChains | string) => void; - props: ButtonProps; -}) => { - const enabledChains = useEnabledChains(); - const chainFilter = globalFilter.filter((f) => f !== SEARCH && f !== ALL) as SupportedChains[]; - - return ( - - Select Chains - onFilter(ALL)} - > - All Chains - - - {enabledChains.map((chainId) => { - return ( - - ); - })} - - } - popoverProps={{ placement: 'bottom-start', trigger: 'click' }} - > - - - ); -}; - -const IconChainName = ({ - chainId, - isLoading -}: { - chainId: SupportedChains; - isLoading: boolean; -}) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - {isLoading ? ( - - ) : ( - - )} - {chainConfig.specificParams.metadata.shortName} - - ) : null; -}; - -const ChainFilterCheckbox = ({ - chainId, - onFilter, - globalFilter, - isLoading -}: { - chainId: SupportedChains; - globalFilter: (SupportedChains | string)[]; - isLoading: boolean; - onFilter: (chainId: SupportedChains) => void; -}) => { - const chainConfig = useChainConfig(chainId); - const isChecked = globalFilter.includes(chainId) || globalFilter.includes(ALL); - - return chainConfig ? ( - onFilter(chainId)}> - - - ) : null; -}; - -interface ButtonContentProps extends AvatarProps { - chainId: SupportedChains; - loadingStatusPerChain: { [chainId: string]: boolean }; -} - -const ButtonContent = ({ chainId, loadingStatusPerChain, ...avatarProps }: ButtonContentProps) => { - const chainConfig = useChainConfig(chainId); - - return chainConfig ? ( - - - ) : undefined - } - name={chainConfig.specificParams.metadata.shortName} - src={chainConfig.specificParams.metadata.img} - width="26px" - {...avatarProps} - /> - - ) : null; -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ExpanderArrow.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ExpanderArrow.tsx deleted file mode 100644 index ce66143f80..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ExpanderArrow.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { ChevronDownIcon, ChevronUpIcon } from '@chakra-ui/icons'; -import { HStack } from '@chakra-ui/react'; - -import { CIconButton } from '@ui/components/shared/Button'; - -export const ExpanderArrow = ({ - getToggleExpandedHandler, - isExpanded, - canExpand -}: { - canExpand: boolean; - getToggleExpandedHandler: () => void; - isExpanded: boolean; -}) => { - return ( - - : } - onClick={(e) => { - e.stopPropagation(); - getToggleExpandedHandler(); - }} - variant="_outline" - /> - - ); -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/PoolName.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/PoolName.tsx deleted file mode 100644 index 8fdaa1bbcc..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/PoolName.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { AvatarGroup, Box, Button, HStack, Link, Stack, Text, VStack } from '@chakra-ui/react'; -import { useRouter } from 'next/router'; -import { useState } from 'react'; - -import { GradientText } from '@ui/components/shared/GradientText'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { TokenIcon } from '@ui/components/shared/TokenIcon'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { usePoolClaimableRewards } from '@ui/hooks/rewards/usePoolClaimableRewards'; -import { useRewardTokensOfPool } from '@ui/hooks/rewards/useRewardTokensOfPool'; -import { useColors } from '@ui/hooks/useColors'; - -export const PoolName = ({ - comptroller, - chainId, - poolName, - poolId, - isDisabledTooltip -}: { - chainId: number; - comptroller: string; - isDisabledTooltip?: boolean; - poolId: number; - poolName: string; -}) => { - const { setGlobalLoading } = useMultiIonic(); - const { data: rewardTokens } = useRewardTokensOfPool(comptroller, chainId); - const { data: claimableRewards } = usePoolClaimableRewards(comptroller, chainId); - const { cCard } = useColors(); - const router = useRouter(); - const [isHovering, setIsHovering] = useState(false); - - return ( - - - - - - - {rewardTokens && rewardTokens.length && ( - - Earn Rewards - - {rewardTokens.map((token) => ( - - ))} - - - )} - - ); -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/SupplyBalance.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/SupplyBalance.tsx deleted file mode 100644 index 6018e5dd4c..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/SupplyBalance.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Text } from '@chakra-ui/react'; - -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const SupplyBalance = ({ pool }: { pool: PoolData }) => { - const { address } = useMultiIonic(); - return ( - <> - {!address ? ( - - - - - - - ) : ( - - )} - - ); -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/TotalBorrow.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/TotalBorrow.tsx deleted file mode 100644 index 882c414e77..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/TotalBorrow.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const TotalBorrow = ({ pool }: { pool: PoolData }) => { - return ( - - ); -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/TotalSupply.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/TotalSupply.tsx deleted file mode 100644 index e7a1a8728a..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/TotalSupply.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { BalanceCell } from '@ui/components/shared/BalanceCell'; -import type { PoolData } from '@ui/types/TokensDataMap'; - -export const TotalSupply = ({ pool }: { pool: PoolData }) => { - return ( - - ); -}; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/index.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/index.tsx deleted file mode 100644 index bfca3f74ce..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/index.tsx +++ /dev/null @@ -1,750 +0,0 @@ -import { ChevronLeftIcon, ChevronRightIcon, SettingsIcon } from '@chakra-ui/icons'; -import { - Center, - Checkbox, - Flex, - Hide, - HStack, - IconButton, - Input, - Select, - Skeleton, - Stack, - Table, - Tbody, - Td, - Text, - Th, - Thead, - Tr, - VStack -} from '@chakra-ui/react'; -import type { SupportedChains } from '@ionicprotocol/types'; -import type { - ColumnDef, - FilterFn, - PaginationState, - SortingFn, - SortingState, - VisibilityState -} from '@tanstack/react-table'; -import { - flexRender, - getCoreRowModel, - getExpandedRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - useReactTable -} from '@tanstack/react-table'; -import { useRouter } from 'next/router'; -import { Fragment, useEffect, useMemo, useRef, useState } from 'react'; -import * as React from 'react'; - -import { AdditionalInfo } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/AdditionalInfo'; -import { Assets } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/Assets'; -import { BorrowBalance } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/BorrowBalance'; -import { Chain } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/Chain'; -import { ChainFilterButtons } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ChainFilterButtons'; -import { ChainFilterDropdown } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ChainFilterDropdown'; -import { ExpanderArrow } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/ExpanderArrow'; -import { PoolName } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/PoolName'; -import { SupplyBalance } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/SupplyBalance'; -import { TotalBorrow } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/TotalBorrow'; -import { TotalSupply } from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/TotalSupply'; -import { Banner } from '@ui/components/shared/Banner'; -import { CIconButton } from '@ui/components/shared/Button'; -import { CardBox } from '@ui/components/shared/IonicBox'; -import { PopoverTooltip } from '@ui/components/shared/PopoverTooltip'; -import { TableHeaderCell } from '@ui/components/shared/TableHeaderCell'; -import { - ALL, - ASSETS, - BORROW_BALANCE, - CHAIN, - EXPANDER, - IONIC_LOCALSTORAGE_KEYS, - POOL_NAME, - POOLS_COLUMNS, - POOLS_COUNT_PER_PAGE, - SEARCH, - SUPPLY_BALANCE, - TOTAL_BORROW, - TOTAL_SUPPLY -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useEnabledChains } from '@ui/hooks/useChainConfig'; -import { useColors } from '@ui/hooks/useColors'; -import { useDebounce } from '@ui/hooks/useDebounce'; -import { useIsMobile } from '@ui/hooks/useScreenSize'; -import type { Err, PoolsPerChainStatus } from '@ui/types/ComponentPropsType'; -import type { PoolData } from '@ui/types/TokensDataMap'; -import { poolSortByAddress } from '@ui/utils/sorts'; - -export type PoolRowData = { - assets: PoolData; - borrowBalance: PoolData; - chain: PoolData; - poolName: PoolData; - supplyBalance: PoolData; - totalBorrow: PoolData; - totalSupply: PoolData; -}; - -const PoolsRowList = ({ - poolsPerChain, - isLoading -}: { - isLoading: boolean; - poolsPerChain: PoolsPerChainStatus; -}) => { - const { address, setGlobalLoading } = useMultiIonic(); - const [err, setErr] = useState(); - const [isLoadingPerChain, setIsLoadingPerChain] = useState(false); - const [selectedFilteredPools, setSelectedFilteredPools] = useState([]); - const [sorting, setSorting] = useState([ - { desc: true, id: address ? SUPPLY_BALANCE : TOTAL_SUPPLY } - ]); - const [pagination, onPagination] = useState({ - pageIndex: 0, - pageSize: POOLS_COUNT_PER_PAGE[0] - }); - const [globalFilter, setGlobalFilter] = useState<(SupportedChains | string)[]>([ALL]); - const [columnVisibility, setColumnVisibility] = useState({}); - const [searchText, setSearchText] = useState(''); - const mounted = useRef(false); - const router = useRouter(); - const allPools = useMemo(() => { - return Object.values(poolsPerChain).reduce((res, pools) => { - if (pools.data && pools.data.length > 0) { - res.push(...pools.data); - } - return res; - }, [] as PoolData[]); - }, [poolsPerChain]); - - const loadingStatusPerChain = useMemo(() => { - const _loadingStatusPerChain: { [chainId: string]: boolean } = {}; - - Object.entries(poolsPerChain).map(([chainId, pools]) => { - _loadingStatusPerChain[chainId] = pools.isLoading; - }); - - return _loadingStatusPerChain; - }, [poolsPerChain]); - - const enabledChains = useEnabledChains(); - - useEffect(() => { - const pools: PoolData[] = []; - - if (globalFilter.includes(ALL)) { - setSelectedFilteredPools([...allPools]); - } else { - globalFilter.map((filter) => { - const data = poolsPerChain[filter.toString()]?.data; - if (data) { - pools.push(...data); - } - }); - - setSelectedFilteredPools(pools); - } - }, [globalFilter, poolsPerChain, allPools]); - - const poolFilter: FilterFn = (row, columnId, value) => { - const pool = row.original.poolName; - const namesAndSymbols: string[] = []; - pool.assets.map((asset) => { - namesAndSymbols.push( - asset.underlyingName.toLowerCase(), - asset.underlyingSymbol.toLowerCase() - ); - }); - if ( - !searchText || - (value.includes(SEARCH) && - (pool.comptroller.toLowerCase().includes(searchText.toLowerCase()) || - pool.name.toLowerCase().includes(searchText.toLowerCase()) || - namesAndSymbols.some((ns) => ns.includes(searchText.toLowerCase())))) - ) { - if (value.includes(ALL) || value.includes(pool.chainId)) { - return true; - } else { - return false; - } - } else { - return false; - } - }; - - const poolSort: SortingFn = (rowA, rowB, columnId) => { - if (columnId === CHAIN) { - return rowB.original.poolName.chainId > rowA.original.poolName.chainId ? 1 : -1; - } else if (columnId === POOL_NAME) { - return rowB.original.poolName.name.localeCompare(rowA.original.poolName.name); - } else if (columnId === SUPPLY_BALANCE) { - return rowA.original.poolName.totalSupplyBalanceFiat > - rowB.original.poolName.totalSupplyBalanceFiat - ? 1 - : -1; - } else if (columnId === BORROW_BALANCE) { - return rowA.original.poolName.totalBorrowBalanceFiat > - rowB.original.poolName.totalBorrowBalanceFiat - ? 1 - : -1; - } else if (columnId === TOTAL_SUPPLY) { - return rowA.original.poolName.totalSuppliedFiat > rowB.original.poolName.totalSuppliedFiat - ? 1 - : -1; - } else if (columnId === TOTAL_BORROW) { - return rowA.original.poolName.totalBorrowedFiat > rowB.original.poolName.totalBorrowedFiat - ? 1 - : -1; - } else { - return 1; - } - }; - - const data: PoolRowData[] = useMemo(() => { - return poolSortByAddress(allPools).map((pool) => { - return { - assets: pool, - borrowBalance: pool, - chain: pool, - poolName: pool, - supplyBalance: pool, - totalBorrow: pool, - totalSupply: pool - }; - }); - }, [allPools]); - - const columns: ColumnDef[] = useMemo(() => { - return [ - { - accessorFn: (row) => row.chain, - cell: ({ getValue }) => ().chainId} />, - enableHiding: false, - enableSorting: false, - footer: (props) => props.column.id, - header: () => null, - id: CHAIN - }, - { - accessorFn: (row) => row.poolName, - cell: ({ getValue }) => ( - ().chainId} - comptroller={getValue().comptroller} - poolId={getValue().id} - poolName={getValue().name} - /> - ), - enableHiding: false, - filterFn: poolFilter, - footer: (props) => props.column.id, - header: (context) => Pool Name, - id: POOL_NAME, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.assets, - cell: ({ getValue }) => ()} />, - enableSorting: false, - footer: (props) => props.column.id, - header: (context) => Assets, - id: ASSETS - }, - { - accessorFn: (row) => row.supplyBalance, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => Supply Balance, - id: SUPPLY_BALANCE, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.borrowBalance, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => Borrow Balance, - id: BORROW_BALANCE, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.totalSupply, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => Total Supply, - id: TOTAL_SUPPLY, - sortingFn: poolSort - }, - { - accessorFn: (row) => row.totalBorrow, - cell: ({ getValue }) => ()} />, - footer: (props) => props.column.id, - header: (context) => Total Borrow, - id: TOTAL_BORROW, - sortingFn: poolSort - }, - { - cell: ({ row }) => { - return ( - - ); - }, - enableHiding: false, - header: () => null, - id: EXPANDER - } - ]; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - const table = useReactTable({ - columns, - data, - enableSortingRemoval: false, - getColumnCanGlobalFilter: () => true, - getCoreRowModel: getCoreRowModel(), - getExpandedRowModel: getExpandedRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), - getRowCanExpand: () => true, - getSortedRowModel: getSortedRowModel(), - globalFilterFn: poolFilter, - onColumnVisibilityChange: setColumnVisibility, - onGlobalFilterChange: setGlobalFilter, - onPaginationChange: onPagination, - onSortingChange: setSorting, - state: { - columnVisibility, - globalFilter, - pagination, - sorting - } - }); - - const { cCard } = useColors(); - - const onFilter = (filter: SupportedChains | string) => { - let _globalFilter: (SupportedChains | string)[] = []; - - if (globalFilter.includes(filter)) { - if (filter === ALL) { - _globalFilter = [enabledChains[0]]; - } else { - _globalFilter = globalFilter.filter((f) => f !== filter); - - if (_globalFilter.length === 0) { - _globalFilter = [ALL]; - } - } - } else { - if (globalFilter.includes(ALL)) { - _globalFilter = [filter]; - } else if ( - filter === ALL || - enabledChains.length === globalFilter.filter((f) => f !== ALL && f != SEARCH).length + 1 - ) { - _globalFilter = [ALL]; - } else { - _globalFilter = [...globalFilter, filter]; - } - } - - if (globalFilter.includes(SEARCH)) { - setGlobalFilter([..._globalFilter, SEARCH]); - } else { - setGlobalFilter([..._globalFilter]); - } - }; - - useEffect(() => { - if (searchText) { - setGlobalFilter([...globalFilter, SEARCH]); - } else { - setGlobalFilter(globalFilter.filter((f) => f !== SEARCH)); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchText]); - - useEffect(() => { - if (mounted.current) { - const oldData = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - let oldObj; - if (oldData) { - oldObj = JSON.parse(oldData); - } - const arr: string[] = []; - Object.entries(columnVisibility).map(([key, value]) => { - if (value) { - arr.push(key); - } - }); - const data = { ...oldObj, globalFilter, poolsListColumnVisibility: arr, searchText, sorting }; - localStorage.setItem(IONIC_LOCALSTORAGE_KEYS, JSON.stringify(data)); - } - }, [searchText, globalFilter, sorting, columnVisibility]); - - useEffect(() => { - const selectedChainId = Object.keys(poolsPerChain).find((chainId) => - globalFilter.includes(Number(chainId)) - ); - if (selectedChainId) { - setErr(poolsPerChain[selectedChainId].error); - setIsLoadingPerChain(poolsPerChain[selectedChainId].isLoading); - } else { - setErr(undefined); - setIsLoadingPerChain(false); - } - }, [globalFilter, poolsPerChain]); - - useEffect(() => { - mounted.current = true; - - const data = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - if (data && mounted.current) { - const obj = JSON.parse(data); - const _globalFilter = (obj.globalFilter as (SupportedChains | string)[]) || [ALL]; - setGlobalFilter(_globalFilter); - - if (obj && obj.sorting && POOLS_COLUMNS.includes(obj.sorting[0].id)) { - setSorting(obj.sorting); - } else { - setSorting([{ desc: true, id: TOTAL_SUPPLY }]); - } - - const columnVisibility: VisibilityState = {}; - - if (obj.poolsListColumnVisibility && obj.poolsListColumnVisibility.length > 0) { - POOLS_COLUMNS.map((columnId) => { - if (obj.poolsListColumnVisibility.includes(columnId)) { - columnVisibility[columnId] = true; - } else { - columnVisibility[columnId] = false; - } - }); - } else { - POOLS_COLUMNS.map((columnId) => { - columnVisibility[columnId] = true; - }); - } - - setColumnVisibility(columnVisibility); - } - - return () => { - mounted.current = false; - }; - }, []); - - return ( - <> - - - - - setSearchText(searchText)} /> - - Show/Hide Columns - - All - - {table.getAllColumns().map((column) => { - if (column.getCanHide()) { - return ( - - {column.id} - - ); - } - })} - - } - > - } - maxWidth={10} - variant="_outline" - /> - - - - - {!isLoading && !isLoadingPerChain ? ( - - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - ); - })} - - ))} - - - {err && err.code !== 'NETWORK_ERROR' ? ( - - - - ) : table.getRowModel().rows && table.getRowModel().rows.length !== 0 ? ( - table.getRowModel().rows.map((row) => ( - - { - setGlobalLoading(true); - router.push( - `/${row.original.poolName.chainId}/pool/${row.original.poolName.id}` - ); - }} - > - {row.getVisibleCells().map((cell) => { - return ( - - ); - })} - - {row.getIsExpanded() && ( - - {/* 2nd row is a custom 1 cell row */} - - - )} - - )) - ) : selectedFilteredPools.length === 0 ? ( - - - - ) : ( - - - - )} - -
- - {flexRender(header.column.columnDef.header, header.getContext())} - -
- -
- {flexRender(cell.column.columnDef.cell, cell.getContext())} -
- -
-
There are no pools.
-
-
There are no results
-
- ) : ( - - - - - )} - - - - Pools Per Page - - - - - - {table.getFilteredRowModel().rows.length === 0 - ? 0 - : pagination.pageIndex * pagination.pageSize + 1}{' '} - -{' '} - {(pagination.pageIndex + 1) * pagination.pageSize > - table.getFilteredRowModel().rows.length - ? table.getFilteredRowModel().rows.length - : (pagination.pageIndex + 1) * pagination.pageSize}{' '} - of {table.getFilteredRowModel().rows.length} - - - } - isDisabled={!table.getCanPreviousPage()} - isRound - onClick={() => table.previousPage()} - variant="_outline" - /> - } - isDisabled={!table.getCanNextPage()} - isRound - onClick={() => table.nextPage()} - variant="_outline" - /> - - - -
- - ); -}; - -const ControlledSearchInput = ({ onUpdate }: { onUpdate: (value: string) => void }) => { - const [searchText, setSearchText] = useState(''); - const isMobile = useIsMobile(); - const mounted = useRef(false); - const debouncedText = useDebounce(searchText, 400); - - useEffect(() => { - onUpdate(debouncedText); - }, [debouncedText, onUpdate]); - - useEffect(() => { - mounted.current = true; - - const data = localStorage.getItem(IONIC_LOCALSTORAGE_KEYS); - if (data && mounted.current) { - const obj = JSON.parse(data); - const _searchText = obj.searchText || ''; - - setSearchText(_searchText); - } - - return () => { - mounted.current = false; - }; - }, []); - - const onSearch = (e: React.ChangeEvent) => { - setSearchText(e.target.value); - }; - - return ( - - {!isMobile && Search} - - - ); -}; - -export default PoolsRowList; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/index.tsx b/packages/ui/components/pages/Ionic/PoolsPage/PoolList/index.tsx deleted file mode 100644 index 0e275f57d1..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/PoolList/index.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import PoolsRowList from '@ui/components/pages/Ionic/PoolsPage/PoolList/PoolRow/index'; -import { Banner } from '@ui/components/shared/Banner'; -import { useCrossPools } from '@ui/hooks/ionic/useCrossPools'; -import { useEnabledChains } from '@ui/hooks/useChainConfig'; - -const PoolList = () => { - const enabledChains = useEnabledChains(); - const { isAllLoading, poolsPerChain, error } = useCrossPools([...enabledChains]); - - if (error && error.code !== 'NETWORK_ERROR') { - return ( - - ); - } - - return ; -}; - -export default PoolList; diff --git a/packages/ui/components/pages/Ionic/PoolsPage/index.tsx b/packages/ui/components/pages/Ionic/PoolsPage/index.tsx deleted file mode 100644 index d4a5683574..0000000000 --- a/packages/ui/components/pages/Ionic/PoolsPage/index.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { memo } from 'react'; - -import MidasHero from '@ui/components/pages/Ionic/PoolsPage/MidasHero'; -import PoolList from '@ui/components/pages/Ionic/PoolsPage/PoolList'; -import PageLayout from '@ui/components/pages/Layout/PageLayout'; -import PageTransitionLayout from '@ui/components/shared/PageTransitionLayout'; - -const PoolsPage = memo(() => { - return ( - - - - - - - ); -}); - -export default PoolsPage; diff --git a/packages/ui/components/pages/Layout/Footer.tsx b/packages/ui/components/pages/Layout/Footer.tsx deleted file mode 100644 index 1bf97f4ba9..0000000000 --- a/packages/ui/components/pages/Layout/Footer.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { Link, Stack, Text, VStack } from '@chakra-ui/react'; -import { motion } from 'framer-motion'; -import { FaDiscord, FaTelegram, FaTwitter } from 'react-icons/fa'; -import { SiGitbook } from 'react-icons/si'; - -import { Column, Row } from '@ui/components/shared/Flex'; -import { SimpleTooltip } from '@ui/components/shared/SimpleTooltip'; -import { - MIDAS_DISCORD_URL, - MIDAS_DOCS_URL, - MIDAS_TELEGRAM_URL, - MIDAS_TWITTER_URL -} from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useColors } from '@ui/hooks/useColors'; - -const Footer = () => { - const { cPage } = useColors(); - const { isSidebarCollapsed } = useMultiIonic(); - - return ( - - {isSidebarCollapsed !== undefined ? ( - <> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {!isSidebarCollapsed ? ( - - - © {new Date().getFullYear()} Ionic Protocol - - - All rights reserved - - - ) : null} - - ) : null} - - ); -}; - -export default Footer; diff --git a/packages/ui/components/pages/Layout/Header.tsx b/packages/ui/components/pages/Layout/Header.tsx deleted file mode 100644 index 652c112df2..0000000000 --- a/packages/ui/components/pages/Layout/Header.tsx +++ /dev/null @@ -1,313 +0,0 @@ -import { Box, Flex, HStack, IconButton, Image, Link, Text, useColorMode } from '@chakra-ui/react'; -import { useRouter } from 'next/router'; -import React, { useEffect, useState } from 'react'; -import { FiMenu } from 'react-icons/fi'; - -import { WalletButtons } from '@ui/components/shared/WalletButtons'; -import { config } from '@ui/config/index'; -import { FEATURE_REQUESTS_URL } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useColors } from '@ui/hooks/useColors'; - -export const Header = ({ onOpen }: { onOpen: () => void }) => { - const router = useRouter(); - const { colorMode } = useColorMode(); - const { cIPage } = useColors(); - const { setGlobalLoading, address } = useMultiIonic(); - - const [isEnabledLeverageMenu, setIsEnabledLeverageMenu] = useState(false); - - useEffect(() => { - setIsEnabledLeverageMenu( - !config.productDomain || !window.location.hostname.includes(config.productDomain) - ); - }, []); - - return ( - - {/* } - onClick={() => setIsSidebarCollapsed(!isSidebarCollapsed)} - variant="_outline" - /> */} - - - { - if (router.pathname !== '/') { - setGlobalLoading(true); - router.push('/', undefined, { shallow: true }); - } - }} - > - Ionic - - - {!config.isProduction ? ( - <> - { - setGlobalLoading(true); - router.push('/lend'); - }} - > - - Lend - - - { - setGlobalLoading(true); - router.push('/borrow'); - }} - > - - Borrow - - - - { - setGlobalLoading(true); - router.push('/dashboard'); - }} - > - - Dashboard - - - - ) : null} - { - setGlobalLoading(true); - router.push('/lend'); - }} - > - - Lend - - - { - setGlobalLoading(true); - router.push('/borrow'); - }} - > - - Borrow - - - { - if (router.pathname !== '/') { - setGlobalLoading(true); - router.push('/', undefined, { shallow: true }); - } - }} - > - - Pools - - - {!config.isProduction ? ( - <> - { - setGlobalLoading(true); - router.push('/vaults'); - }} - > - - Supply Vaults - - - {isEnabledLeverageMenu ? ( - { - setGlobalLoading(true); - router.push('/leverage'); - }} - > - - Leverage - - - ) : null} - {address ? ( - { - setGlobalLoading(true); - router.push('/account'); - }} - > - - Account - - - ) : null} - { - setGlobalLoading(true); - router.push('/create-pool'); - }} - > - - Create Pool - - - - - - Request Feature - - - - - ) : null} - - - - } - ml="0px !important" - onClick={onOpen} - variant="_outline" - /> - - - {/*
- -
- */} -
-
- ); -}; diff --git a/packages/ui/components/pages/Layout/PageLayout.tsx b/packages/ui/components/pages/Layout/PageLayout.tsx deleted file mode 100644 index 0de4c278f2..0000000000 --- a/packages/ui/components/pages/Layout/PageLayout.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { Box, Drawer, DrawerContent, Flex, useDisclosure } from '@chakra-ui/react'; - -import { Header } from '@ui/components/pages/Layout/Header'; -import { SidebarMobile } from '@ui/components/pages/Layout/SidebarMobile'; -import { useColors } from '@ui/hooks/useColors'; -import type { PageLayoutProps } from '@ui/types/ComponentPropsType'; - -const PageLayout = ({ children }: PageLayoutProps) => { - const { cIPage } = useColors(); - const { isOpen, onOpen, onClose } = useDisclosure(); - - return ( - - {/* */} - - - - - -
- - {children} - - - ); -}; - -export default PageLayout; diff --git a/packages/ui/components/pages/Layout/Sidebar.tsx b/packages/ui/components/pages/Layout/Sidebar.tsx deleted file mode 100644 index f518f7b68c..0000000000 --- a/packages/ui/components/pages/Layout/Sidebar.tsx +++ /dev/null @@ -1,222 +0,0 @@ -import { Box, Flex, Icon, Image, Link, Stack, Text, useColorMode } from '@chakra-ui/react'; -import { useRouter } from 'next/router'; -import React, { useEffect, useState } from 'react'; -import { BsChatLeftTextFill, BsFillHouseFill, BsHouseAddFill } from 'react-icons/bs'; -import { ImUser } from 'react-icons/im'; -import { RiBuilding2Fill } from 'react-icons/ri'; -import { SiVault } from 'react-icons/si'; - -import Footer from '@ui/components/pages/Layout/Footer'; -import { config } from '@ui/config/index'; -import { FEATURE_REQUESTS_URL } from '@ui/constants/index'; -import { useMultiIonic } from '@ui/context/MultiIonicContext'; -import { useColors } from '@ui/hooks/useColors'; - -export const Sidebar = () => { - const router = useRouter(); - const { colorMode } = useColorMode(); - const { cPage, cCard, cSolidBtn } = useColors(); - const { address, setGlobalLoading, isSidebarCollapsed } = useMultiIonic(); - const [isEnabledLeverageMenu, setIsEnabledLeverageMenu] = useState(false); - - useEffect(() => { - setIsEnabledLeverageMenu( - !config.productDomain || !window.location.hostname.includes(config.productDomain) - ); - }, []); - - return isSidebarCollapsed !== undefined ? ( - - - { - if (router.pathname !== '/') { - setGlobalLoading(true); - router.push('/', undefined, { shallow: true }); - } - }} - overflow={'hidden'} - position={'absolute'} - top={2} - > - Ionic Protocol - - - { - setGlobalLoading(true); - router.push('/'); - }} - p="4" - role="group" - > - - {!isSidebarCollapsed ? ( - - Pools - - ) : null} - - { - setGlobalLoading(true); - router.push('/vaults'); - }} - p="4" - role="group" - > - - {!isSidebarCollapsed ? ( - - Supply Vaults - - ) : null} - - {isEnabledLeverageMenu ? ( - { - setGlobalLoading(true); - router.push('/leverage'); - }} - p="4" - role="group" - > - - {!isSidebarCollapsed ? ( - - Leverage - - ) : null} - - ) : null} - {address ? ( - { - setGlobalLoading(true); - router.push('/account'); - }} - p="4" - role="group" - > - - {!isSidebarCollapsed ? ( - - Account - - ) : null} - - ) : null} - { - setGlobalLoading(true); - router.push('/create-pool'); - }} - p="4" - role="group" - > - - {!isSidebarCollapsed ? ( - - Create Pool - - ) : null} - - - - - {!isSidebarCollapsed ? ( - - Request Feature - - ) : null} - - - -